|
楼主 |
发表于 2019-3-20 10:42:38
|
显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-20 10:45 编辑
from pyaudio import PyAudio,paInt16
from yeelight import Bulb
import wave
import json
import base64
import os
import requests
import time
#参数设置
bulb = Bulb("192.168.31.39")
RATE = "16000"
FORMAT = "wav"
CUID="wate_play"
DEV_PID="1536"
framerate=16000
NUM_SAMPLES=2000
channels=1
sampwidth=2
TIME=2
#注册获取百度API的账号密码https://ai.baidu.com/docs#/TTS-API/top
def get_token():
server = "https://openapi.baidu.com/oauth/2.0/token?"
grant_type = "client_credentials"
#API Key
client_id = "c06hUdY8BnwNqSreGnkRwmNN"
#Secret Key
client_secret = "5f0jpnsaE9c1z0H3yKAURcl1Xy0FHS5V"
#拼url
url ="%sgrant_type=%s&client_id=%s&client_secret=%s"%(server,grant_type,client_id,client_secret)
#获取token
res = requests.post(url)
token = json.loads(res.text)["access_token"]
return token
#读取本地音频信息,上传至百度服务器,得到返回的文字
def get_word(token):
with open(r'vo.wav', "rb") as f:
speech = base64.b64encode(f.read()).decode('utf8')
size = os.path.getsize(r'vo.wav')
headers = { 'Content-Type' : 'application/json'}
url = "https://vop.baidu.com/server_api"
data={
"format":FORMAT,
"rate":RATE,
"dev_pid":DEV_PID,
"speech":speech,
"cuid":CUID,
"len":size,
"channel":1,
"token":token,
}
req = requests.post(url,json.dumps(data),headers)
result = json.loads(req.text)
ret=result["result"][0]
print(result)
return ret
#文件格式
def save_wave_file(filename,data):
'''save the date to the wavfile'''
wf=wave.open(filename,'wb')
wf.setnchannels(channels)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
wf.writeframes(b"".join(data))
wf.close()
#录音并存储
def my_record():
pa=PyAudio()
stream=pa.open(format = paInt16,channels=1,
rate=framerate,input=True,
frames_per_buffer=NUM_SAMPLES)
my_buf=[]
count=0
print('.')
# 控制录音时间
while count<TIME*10:
string_audio_data = stream.read(NUM_SAMPLES)
my_buf.append(string_audio_data)
count+=1
save_wave_file('vo.wav',my_buf)
stream.close()
#声音的播放
chunk=2014
def play():
wf=wave.open(r"vo.wav",'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.close()
p.terminate()
mesglist=['开','关','加亮','高亮','少亮','低亮']
#判断语句
def judge(ret):
if mesglist[0] in ret:
bulb.turn_on()
if mesglist[1] in ret:
bulb.turn_off()
if mesglist[2] in ret:
bulb.set_brightness(80)
if mesglist[3] in ret:
bulb.set_brightness(80)
if mesglist[4] in ret:
bulb.set_brightness(20)
if mesglist[5] in ret:
bulb.set_brightness(20)
if __name__ == '__main__':
while True:
time.sleep(0.5)
my_record()
token=get_token()
try:
ret = get_word(token)
print(ret)
judge(ret)
except:
print('失败')
|
|