Python模組 製作屬於自己的有聲小說

2022-07-04 16:48:14 字數 4671 閱讀 6037

python版本: anaconda3 python3.7.4

作業系統: ubuntu19.10

編譯器: pycharm社群版

用到的模組: pyttsx3,requests

pyttsx3官網位址

pyttsx3(text to speech)是乙個語音轉換模組,它可以在離線的環境下工作,支援多個引擎,而且相容於python2和python3.

pip install pyttsx3
(windows系統)若你沒有安裝pywin32模組,則還需安裝此模組作為pyttsx3模組的依賴

安裝pywin32

pip install pywin32
如果不知道自己的python版本是多少,可以再終端輸入,輸出的第一行就是目前使用的python版本號

根據官網給出的簡單示範,我們可以測試一下是否可以使用本模組

測試**:

import pyttsx3

engine = pyttsx3.init()

engine.say("i will speak this text")

engine.runandwait()

若可以聽到乙個男聲快速的說了一遍我們引用的句子,則證明本模組安裝已經成功

也是參照官方文件,將這些引數調整成乙個比較舒服的狀態

import pyttsx3

engine = pyttsx3.init() # 建立物件

""" 語速 """

rate = engine.getproperty('rate') # 獲取當前語速(預設值)

print (rate) # 列印當前語速(預設值)

engine.setproperty('rate', 175) # 設定乙個新的語速

"""音量"""

volume = engine.getproperty('volume') # 獲取當前的音量 (預設值)(min=0 and max=1)

print (volume) # 列印當前音量(預設值)

engine.setproperty('volume',1.0) # 設定乙個新的音量(0 < volume < 1)

"""音色"""

voices = engine.getproperty('voices') # 獲取當前的音色資訊

engine.setproperty('voice', voices[0].id) # 改變中括號中的值,0為男性,1為女性

engine.say("hello world!")

engine.runandwait()

engine.stop()

在windows系統中,這一段**已經可以通過pyttsx3模組說出中文了,但是在linux作業系統中,還需要修改乙個引數

engine.setproperty('voice','zh')             //將音色中修改音色的語句替換
通過剛才對pyttsx模組的講解,我們已經可以了解到該模組的基本原理以及各個引數所代表的含義,接下來我們就以pyttsx3模組為基礎構建乙個簡單的有聲**.

首先找到乙個****(我選擇的是新筆趣閣**網 因為這個**沒有設定反爬機制 比較適合我們練手)

然後隨便找到乙個**,進入它的目錄頁,借助谷歌瀏覽器的外掛程式xpath helper利用xpath語法提取到每一章**

點進**的內容頁,同樣利用外掛程式提取到內容

然後就可以開始構建爬取**的**了

為了節省時間,我先簡單的爬取乙個章節

import requests

from lxml import etree

def main():

#**的詳情頁

url = ''

#請求內容

response = requests.get(url).text

#轉化成xpath語法可以提取的形式

html = etree.html(response)

#提取**內容頁的**

data = html.xpath("//div[@class='box_con'][2]/div[@id='list']/dl/dd/a/@href")

#為了節省時間,先只提取乙個章節的內容

sound = data[1]

#構造**內容頁的**

new_url = '' + str(sound)

#請求response_1 = requests.get(new_url).content

html_1 = etree.html(response_1)

data_1 = html_1.xpath("//div[@id='content']/text()")

#用replace方法將提取到文字中的\xa0替換掉

noval = str(data_1).replace('\\xa0', '')

#替換掉\r

noval_1 = noval.replace("\\r',", '')

#將爬取到的**內容儲存到文字檔案中

with open('xiaoshuo.txt','w') as f:

f.write(noval_1)

if __name__ == '__main__':

main()

執行完成之後,就可以發現當前資料夾下多出了乙個名為xiaoshuo.txt的檔案,這就是我們爬取到的**內容

def say(filename='xiaoshuo.txt'):

with open(filename, 'r') as f:

line = f.read()

engine = pyttsx3.init()

engine.setproperty('volume',1.0)

engine.setproperty('rate', 175)

engine.setproperty('voice', 'zh')

engine.say(line)

engine.runandwait()

最後再設定乙個可以選擇章節的介面傳入主函式,執行程式即可聽到有聲**的內容

import requests

from lxml import etree

import pyttsx3

def main(a):

#**的詳情頁

url = ''

#請求內容

response = requests.get(url).text

#轉化成xpath語法可以提取的形式

html = etree.html(response)

#提取**內容頁的**

data = html.xpath("//div[@class='box_con'][2]/div[@id='list']/dl/dd/a/@href")

#為了節省時間,先只提取乙個章節的內容

sound = data[int(a)]

#構造**內容頁的**

new_url = '' + str(sound)

#請求response_1 = requests.get(new_url).content

html_1 = etree.html(response_1)

data_1 = html_1.xpath("//div[@id='content']/text()")

#用replace方法將提取到文字中的\xa0替換掉

noval = str(data_1).replace('\\xa0', '')

#替換掉\r

noval_0 = noval.replace("\\r',", '')

noval_1 = noval_0.replace('[', '')

#將爬取到的**內容儲存到文字檔案中

with open('xiaoshuo.txt','w') as f:

f.write(noval_1)

def say(filename='xiaoshuo.txt'):

with open(filename, 'r') as f:

line = f.read()

engine = pyttsx3.init()

engine.setproperty('volume',1.0)

engine.setproperty('rate', 175)

engine.setproperty('voice', 'zh')

engine.say(line)

engine.runandwait()

if __name__ == '__main__':

a = input('輸入想要朗讀的章節(數字):')

main(a)

say()

TTF檔案的製作 打造屬於自己的字型

平時我們常見的字型格式主要有以下幾種 1.光柵字型 fon 這種字型是針對特定的顯示解析度以不同大小儲存的點陣圖,用於windows系統中螢幕上的選單 按鈕等處文字的顯示。它並不是以向量描述的,放大以後會出現鋸齒,只適合螢幕描述。不過 它的顯示速度非常快,所以作為系統字型而在windows中使用。2...

兒童手工製作日曆 童心巧手 製作屬於自己的手工日曆

日曆在我們的家庭中都能看到,如掛曆 檯曆就是由日曆發展而來的,它給我們的生活和工作帶來很多方便。今天大三班的小朋友,在老師的帶領下,學習並製作了年曆,開展本次活動主要是讓幼兒了解日曆的概念,知道乙個星期有7天,指導幼兒看日曆,能夠從日曆上知道了時間的寶貴,有初步珍惜時間的意識和習慣 幼兒在製作的過程...

製作Python模組的方法

利用setup.py將框架安裝到python環境中,作為第三方模組來呼叫,from os.path import dirname,join from pip.req import parse requirements from setuptools import find packages,setu...