分享

003、利用 pyaudio 和 wave 进行录音

 新用户79878317 2023-01-04 发布于河南

根据B站视频学习: https://www.bilibili.com/video/BV15E411B76N?p=1

1、wav音频文件相关知识

        Waveform Audio File Format(WAVE,又或者是因为WAV后缀而被大众所知的)是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。
  它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大(每分钟的音乐大约需要12兆磁盘空间)。

WAV的特点如下:真实记录自然声波形,基本无数据压缩,数据量大。

wav格式的音频可以直接写入到声卡播放,mp3格式的音频需要先转换成wav格式后再写入到声卡播放。

影响因素

采样频率:每秒钟采集音频数据的次数。采样频率越高,音频保真度越高。计算机广泛配置的16位声卡,使用的采样频率通常包括11025Hz、22050Hz、44100Hz和48000Hz四种,其中,采用11025Hz采样的声音效果相当于电话声音的效果;采用22050HZ采样的声音效果相当于FM调频广播的效果;采用44100HZ采样的声音效果相当于CD声音的效果。

采样位数(振幅采样精度):即采样值或取样值,是用来衡量声音波动变化的一个参数,也是声卡的分辨率。它的数值越大,分辨率也就越高,发出声音的能力越强。目前计算机中配置的16位声卡的采样位数包括8位和16位两种。即 每一次用8位、16位数据来采样。

声道数:有单声道立体声之分,单声道的声音只能使用一个喇叭发声(有的声卡也将单声道信息处理成两个喇叭同时输出),立体声的WAV可以使两个喇叭都发声(一般左右声道有分工),这样更能感受到音频信息的空间效果。显然,双声道数据还原特性更接近人们的听力习惯,但采集得到的数据量会增加1倍。 

上传到百度语音识别服务器的wav文件要求:1个声道、16K或8K的采样频率、

2、第三方库 pyaudio 

        1、安装 pyaudio 库

        截至当前写文档日期2021年06月24日,pyaudio官网  ( http://people.csail./hubert/pyaudio/ )上说的是,pyaudio还只支持python3.6。我电脑安装的是python3.8,于是在安装报以下错误:

步骤1、下载离线的  PyAudio-0.2.11-cp38-cp38-win_amd64.whl

可以自己下载源码编译 ,也可以到 https://www.lfd./~gohlke/pythonlibs/ 下载 ,进入网站后 ctrl + F 查找 pyaudio,点击pyaudio,然后跳转到下载位置,找到合适自己系统、python版本下载,我电脑是python3.8  + 64位系统。

步骤2、安装 PyAudio-0.2.11-cp38-cp38-win_amd64.whl

                把下载的 PyAudio-0.2.11-cp38-cp38-win_amd64.whl 文件复制到 项目的 \venv\Lib\site-packages 目录下

                        并在 \venv\Lib\site-packages 目录 打开terminal

执行安装命令:  pip3 install PyAudio-0.2.11-cp38-cp38-win_amd64.whl   

此时可以查看到已经安装成功了。

3、运行demo程序

        以下是官网的 demo 程序

  1. '''PyAudio example: Record a few seconds of audio and save to a WAVE file.'''
  2. '''
  3. 这个是pyaudio官网的demo程序
  4. '''
  5. import pyaudio
  6. import wave
  7. CHUNK = 1024 # 定义数据流块
  8. FORMAT = pyaudio.paInt16 # 采样位数
  9. CHANNELS = 2 # 声道数1 或 2
  10. RATE = 44100 # 采样频率
  11. RECORD_SECONDS = 10 # 录制时间
  12. WAVE_OUTPUT_FILENAME = 'output.wav' # 输出录音文件,当前目录下生成录音文件。
  13. p = pyaudio.PyAudio()
  14. stream = p.open(format=FORMAT,
  15. channels=CHANNELS,
  16. rate=RATE,
  17. input=True,
  18. frames_per_buffer=CHUNK)
  19. print('* recording')
  20. frames = []
  21. for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
  22. data = stream.read(CHUNK)
  23. frames.append(data)
  24. print('* done recording')
  25. stream.stop_stream()
  26. stream.close()
  27. p.terminate()
  28. wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
  29. wf.setnchannels(CHANNELS)
  30. wf.setsampwidth(p.get_sample_size(FORMAT))
  31. wf.setframerate(RATE)
  32. wf.writeframes(b''.join(frames))
  33. wf.close()

运行情况:在 test 目录下生成录音文件  output.wav ,播放有语音。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多