精华内容
下载资源
问答
  • 树莓派pyaudio安装与声音监控应用

    千次阅读 2019-01-18 21:50:12
    ** 树莓派下paudio安装与声音监控运用 ** 在树莓派平台上使用pyaudio实现usb麦克风的录音功能,进而可以实现人机交互,实现语音识别和语音...pyaudio是python的模块,在树莓派下安装pyaudio 首先需安装portaudio....

    树莓派下paudio安装与声音监控运用

    在树莓派平台上使用pyaudio实现usb麦克风的录音功能,进而可以实现人机交互,实现语音识别和语音合成。
    参考pyaudio官方文档,链接地址如下:

    http://people.csail.mit.edu/hubert/pyaudio/docs/

    pyaudio是python的模块,在树莓派下安装pyaudio 首先需安装portaudio.dev
    安装步骤如下:
    1、安装portaudio.dev : sudo apt-get install portaudio.dev
    2、安装python-pyaudio: sudo apt-get install python-pyaudio
    3、安装sox快速检测麦克风配置是否正确sudo apt-get install sox
    4、测试麦克风配置是否正确,树莓派终端输入以下命令
    rec temp.wav
    测试成功的结果
    5、测试pyaudio 代码如下:录音40s并保存为audio.wav播放

    #_*_ coding:UTF-8 _*_
    # @author: zdl 
    # 测试pyaudio 使用pyaudio录音,录音完毕播放录音内容
    # 需要安装pyaudio 安装过程在教程中讲解
    # pyaudio API函数库参考: http://people.csail.mit.edu/hubert/pyaudio/docs/#pyaudio.Stream.write
    
    import wave
    from pyaudio import PyAudio,paInt16
    
    # 设置采样参数
    NUM_SAMPLES = 2000
    TIME = 2
    chunk = 1024
    
    # read wav file from filename 
    def read_wave_file(filename):
    	
        fp = wave.open(filename,'rb')
        nf = fp.getnframes()     #获取采样点数量
        print('sampwidth:',fp.getsampwidth())  
        print('framerate:',fp.getframerate())
        print('channels:',fp.getnchannels())
        f_len = nf*2
        audio_data = fp.readframes(nf)
    
    # save wav file to filename 
    def save_wave_file(filename,data):  
    
        wf = wave.open(filename,'wb')
        wf.setnchannels(1)      # set channels  1 or 2
        wf.setsampwidth(2)      # set sampwidth 1 or 2
        wf.setframerate(16000)  # set framerate 8K or 16K
        wf.writeframes(b"".join(data))  # write data
        wf.close()
    
    #recode audio to audio.wav
    def record():
        pa = PyAudio()     # 实例化 pyaudio
    	
        # 打开输入流并设置音频采样参数 1 channel 16K framerate 
        stream = pa.open(format = paInt16,
                         channels=1,
                         rate=16000,
                         input=True,
                         frames_per_buffer=NUM_SAMPLES)
    	
        audioBuffer = []   # 录音缓存数组
        count = 0
    	
        # 录制40s语音
        while count<TIME*20:
            string_audio_data = stream.read(NUM_SAMPLES) #一次性录音采样字节的大小
            audioBuffer.append(string_audio_data)
            count +=1
            print('.'),  #加逗号不换行输出
    	
        # 保存录制的语音文件到audio.wav中并关闭流
        save_wave_file('audio.wav',audioBuffer)
        stream.close()
    
    # 播放后缀为wav的音频文件
    def play():
    
        wf = wave.open(r"audio.wav",'rb') # 打开audio.wav
        p = PyAudio()                     # 实例化pyaudio
    	
        # 打开流
        stream = p.open( format=p.get_format_from_width(wf.getsampwidth()),
                         channels=wf.getnchannels(),
                         rate=wf.getframerate(),
                         output=True)
        # 播放音频
        while True:
            data = wf.readframes(chunk)
            if data == "":break
            stream.write(data)
    	
        # 释放IO
        stream.stop_stream()
        stream.close()
        p.terminate()
    
    # main函数 录制40s音频并播放
    if __name__ == '__main__':
    
        print('record ready...')
        record()
        print('record over!') 
        play()
        
    

    程序演示结果:

    测试成功结果

    使用不同的usb摄像头会出现采样率报错的问题,解决方案参考以下博客:
    https://blog.csdn.net/u013860985/article/details/79326379
    https://blog.csdn.net/u013372900/article/details/80296125
    添加一个新的~/.asoundrc 到pi目录下:sudo nano ~/.asoundrc
    输入以下内容:

    pcm.!default {
        type hw
        card 1
    }
    ctl.!default {
        type hw
        card 1
    }
    

    或者:

    pcm.!default {
            type asym
                playback.pcm {
                    type plug
                    slave.pcm "hw:0,0"
                }
                capture.pcm {
                    type plug
                    slave.pcm "hw:1,0"
                }        
    }
    ctl.!default {
            type hw
            card 1
    }
    

    录音结果

    树莓派音频输出设置:
    1、选择树莓派 audio output 为AUTO或者3.5mm sudo raspi-config 设置
    2、如何调整输出音量,终端输入 alsamixer 命令然后上下键调整

    3、语音合成的音频为MP3文件,pyaudio只能播放wav文件,所以需要安装MP3播放插件 mplayer。
    安装 sudo apt-get install mplayer
    测试 mplayer xx.mp3 (需先进入xx.mp3的文件夹下)
    Python 程序播放 MP3: os.system('mplayer %s' % 'xx.mp3')

    思考:如何采用pyaudio制作声音的监控装置呢?监控噪声、人或者物体运动然后提示报警?

    #coding:utf-8
    # @author: zdl 
    
    #需要安装pyaudio
    import wave
    import numpy as np
    from pyaudio import PyAudio,paInt16
    import time
    NUM_SAMPLES = 2000
    global t
    
    chunk = 1024
    def play(filename):
        wf = wave.open(filename,'rb')
        p = PyAudio()
        stream = p.open( format=p.get_format_from_width(wf.getsampwidth()),
                         channels=wf.getnchannels(),
                         rate=wf.getframerate(),
                         output=True)
        while True:
            data = wf.readframes(chunk)
            if data == "":break
            stream.write(data)
        stream.stop_stream()
        stream.close()
        p.terminate()
        
    def save_wave_file(filename,data):   #save data to filename
    
        wf = wave.open(filename,'wb')
        wf.setnchannels(1)   #set channel
        wf.setsampwidth(2)  #采样字节  1 or 2
        wf.setframerate(16000)  #采样频率  8K or 16K
        wf.writeframes(b"".join(data))
        wf.close()
    
    # 声音监视函数
    def Monitor():
        pa = PyAudio()      # 调用句柄
        stream = pa.open(format = paInt16,
                         channels=1,
                         rate=16000,
                         input=True,
                         frames_per_buffer=NUM_SAMPLES)
        print('开始缓存录音')
        audioBuffer = []
        rec = []
        audioFlag = False
        t = False
        while True:
            data = stream.read(NUM_SAMPLES,exception_on_overflow = False) #add exception para
            #if audioFlag == True:
               # rec.append(data)        #剪切的语音文件
            audioBuffer.append(data)     #录音源文件
            audioData = np.fromstring(data,dtype=np.short) #字符串创建矩阵
            largeSampleCount = np.sum(audioData > 2000)
            temp = np.max(audioData)
    
            print temp
            if temp > 8000 and t == False:  # 声音阈值,结合实验确定,实现声音监控
                t = 1 #开始录音
                print "检测到语音信号,开始录音"
                begin = time.time()
                print temp
            if t:
                end = time.time()
                if end-begin > 5:
                    timeFlag = 1 #5s录音结束
                if largeSampleCount > 20:
                    saveCount = 4
                else:
                    saveCount -=1
                if saveCount <0:
                    saveCount =0
                if saveCount >0:
                    rec.append(data)
                else:
                    if len(rec) >0 or timeFlag:
                        save_wave_file('01.wav',rec)
                        rec = []
                        t = 0
                        timeFlag = 0
        stream.stop_stream()
        stream.close()
        p.terminate()
    
    if __name__ == '__main__':
    
        Monitor()
    

    可以查看我的github获取更多信息:https://github.com/dalinzhangzdl/AI_Car_Raspberry-pi

    展开全文
  • 环境:python2.7 需要导入的包: wave 和 pyaudio pyaudio怎么安装请自行百度,直接上代码 #_*_ coding:UTF-8 _*_ import wave from pyaudio import PyAudio,paInt16 # 设置采样参数 NUM_SAMPLES = 2000 TIME = 2 ...

    因为在做一个语音识别机器人,需要用到录音模块,本来想直接用arecord命令:

    os.system('arecord -d 4 -r 16000 -c 1 -t wav -f S16_LE -D plughw:1,0 record.wav')
    

    但每次运行结束后再次运行就会出现“arecord”资源被占用,输入ps -aux|grep python查看进程发现我的robot.py虽然已停止,但必须得kill -9 PID才能再次运行。这个问题至今还没找到答案,如果有知道的伙伴麻烦告知一声,感激不尽。

    基于以上原因,我决定用pyaudio录音,参考了一些博主的代码进行加工。

    环境:python2.7

    需要导入的包: wave 和 pyaudio

    pyaudio怎么安装请自行百度,直接上代码

    #_*_ coding:UTF-8 _*_
    
    import wave
    from pyaudio import PyAudio,paInt16
    
    # 设置采样参数
    NUM_SAMPLES = 2000
    TIME = 2
    chunk = 1024
    
    # 读wav文件
    def read_wave_file(filename):	
        fp = wave.open(filename,'rb')
        nf = fp.getnframes()     #获取采样点数量
        f_len = nf*2
        audio_data = fp.readframes(nf)
    
    # 保存wav音频文件 
    def save_wave_file(filename,data):  
        wf = wave.open(filename,'wb')
        wf.setnchannels(1)  
        wf.setsampwidth(2)     
        wf.setframerate(16000) 
        wf.writeframes(b"".join(data))  
        wf.close()
    
    # 录音
    def record():
        pa = PyAudio()   
        # 打开输入流并设置音频采样参数 1 channel 16K framerate 
        stream = pa.open(format = paInt16,
                         channels=1,
                         rate=16000,
                         input=True,
                         frames_per_buffer=NUM_SAMPLES)	
        audioBuffer = []   # 录音缓存数组
        count = 0	
        # 录制40s语音
        while count<TIME*20:
            string_audio_data = stream.read(NUM_SAMPLES) #一次性录音采样字节的大小
            audioBuffer.append(string_audio_data)
            count +=1
            print('.'),  #加逗号不换行输出	
        # 保存录制的语音文件到record_voice.wav中并关闭流
        save_wave_file('record_voice.wav',audioBuffer)
        pathname='record_voice.wav'
        stream.close()
        return pathname
    
    # 播放后缀为wav的音频文件
    def play(pathname):
        wf = wave.open(pathname,'rb') 
        p = PyAudio()               	
        # 打开流
        stream = p.open( format=p.get_format_from_width(wf.getsampwidth()),
                         channels=wf.getnchannels(),
                         rate=wf.getframerate(),
                         output=True)
        # 播放音频
        while True:
            data = wf.readframes(chunk)
            if data == "":break
            stream.write(data)	
        # 释放IO
        stream.stop_stream()
        stream.close()
        p.terminate()
    
    
     if __name__ == '__main__': 
        print('record ready...')
        pathname=record()
        print('record over!') 
        play(pathname)
    
    展开全文
  • 树莓派解决pyaudio 采样率16k报错问题

    千次阅读 2018-02-14 20:04:48
    问题出处: 以前做了一个对话机器人,但是一直不知道怎么解决唤醒这个问题。这两天忽然看到有个开源的的好项目—-snowboy 它能够一直离线的监控后台 起到语音唤醒的...sudo apt-get install python-pyaudio pyth...

    问题出处:
    以前做了一个对话机器人,但是一直不知道怎么解决唤醒这个问题。这两天忽然看到有个开源的的好项目—-snowboy 它能够一直离线的监控后台 起到语音唤醒的作用。于是便查相关资料。

    先是按照官网给的教程做了一遍。

    1丶Install Sox.
    On Linux systems, run:

    sudo apt-get install python-pyaudio python3-pyaudio sox

    2丶pip install pyaudio
    安装pyaudio模块过程出现错误 fatal error: portaudio.h: 没有那个文件或目录
    解决办法:sudo apt-get install python-pyaudio python3-pyaudio安装

    3丶rec temp.wav
    然后在这一步又出现了错误,原因是声卡设置出现了问题。于是就找关于设置声卡的问题。由于raspberry 8.0 图形界面设置默认声卡有BUG 就只能手动去改~/.asoundrc文件。可是我找了老半天也没有找到这个文件,为什么?因为这个文件需要手动自己去创建。而网上没有任何一篇文章提到这一点。坑了我特别久(脸上笑嘻嘻,心里___) 在/home/pi目录下创建一个名为.asoundrc文件 然后把下面的复制进去 我这边是插了一个usb麦克风的。

    pcm.!default {
            type asym
                playback.pcm {
                    type plug
                    slave.pcm "hw:0,0"
                }
                capture.pcm {
                    type plug
                    slave.pcm "hw:1,0"
                }        
    }
    ctl.!default {
            type hw
            card 1
    }

    然后再次rec temp.wav 哈哈哈!!成功了,YES!

    4丶python demo.py snowboy.pmdl
    PyAudio出现[Errno -9985] Device unavailable
    解决方案:
    请确保pulseaudio服务器依旧在工作!
    安装pulseaudio,如下命令:

    sudo apt-get install pulseaudio

    然后运行pulseaudio

    pulseaudio --start

    当然,我们也可以将它加入到/etc/systemd/system/pulseaudio.service中去,确保它能在重新启动后继续工作:

    [Unit]
    Description=PulseAudio Sound System
    Before=sound.target
    
    [Service]
    BusName=org.pulseaudio.Server
    ExecStart=/usr/bin/pulseaudio
    Restart=always
    
    [Install]
    WantedBy=session.target

    之后,果然解决了上面的问题

    不仅这一步出错,因为snowboy用的录音软件是pyaduio 而且采样率是16K。所以也报出了IOError: [Errno Invalid sample rate] -9997的错误 这个问题我在以前做机器人的时候就碰到过,当时我也是用了pyaudio去录音,那时候就碰到了这个问题。一时半会没找到办法就改用了arecord去录音 了。谁知道这次又碰到了这个问题,那这次只能想办法解决了。 现在我又可以用snowboy做唤醒还能用pyaudio去录音了 美滋滋~~~ 不懂可以联系我qq:1281248141 By:AnE

    展开全文
  • 树莓派下安装Pyaudio经历

    千次阅读 2019-01-13 10:57:34
    @[TOC]树莓派下安装Pyaudio sudo apt-get install portaudio.dev 安装了Portaudio.dev 后,用PIP3安装Pyaudio始终报错。如下: 升级pip也没有用,还顺带遇到了pip升级后,pip3启动不了,后按照网上写的将pip3修改...

    @[TOC]树莓派下安装Pyaudio

    sudo apt-get install portaudio.dev
    

    安装了Portaudio.dev 后,用PIP3安装Pyaudio始终报错。如下:
    报编译出错,罗列了一堆错误
    升级pip也没有用,还顺带遇到了pip升级后,pip3启动不了,后按照网上写的将pip3修改了一下:

    from pip import main
    if __name__ == '__main__':
      sys.exit(main())
    

    修改为

    from pip import __main__
    if __name__ == '__main__':
      sys.exit(__main__._main())
    

    后来用apt-get安装pyaudio。

    sudo apt-get install python3-pyaudio
    

    看上去是成功了,用pip看一下安装的包,显示已经安装了pyaudio 0.2.11。

    展开全文
  • 树莓派下安装pyaudio与使用

    千次阅读 2016-08-13 14:54:50
    pyaudio是python的模块,在树莓派下安装pyaudio 首先需安装portaudio.dev sudo apt-get install portaudio.dev 然后再:sudo apt-get install python-pyaudio 如果的python3也可以是: sudo apt-get install python...
  • 树莓派上最常用的录音是arecord命令,但是功能有限,不能实现检测到声音做出反应。但是pyaudio能。本文实现的功能是在树莓派上监听声音,当分贝超过阈值,将会做出反应,例子的反应是结束while循环。原理是录制一...
  • 树莓派上最常用的录音是arecord命令,但是功能有限,不能实现检测到声音做出反应。但是pyaudio能。 本文实现的功能是在树莓派上监听声音,当分贝超过阈值,将会做出反应,例子的反应是结束while循环。 原理是录制...
  • 树莓派加科大讯飞SDK可以实现语音识别功能,树莓派的音频输入输出程序的调用需要用到pyaudio库。这里的网上教程有很多,笔者在树莓派原生系统上也可以顺利安装。 由于ROS与ubuntu系统兼容更好,因此在树莓派上新...
  • 树莓派debian系统安装portaudio19-dev pyaudio过程 因在树莓派上安装portaudio19-dev比较曲折,特做此纪录。原有流程,刷机最新版debian系统后,直接更新国内软件源,然后执行更新软件,在进行安装portaudio19-dev...
  • pyaudio录音与播放 在网上有很多范例,但是在播放wav文件的时候,总是卡在循环中出不来,最后在官方的文档中找到了正确的使用方法。现在就有点疑问,官方写的好好的,为什么总有人愿意自己瞎改?有点想不通。 import...
  • 树莓派语音识别,对话功能。录音功能,需要pyaudiopyaudio费点事。但是可以下载安装。树莓派用 atp-get 下载安装pyaudio
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼我用Python库里的pyaudio录制语音 录制频率8000的语音会报错。IOError: [Errno Invalid sample rate] -9997录制频率48000的语音 正常录制附上代码:# -*- coding: utf-8 ...
  • 树莓派安装snowboy

    2021-02-03 19:05:13
    1、树莓派换源 参考链接:https://blog.csdn.net/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.csdn.net/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio...
  • 树莓派进行录音

    千次阅读 2019-03-28 13:20:10
    录为in.wav文件,录一个时长5s的音频文件 # in def ini(): ... FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = "in.wav" p ...
  • 树莓派在基于pyaudio录音的时候会提示如上错误,这主要是使用的树莓派声卡不支持当前的采用率,没关系,其实在alsa架构下我们可以通过声卡的插件实现转换。在树莓派下家目录创建一个声卡隐藏配置文件 .asoundrc。...
  • 树莓派打造对话机器人 Python

    千次阅读 2017-04-09 10:40:45
    3丶树莓派 软件: 1丶python2.7(模块:pyaudio wave requests urllib urllib2 sys) 总共5步: 第一步:录音 第二步:语音识别 第三步:图灵回复 第四步:语音合成 第五步:播放 第一步 录音: 录音使用的是linux的...
  • 接上篇 通过usb声卡连接树莓派和麦克风、音箱。...依赖:命令行输入pip3 install pyaudio安装pyaudio包 新建文件 sudo nano sound.py 二、语音识别 前提:在百度AL开发平台注册申请语音识别的API 依赖包:AipSpee
  • 树莓派3B Raspbian系统 问题描述:在启动悟空时,执行 Python3 wukong.py,报错,找不到模块pyaudio,手动安装与一键脚本安装皆出现该问题 报错信息如下: Traceback (most ...
  • 一、pyaudio录音 二、语音识别 三、与图灵机器人对话 四、语音合成 五、封装 树莓派功能十分强大,作为一个微型电脑,独特的阵脚设计使得树莓派开发的自定义程度非常高。本篇博客通过使用python语言,封装一个...
  • 安装pyaudio找不到portaudio.h的问题

    千次阅读 2018-01-02 22:38:34
    这个问题出现在我在树莓派上用pip工具安装pyaudio模块时,总是报如下错误: fatal error: portaudio.h: No such file or directory 尝试了多种方法,之后发现还是只有选择用apt包管理工具来安装能解决问题,如下...
  • 【小白教程】基于树莓派的智能语音助手-python

    千次阅读 多人点赞 2019-07-18 16:02:36
    【完整教程零基础】基于树莓派的智能语音助手-python...安装配置pyaudio+snowboy3.百度语音识别 API 及代码实现4.接入图灵机器人测试判断图灵机器人是否调用成功图灵机器人调用的代码: 树莓派3b+、python3系统...
  • pip和pip3是不同的 pip是管理python2的 pip3是管理python3的依赖库的 用pip来查看库的路径 ...pyaudio安装参考这里 在python3中 urllib2库已经不能再用, 将 import urllib2 改为 import urllib.reques...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

树莓派pyaudio