こんにちは!みやしんです。
今回は以前作った音声読み上げアプリを少し改造して再生速度を調整する機能を追加しましたのでメモとして残しておきます。
やったこと
- 音声を速度調整するために「librosa」ライブラリをインストール
- librosaで速度調整したデータをmp3で保存するために「soundfile」ライブラリをインストール
- GUIに音声速度を調整する部分を追加
- pyinstallerでEXE化して発生したエラー対策
サンプルコード
import PySimpleGUI as sg
from gtts import gTTS
import librosa
import soundfile as sf
def gui():
# ウィンドウのテーマ
sg.theme('DarkBrown2')
# ウィンドウの内容を1列ずつ定義
layout = [ [sg.Text('文章を音声に変換するアプリです')], # テキスト設置
[sg.Multiline('文章を入力してください', size=(80, 20), key='sentence')], # 文章入力欄を設置
[sg.Text('出力ファイル名(.mp3)')],
[sg.InputText(default_text='speech_file', size=(80, 1), key='file_name')], # 出力ファイル名を入力する
[sg.Text('言語設定')],
[sg.Spin(['日本語', '英語'], size=(10,1), initial_value='日本語', key='language')], # jaが日本語、enが英語
[sg.Text('再生速度倍率')],
[sg.Input(1.0, size=(6, 1), key='speed')], # 出力ファイル名を入力する
[sg.Button('音声に変換する', key='bt')] ] # ボタンを設置
# ウィンドウを作成する
window = sg.Window('音声合成アプリ', layout) # ウィンドウ定義
while True:
# ウィンドウを表示
event, values = window.read()
if event == 'bt': # ボタンを押したとき
message = text_to_speech(values['sentence'], values['file_name'], values['language'], values['speed']) # Text to Speechを実施
sg.Popup(message, title='音声変換結果') # 処理結果をポップアップでお知らせ
elif event == sg.WIN_CLOSED: # window右上の×印を押して閉じたとき
break
# 画面から削除して終了
window.close() # ウィンドウを閉じる
def text_to_speech(sentences, file_name, language, speed):
'''
Text to Speechを実施する関数
<入力>
sentences:テキスト文章 (str)
file_name:出力ファイル名 (str)
language:日本語 or 英語 (str)
speed:再生速度 (float)
<出力>
message:処理結果 (str)
'''
try:
# Text To Speech
if language == '日本語':
tts =gTTS(text=str(sentences), lang='ja')
tts.save(str(file_name)+'.mp3')
else:
tts =gTTS(text=str(sentences), lang='en')
tts.save(str(file_name)+'.mp3')
# 再生速度の調整
sr = 48000 # フレームレート 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, and 48000
y, _ = librosa.load(str(file_name)+'.mp3', sr=sr)
y_change_speed = librosa.effects.time_stretch(y, rate=float(speed))
sf.write(str(file_name)+'.mp3', data=y_change_speed, samplerate=sr)
message = '音声変換が終了しました'
except PermissionError:
message = 'ファイル出力が出来ませんでした。出力ファイル名を変更、もしくは音声の再生ウインドウが開いている場合は閉じてください。'
return message
if __name__ == '__main__':
gui()
librosa と soundfile をインストール
pip install librosa
pip install soundfile
EXE化実行
下記のコマンドでEXE化
pyinstaller --onefile --collect-data librosa --noconsole --icon=[アイコンファイル名.ico] [Pythonファイル名.py]
エラー対応
Python3.10だとエラー発生
どうやらpython3.10だとPyinstallerでエラーが出るようです。(何のエラーか忘れました)
python3.9.13で環境構築しなおしました。
setuptoolsモジュールがないよ!と怒られる
setuptoolsをインストール&アップグレードしました。
pip install setuptools
pip install --upgrade setuptools
FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\owner\AppData\Local\Temp\_MEI255162\librosa\util\example_data\registry.txt’
registry.txtがないよ!と怒られました。
FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\owner\AppData\Local\Temp\_MEI255162\librosa\util\example_data\registry.txt’
これはpyinstallerでEXE化する際にコマンドに「–collect-data librosa」を加えると解決できました。
–collect-data MODULENAME で、指定したパッケージまたはモジュールからすべてのデータを収集してEXE化してくれるそうです。
最終的には、前述しましたが下記のコマンドでEXE化しました。
pyinstaller --onefile --collect-data librosa --noconsole --icon=[アイコンファイル名.ico] [Pythonファイル名.py]
こちらのページが参考になりました。
Using PyInstaller — PyInstaller 6.11.0 documentation
こんな感じのGUIになって、mp3の速度調整機能が追加されました。
以上です!
コメント