1??音頻信號采集與播放?pyaudio
import sys
import pyaudio
import wave
import timeCHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1#僅支持單聲道
RATE = 16000
RECORD_SECONDS = 3#更改錄音時長#錄音函數,生成wav文件
def record(file_name):try:os.close(file_name)os.remove(file_name)#先刪除一下文件,以防重名except:pass #如果文件不存在直接跳過p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)frames = [] print('錄音開始')for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)#print('i的數據:%s'%data)frames.append(data)print("錄音結束")stream.stop_stream()stream.close()p.terminate()wf = wave.open(file_name, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()#播放函數,播放wav文件
def play(file_name):# 定義數據流塊CHUNK = 1024# 只讀方式打開wav文件wf = wave.open(file_name, 'rb')#(sys.argv[1], 'rb')p = pyaudio.PyAudio()# 打開數據流stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True)# 讀取數據data = wf.readframes(CHUNK)# 播放print('試聽開始')while data != b'':stream.write(data)data = wf.readframes(CHUNK)print('試聽結束')# 停止數據流 stream.stop_stream()stream.close()# 關閉 PyAudio p.terminate()if __name__=='__main__':record('1.wav')play('1.wav')
- record是錄音,play是播放
pyaudio是我們要安裝的庫,這個有時不這么好裝,如果pip install pyaudio不行的話,可能要下whl包或者其他方式進行安裝
如果報錯 OSError: [Errno -9999] Unanticipated host error 這個要檢查一下麥克風,如果麥克風連接正常,你要查一下麥克風的權限
一般只有windows上會出這樣的問題,在設置中搜索麥克風
回車后點擊這個
這里變為開就好了
運行的顯示是這樣的
在錄音結束后會成成 1.wav 的音頻文件
這個1.wav在windows中雙擊打開也是可以聽的
2??語音合成?pyttsx3
使用的庫是pyttsx3,項目地址?GitHub - nateshmbhat/pyttsx3: Offline Text To Speech synthesis for python
我在樹莓派上使用pip安裝后使用會出現這個錯誤 OSError: libespeak.so.1: cannot open shared object file: No such file or directory
安裝這個包就可以了 sudo apt-get install espeak
下面我簡單摘錄兩個功能
2.1??播放?
import pyttsx3
pyttsx3.speak("你好")
運行后可以聽到你好
2.2??保存音頻文件
import pyttsx3
engine = pyttsx3.init() # object creation"""Saving Voice to a file"""
# On linux make sure that 'espeak' and 'ffmpeg' are installed
engine.save_to_file('你好', 'test.mp3')
engine.runAndWait()
運行后會得到一個mp3文件,雙擊播放會聽到 你好
2.3??在arm上的適配
在windows上我們直接裝就行了,但是在arm上我運行上面代碼得到了下面的錯誤
他提示沒有eSpeak-ng這種東西
之后就能運行了
3? 語音識別 speechrecognition與pocketsphinx
- 參考?speechrecognition_魔天一念的博客-CSDN博客
- 目前我只試過識別英文,鏈接中提到的中文包我沒裝
兩個庫都用pip install 下載就行,pocketsphinx是speechrecognition
import speech_recognition as sr# obtain audio from the microphone
r = sr.Recognizer()
harvard = sr.AudioFile("test.wav")
with harvard as source:audio = r.record(source)
# recognize speech using Sphinx
try:result = r.recognize_sphinx(audio)print(result)
except sr.UnknownValueError:print("Sphinx could not understand audio")
except sr.RequestError as e:print("Sphinx error; {0}".format(e))