

pygame.mixerでweb上でダウンロードした音楽ファイルを再生できません。

[code]

    import os
    import pygame
    pygame.init()
    sound =pygame.mixer.Sound("C:/Users/syosh/Desktop/pyworks/data/ball_collided.wav")
    sound =pygame.mixer.Sound("C:/Users/syosh/Desktop/pyworks/data/coin07.mp3")
    
[/code]

`ball_collided.wav` も `coin07.mp3` も同じフォルダに保存しているのですが、以下のエラーメッセージが出ます。

**エラーメッセージ**

[code]

    pygame.error: Unable to open file 'C:/Users/syosh/Desktop/pyworks/data/coin07.mp3
    
[/code]

ゲーム音のフリー素材リンク  
<https://taira-komori.jpn.org/game01.html>


CC BY-SA 4.0
2020-03-04T03:09:43.850
63550
2020-03-05T05:32:12.873
2020-03-04T03:17:48.880
3060
38068
question
python mp3 pygame
pygameで音楽ファイルを再生できません


[pygame.mixer.Sound](https://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Sound)の説明に書いてありました。  
サポートしているファイルフォーマットの問題です。  
以下の2つ以外は扱えないようです。

> The Sound can be loaded from an OGG audio file or from an uncompressed WAV.
>
> サウンドは、OGGオーディオファイルまたは非圧縮WAVからロードできます。

@metropolis
さんコメントのようにあらかじめ変換しておくか、あるいはフォーマットをサポートしている何か他のライブラリで読み込んでメモリ上で`.wav`に変換してから`pygame`に渡す等の対処が必要でしょう。

* * *

補足：

以下の記事によると、Pythonの音楽系で.mp3からフォーマット変換をサポートしているのは pydub + ffmpeg
のみで、しかも変換だけではなくファイルへの書き出しが組み合わされるようで、メモリ上での変換だけという機能は無さそうです。  
[Playing and Recording Sound in Python](https://realpython.com/playing-and-
recording-sound-python/)  
[Comparison of Audio Libraries](https://realpython.com/playing-and-recording-
sound-python/#comparison-of-audio-libraries)の項を参照

soundfile + [libsndfile](http://www.mega-nerd.com/libsndfile/)
の組み合わせも色々と出来るようですが、.mp3はサポートしていないと明記されています。

> I have decided that I will not be adding support for MPEG Layer 3 (commonly
> known as MP3) due to the patent issues surrounding this file format. See the
> FAQ for more.

一応以下のように pydub + ffmpeg と numpy を組み合わせて何とかするという手もあるようですが、面倒でしょうし。  
[【Python/pydub】mp3、wavのデータをNumPy配列に変換](https://algorithm.joho.info/programming/python/pydub-
numpy/)  
[NumpyのarrayからPydubのAudioSegmentを作成する](https://own-search-and-
study.xyz/2017/11/19/numpy%E3%81%AEarray%E3%81%8B%E3%82%89pydub%E3%81%AEaudiosegment%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B/)

ただ、追加でこんなのを見つけたので、使えるかもしれませんね。  
[miniaudio](https://pypi.org/project/miniaudio/)

> python bindings for the miniaudio library and its decoders (mp3, flac, ogg
> vorbis, wav)
>
> miniaudioライブラリとそのデコーダー（mp3、flac、ogg vorbis、wav）のPythonバインディング。


CC BY-SA 4.0
2020-03-04T03:19:25.900
63552
2020-03-05T05:32:12.873
2020-06-17T08:14:45.997
-1
26370
63550
answer