0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オーディオプレイヤーを作る DAY2

Last updated at Posted at 2024-11-22

はじめに

Pythonを使ったオーディオプレイヤ―の実装過程を順次投稿しています。
前回までの進捗は以下の通りです。

今回実装した内容

  • GUI
    • 特になし
  • 機能
    • MP3ファイルの入力と再生
    • MP3ファイルからカバーアートなどのメタ情報を取得し、表示

ソースコード

環境

Windows11
Python3.12.7

動作イメージ

音楽 BGMer

ソースコードの補足

MP3ファイルの取り扱い

simple_audio_player_ver0.2.py
    def _open_mp3(self, input_path:str):
        try:
            mp3_data = AudioSegment.from_mp3(input_path)
            framerate = mp3_data.frame_rate
            nchannels = mp3_data.channels
            samplewidth = mp3_data.sample_width
            frames = bytes(mp3_data.get_array_of_samples())
            
        except FileNotFoundError:
            print(f"Error: cannot find {input_path}")
            return None

        print(f"{input_path} has been loaded")
        print(f'{nchannels}ch {samplewidth * 8}bit {framerate}Hz')

        try:
            tags = ID3(input_path)
            print(tags.pprint())

            attached_picture_data = tags.get("APIC:").data
            cover_art = PIL.Image.open(BytesIO(attached_picture_data))
            artist = tags.get('TPE1')
            album = tags.get('TALB')
            title = tags.get('TIT2')
            return Audio(nchannels, samplewidth, framerate, frames), AudioTag(cover_art, album, artist, title)
        except:
            print("Error: cannot get any tags")
            return Audio(nchannels, samplewidth, framerate, frames), AudioTag(title=os.path.basename(input_path))

MP3ファイルのデコード処理には、pydubを使用しました。pydubはffmpegを利用したオーディオライブラリで、様々なフォーマットのオーディオファイルを取り扱うことができます。なお、PyAuidioで再生することを想定しているため、データ自体はbytes形式で保存してます。何らかな信号処理を行う場合は、numpy形式で取り扱うことになるのですが。

メタ情報の習得には、mutagenを使用しました。mutagenはオーディオファイルのメタ情報に特化したライブラリで、それぞれのフォーマットに対応したメタ情報の読み書きができます。MP3には、ID3タグというMP3ファイルの中にメタ情報を書き込むための規格があり、アーティスト、曲名、カバーアートや歌詞といった様々な情報を格納することができます。mutagen.ID3を使えばID3タグを簡単に取得することができます。なお、ほしいメタ情報に応じたIDが必要になります。カバーアートならAPIC、タイトルならTIT2です。mutagen.EasyID3ならもっと簡単に取得可能ですが、カバーアートや歌詞は読み書きすることができないので注意が必要です。

備考

  • オーディオファイルはWAVとMP3だけに対応
    • 他のフォーマットは次回以降に対応
  • threadingあるいはmultiprocessingを使用していないため、あいかわらずオーディオを再生中にイベントループの処理が止まる。つまり、ポーズボタンを押しても停止させることができず、再生ボタン以外は意味をなしていない。強制終了以外に、アプリを終了すことすらできない
    • 次回以降に対応

おわりに

次回に続きます。
Qiitaの作法やソースコードに関するアドバイス、質問などがありましたらコメント欄までお願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?