前言一定要看,很重要!!!
為了讓大家真正學會,我用分模組步驟的方式講解,這樣也能讓大家不僅在娛樂的同時,還能學到知識。東西有點多,你大可不必著急複製貼上,你只需要看看我的講解即可,當然如果你能按照我的步驟親自執行每一部分程式碼,那樣你會更加學到知識,最下面可以直接下載完整的原始碼檔案!!!別說你搞不出來了!!
第一步實現普通智慧對話
程式碼如下:
# coding=gbk
“”“
作者:川川
時間:2021/8/21
”“”
import requests
print(‘請輸入你想說的:’)
while True:
a=input()
url=‘https://api。ownthink。com/bot?appid=9ffcb5785ad9617bf4e64178ac64f7b1&spoken=%s’%a
te=requests。get(url)。json()
data=te[‘data’][‘info’][‘text’]
print(data)
對話效果(還是比較人工智慧)
第二步文字轉蘿莉音
1-到百度ai開放平臺,連結為:https://ai。baidu。com/ ,點選控制檯,掃碼登入進去
2-申請百度語音技術api,步驟如下:
然後配置如下:
點選建立即可。
然後到管理用用去檢視:(我圈出來的後面要用)
開始擼程式碼:
# coding=gbk
“”“
作者:川川
時間:2021/8/21
”“”
# pip install baidu-aip
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, # 音量
‘spd’: 3, # 語速
‘pit’: 9, # 語調
‘per’: 4, # 0:女 1:男 3:逍遙 4:小蘿莉
})
# 識別正確返回語音二進位制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
with open(‘auido。mp3’, ‘wb’) as f:
f。write(result)
執行後,不出意外,你會看到生成了一個mp3音訊,你也可以手動點開播放以下看看。
第三步播放音訊
執行就會播放該音訊,這個演示可以看完整影片,但是該播放方式只能播放一次,還不能迴圈播放,當然這是基礎部分。
# coding=gbk
“”“
作者:川川
時間:2021/8/21
”“”
from playsound import playsound
playsound(‘auido。mp3’)
為了解決這個迴圈問題,我在網上找到了另外的辦法來補救,我再建立一個play。py檔案內容如下:
from platform import system
from abc import ABC, abstractmethod
operating_system = system()
if operating_system == ‘Windows’:
from ctypes import c_buffer, windll
from random import random
from time import sleep
from sys import getfilesystemencoding
elif operating_system == ‘Darwin’:
from AppKit import NSSound
from Foundation import NSURL
from time import sleep
elif operating_system == ‘Linux’:
# pathname2url escapes non-URL-safe characters
import os
try:
from urllib。request import pathname2url
except ImportError:
# python 2
from urllib import pathname2url
import gi
gi。require_version(‘Gst’, ‘1。0’)
from gi。repository import Gst
class PlaysoundException(Exception):
pass
class playsoundBase(ABC):
def __init__(self):
pass
@abstractmethod
def play(self, sound, block):
raise NotImplemented
@abstractmethod
def stop(self):
raise NotImplemented
class playsoundWin(playsoundBase):
alias = ‘’
def winCommand(self, *command):
buf = c_buffer(255)
command = ‘ ’。join(command)。encode(getfilesystemencoding())
errorCode = int(windll。winmm。mciSendStringA(command, buf, 254, 0))
if errorCode:
errorBuffer = c_buffer(255)
windll。winmm。mciGetErrorStringA(errorCode, errorBuffer, 254)
exceptionMessage = (
‘\n Error ’ + str(errorCode) + ‘ for command:\n’
+ command。decode() + ‘\n ’ + errorBuffer。value。decode())
raise PlaysoundException(exceptionMessage)
return buf。value
def play(self, sound, block=True):
self。alias = ‘playsound_’ + str(random())
self。winCommand(‘open “’ + sound + ‘” alias’, self。alias)
self。winCommand(‘set’, self。alias, ‘time format milliseconds’)
durationInMS = self。winCommand(‘status’, self。alias, ‘length’)
self。winCommand(‘play’, self。alias, ‘from 0 to’, durationInMS。decode())
if block:
sleep(float(durationInMS) / 1000。0)
def stop(self):
self。winCommand(‘stop’, self。alias)
def close(self):
self。winCommand(‘close’, self。alias)
class playsoundOSX(playsoundBase):
def play(self, sound, block=True):
if ‘://’ not in sound:
if not sound。startswith(‘/’):
from os import getcwd
sound = getcwd() + ‘/’ + sound
sound = ‘file://’ + sound
url = NSURL。URLWithString_(sound)
nssound = NSSound。alloc()。initWithContentsOfURL_byReference_(url, True)
if not nssound:
raise IOError(‘Unable to load sound named: ’ + sound)
nssound。play()
if block:
sleep(nssound。duration())
def stop(self):
raise NotImplemented
class playsoundNix(playsoundBase):
def play(self, sound, block=True):
if not block:
raise NotImplementedError(
“block=False cannot be used on this platform yet”)
Gst。init(None)
playbin = Gst。ElementFactory。make(‘playbin’, ‘playbin’)
if sound。startswith((‘http://’, ‘https://’)):
playbin。props。uri = sound
else:
playbin。props。uri = ‘file://’ + pathname2url(
os。path。abspath(sound))
set_result = playbin。set_state(Gst。State。PLAYING)
if set_result != Gst。StateChangeReturn。ASYNC:
raise PlaysoundException(
“playbin。set_state returned ” + repr(set_result))
# FIXME: use some other bus method than poll() with block=False
# https://lazka。github。io/pgi-docs/#Gst-1。0/classes/Bus。html
bus = playbin。get_bus()
bus。poll(Gst。MessageType。EOS, Gst。CLOCK_TIME_NONE)
playbin。set_state(Gst。State。NULL)
def stop(self):
raise NotImplemented
operating_system = ‘Windows’
if operating_system == ‘Windows’:
playsound = playsoundWin
elif operating_system == ‘Darwin’:
playsound = playsoundOSX
elif operating_system == ‘Linux’:
playsound = playsoundNix
del operating_system
第四步綜合上述程式碼
# coding=gbk
“”“
作者:川川
時間:2021/8/22
”“”
from play import playsound
from aip import AipSpeech
import requests
“”“ 你的 APPID AK SK ”“”
APP_ID = ‘上面講過的id’
API_KEY = ‘上面講過API_KEY’
SECRET_KEY = ‘上面講過SECRET_KEY’
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
print(‘請輸入你想說的:’)
while True:
a=input()
url=‘https://api。ownthink。com/bot?appid=9ffcb5785ad9617bf4e64178ac64f7b1&spoken=%s’%a
te=requests。get(url)。json()
data=te[‘data’][‘info’][‘text’]
print(data)
result = client。synthesis(data, ‘zh’, 1, {
‘vol’: 8, # 音量
‘spd’: 5, # 語速
‘pit’: 9, # 語調
‘per’: 4, # 0:女 1:男 3:逍遙 4:小蘿莉
})
# 識別正確返回語音二進位制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
with open(‘auido。mp3’, ‘wb+’) as f:
f。write(result)
p = playsound()
voice_path = r“auido。mp3”
p。play(voice_path) # 播放
p。close() # 停止
完整程式碼下載地址
上述步驟僅僅是講解,如果小白不太懂,可以只需在百度ai平臺申請後,將你的id和key在我的程式碼中換上就可以成功執行。
https://github。com/89461561511656/bot
乾貨主要有:
2000多本Python電子書(主流和經典的書籍應該都有了)
Python標準庫資料(最全中文版)
專案原始碼(四五十個有趣且經典的練手專案及原始碼)
Python基礎入門、爬蟲、web開發、大資料分析方面的影片(適合小白學習)
Pingl