windows10 で python による音声合成

(2024-07-6)

これまでは python による音声合成は linux mint でやってきました。

普通であればそのままコードを使えるはずですが、どういうわけか windows ではエラーが発生します。

python を動かすのは vs code でもいいのですが、vs code は astroblog を作成するのに使用することが多く、やはり昔ながらの eclipse もあった方が便利です。

pleiades のダウンロード・インストール

https://willbrains.jp/index.html#/pleiades_distros2024.html のページの、Python をダウンロードしてインストールします。

インタープリターの設定はやや面倒ですが、ダウンロードした python が 3.12 ならばその python.exe を探して新たに設定して、そのほかのインタープリターは削除します。

ffmpeg のダウンロード・インストール

音声の再生速度を変更するときに ffmpeg が必要なので、 https://ffmpeg.org/download.html からダウンロードします。

以下のような画面から矢印の zip ファイルを選択します。

ダウンロードした zip ファイルを解凍してファイル名を ffmpeg に変更して、適当な位置に配置します。 私は、c:/myApp を作ってそこにコピーしました。

環境変数の Path に「c:\myApp\ffmpeg\bin」を追加してコンピュータを再起動します。

確認するには、コマンドプロンプトから確認します。
パスが通っていれば以下のようになります。

ffmpeg
ffmpeg version N-116151-gcd9ceaef22-20240705 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 14.1.0 (crosstool-NG 1.26.0.93_a87bf7f)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-libxml2 --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs=-lgomp --extra-ldflags=-pthread --extra-ldexeflags= --cc=x86_64-w64-mingw32-gcc --cxx=x86_64-w64-mingw32-g++ --ar=x86_64-w64-mingw32-gcc-ar --ranlib=x86_64-w64-mingw32-gcc-ranlib --nm=x86_64-w64-mingw32-gcc-nm --extra-version=20240705
libavutil 59. 28.100 / 59. 28.100
libavcodec 61. 9.100 / 61. 9.100
libavformat 61. 4.100 / 61. 4.100
libavdevice 61. 2.100 / 61. 2.100
libavfilter 10. 2.102 / 10. 2.102
libswscale 8. 2.100 / 8. 2.100
libswresample 5. 2.100 / 5. 2.100
libpostproc 58. 2.100 / 58. 2.100
Universal media converter
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'

従来のコード

from gtts import gTTS
from playsound import playsound
text01 = 'ロシアによるウクライナ侵略で、アメリカNBCニュースはよっか、複数のアメリカ当局者らの話として、ウクライナを支援する欧米諸国がウクライナ側と停戦について「ひそかに」協議を始めたと伝えた。ウクライナ軍の反攻が進まず戦局が膠着していることや、ウクライナ軍の疲弊、イスラエルとイスラム原理主義組織・ハマスとの交戦などを背景に、欧米側のウクライナ支援の余力が低下していることが背景だとしている。'
tts = gTTS(text01, lang='ja', slow=False)
tts.save('def.mp3')
playsound('def.mp3')

playsound(‘def.mp3’) のところでエラーが発生します。

そこで以下のように変更しました。

新しいコード

デフォルトでは音声がゆっくり過ぎるので、ffmpeg を使って 30 % スピードアップしています。

from gtts import gTTS
import subprocess
import os
text01 = 'ロシアによるウクライナ侵略で、アメリカNBCニュースはよっか、複数のアメリカ当局者らの話として、ウクライナを支援する欧米諸国がウクライナ側と停戦について「ひそかに」協議を始めたと伝えた。ウクライナ軍の反攻が進まず戦局が膠着していることや、ウクライナ軍の疲弊、イスラエルとイスラム原理主義組織・ハマスとの交戦などを背景に、欧米側のウクライナ支援の余力が低下していることが背景だとしている。'
tts = gTTS(text01, lang='ja', slow=False)
tts.save('def.mp3')
command = 'ffmpeg -i ./def.mp3 -af atempo=1.3 ./output.mp3'
subprocess.call(command, shell=True)
os.system('start outputy.mp3')

音声

出来上がった音声は、