Pythonでplaysoundを用いてmp3ファイルを再生する

Pythonでplaysoundを用いてmp3ファイルを再生してみます。

今回はplaysoundを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■mp3ファイルを用意する

playsoundを用いてmp3ファイルを再生させてみますが、この前にmp3ファイルを用意します。今回は著作権フリーのこちらのmp3ファイル(https://dova-s.jp/bgm/play15945.html)を利用させて頂きました。

ダウンロード後、ダウンロードしたファイル「One_Day_at_a_Time.mp3」をわかりやすいように「C:\Users\user_\test(フォルダパス)」に移動させます。これで再生する準備は完了です。

■playsoundを用いてmp3ファイルを再生する

では、早速playsoundを用いてmp3ファイルを再生するスクリプトを書いていきます。

■コード

from playsound import playsound

playsound(r'C:\Users\user_\test\One_Day_at_a_Time.mp3')

「from import」でplaysoundモジュールを呼び出します。その後、playsound()を用いて、括弧内に引数,パラメータとして、今回用意したmp3ファイルが置かれている場所とファイル名を渡します。これでmp3ファイルを再生することができます。

■実行・検証

このスクリプトを「music_play.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

    Error 305 for command:
        open "C:\Users\user_\test\One_Day_at_a_Time.mp3"
    文字列を囲む引用符の後に余分な文字を指定することはできません。

    Error 305 for command:
        close "C:\Users\user_\test\One_Day_at_a_Time.mp3"
    文字列を囲む引用符の後に余分な文字を指定することはできません。
Failed to close the file: "C:\Users\user_\test\One_Day_at_a_Time.mp3"
Traceback (most recent call last):
  File "music_play.py", line 3, in 
    playsound(r'C:\Users\user_\test\One_Day_at_a_Time.mp3')
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\playsound.py", line 72, in _playsoundWin
    winCommand(u'open {}'.format(sound))
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\playsound.py", line 64, in winCommand
    raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException:
    Error 305 for command:
        open "C:\Users\user_\test\One_Day_at_a_Time.mp3"
    文字列を囲む引用符の後に余分な文字を指定することはできません。

実行してみると、上記のエラーが発生しました。発生後、原因を調べてパスの渡し方が問題なのかを考え、raw文字列や”/”バックスラッシュをエスケープしたりしましたが、問題は解決できませんでした。

py -3.8 -m pip uninstall playsound

py -3.8 -m pip install playsound==1.2.2

解決できませんでしたので、他の方法を探ってくると、playsoundのバージョン1.2.2だとスクリプトが実行できるという情報を発見し、今回インストールしたplaysoundのバージョン1.3.0はアンインストールし、バージョン1.2.2をインストールしてみることにしました。

Traceback (most recent call last):
  File "music_play.py", line 3, in 
    playsound(r'C:\Users\user_\test\One_Day_at_a_Time.mp3')
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\playsound.py", line 35, in _playsoundWin
    winCommand('open "' + sound + '" alias', alias)
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\playsound.py", line 30, in winCommand
    '\n    ' + errorBuffer.value.decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 4: invalid start byte

インストール後、再度スクリプトを実行していましたが、上記のエラーが発生しました。今度は先程とは別のエラーになり、原因を調べてみると、パスの渡し方が問題である可能性が出てきました。(https://stackoverflow.com/questions/68531326/what-is-the-error-in-the-code-for-this-playsound-module-even-though-the-syntax-i/70601934#70601934

playsound('C:/Users/user_/test/One_Day_at_a_Time.mp3')

そのため、スクリプトのコードを上記のコードに変更し実行してみました。実行してみましたが、再度エラーとなりました。エラーとなったため、他の解決方法を探りました。そこで、今回の「mp3ファイルをwavファイルに変換してみる」ことを思いつきました。

playsound('C://Users/user_/test/sound_2.wav')

ファイルを変換し、スクリプトのコードも上記のコードに変更してみました。変更後、スクリプトを実行してみると、今度はwavファイルを再生することができました。

今回用意したmp3ファイルがなぜ再生できなかったのかの原因は不明ですが、wavファイルに変換することで再生は可能であることがわかりました。

コメント

タイトルとURLをコピーしました