一.百度API–语音识别
首先打开百度的AI开放平台,然后点短语音识别
进入后的页面是这样的,点击立即使用
然后就直接点创建应用就可以了
进入后是这个页面,按自己的要求填写就好了,然后就立即创建
创建成功之后在应用列表里就可以看到这些东西,其中的AppID、API Key、Secret Key这三个数据是在调用API的时候要用到的。
之后在技术文档里就能看到相关的相关的调用方式及一些参数等的说明。
下面就是直接复制文档中的代码,直接用就可以了。
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
print(client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
'dev_pid': 1537,
}))
这里需要注意,支持的语音识别格式要求,不符合要求的话,会返回错误信息或识别不准确。
刚开始直接用Win10自带的录音机录的发现不太行,就改用Pyaudio录制,下面是声音录制的代码。
import wave
from pyaudio import PyAudio, paInt16
CHUNK = 1024 # wav文件是由若干个CHUNK组成的,CHUNK我们就理解成数据包或者数据片段。
FORMAT = paInt16 # 表示我们使用量化位数 16位来进行录音
CHANNELS = 1 #代表的是声道,1是单声道,2是双声道。
RATE = 16000 # 采样率 一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHz,
RECORD_SECONDS = 10 # 录制时间这里设定了10秒
def save_wave_file(pa, filename, data):
wf = wave.open(filename, 'wb')
wf.setnchannels(CHANNELS)
# wf.setsampwidth(sampwidth)
wf.setsampwidth(pa.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b"".join(data))
wf.close()
def get_audio(filepath):
isstart = str(input("是否开始录音? (是/否)"))
if isstart == str("是"):
pa = PyAudio()
stream = pa.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("*" * 10, "开始录音:请在10秒内输入语音")
frames = [] # 定义一个列表
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # 循环,采样率 44100 / 1024 * 5
data = stream.read(CHUNK) # 读取chunk个字节 保存到data中
frames.append(data) # 向列表frames中添加数据data
print(frames)
print("*" * 10, "录音结束\n")
stream.stop_stream()
stream.close() # 关闭
pa.terminate() # 终结
save_wave_file(pa, filepath, frames)
elif isstart == str("否"):
exit()
else:
print("无效输入,请重新选择")
get_audio(filepath)
def play():
"""播放录制的音频"""
wf = wave.open(r"01.wav", 'rb')
p = PyAudio()
steam = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=
wf.getnchannels(), rate=wf.getframerate(), output=True)
# 读数据
data = wf.readframes(CHUNK)
# 播放流
while len(data) > 0:
stream.write(data)
data = wf.readframes(CHUNK)
stream.stop_stream() # 暂停播放/录制
stream.close() # 终止播放
p.terminate() # 终止portaudio会话
if __name__ == '__main__':
filepath = '01.wav'
get_audio(filepath)
print('Over!')
#play()
测试了几个之后感觉,嘿,真不错诶。。。
二.语音合成
调用方式和语音识别的差不多,以下为文档中的示例代码:
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis('你好百度', 'zh', 1, {
'vol': 5,
})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open('audio.mp3', 'wb') as f:
f.write(result)
可以自己修改不同的参数来合成不同的效果
根据下载的Python的SDK里可以看到在调用函数时的使用方式: