每天資訊Python打造一款蘿莉音智慧對話語音機器人,人人都可以是蘿莉音!

菜單

Python打造一款蘿莉音智慧對話語音機器人,人人都可以是蘿莉音!

前言一定要看,很重要!!!

為了讓大家真正學會,我用分模組步驟的方式講解,這樣也能讓大家不僅在娛樂的同時,還能學到知識。東西有點多,你大可不必著急複製貼上,你只需要看看我的講解即可,當然如果你能按照我的步驟親自執行每一部分程式碼,那樣你會更加學到知識,最下面可以直接下載完整的原始碼檔案!!!別說你搞不出來了!!

第一步實現普通智慧對話

程式碼如下:

# 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