根据B站视频学习: https://www.bilibili.com/video/BV15E411B76N?p=1
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的采样频率、
1、安装 pyaudio 库
截至当前写文档日期2021年06月24日,pyaudio官网 ( http://people.csail.mit.edu/hubert/pyaudio/ )上说的是,pyaudio还只支持python3.6。我电脑安装的是python3.8,于是在安装报以下错误:
步骤1、下载离线的 PyAudio-0.2.11-cp38-cp38-win_amd64.whl
可以自己下载源码编译 ,也可以到 https://www.lfd.uci.edu/~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
此时可以查看到已经安装成功了。
以下是官网的 demo 程序
'''PyAudio example: Record a few seconds of audio and save to a WAVE file.''' ''' 这个是pyaudio官网的demo程序 ''' import pyaudio import wave CHUNK = 1024 # 定义数据流块 FORMAT = pyaudio.paInt16 # 采样位数 CHANNELS = 2 # 声道数1 或 2 RATE = 44100 # 采样频率 RECORD_SECONDS = 10 # 录制时间 WAVE_OUTPUT_FILENAME = 'output.wav' # 输出录音文件,当前目录下生成录音文件。 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print('* recording') frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print('* done recording') stream.stop_stream() stream.close() p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close()
运行情况:在 test 目录下生成录音文件 output.wav ,播放有语音。
联系客服