はじめに
こんにちは。赤ジャージです。僕は最近、tkinterとpygameで耐久時間を曲ごとに設定してそのプレイリストを作ったりするメディアプレイヤーアプリを個人的に開発しました(誰得)。完成したアプリを友人Kに見せたら、「これだとOSについているメディアプレーヤーと何ら変わりない。変な機能を追加するべきだ。例えば逆再生とか。」 と言及されて、張り倒してやろうかと思いましたが確かにそうなので、pythonで曲を逆再生する機能を探すと、ありました。
python、微妙に使いづらい
pythonって色んなライブラリとかありますけどどれも完結してなくて長所と短所があるんですね...例えばpygameだとボタンの概念がないとかtkinterだと音声を再生できないとか...今回使うffmpegもその類です。強力だけど完全じゃない。
前提
・python、pygameの基礎知識がある
・お使いのPCは正常で、osはWindows11(ここ重要)
・pythonのバージョンは3.7.2(老害)
準備
☟とりあえずここにテレポ
https://www.gyan.dev/ffmpeg/builds/
このffmpeg-git-full.7zというffmpegバイナリをダウンロード、解凍
このbinフォルダの中のffmpeg.exeとffprove.exeをコードと同じファイルに移す(依存関係?シラン)。
一応コマンドプロンプトでpip install ffmpeg
を実行することを推奨。
そして逆再生させたい曲をコードと同じフォルダに入れる。
これで準備は完了です。早速コードを見ていきましょう。
ソースコード
import pygame
from pydub import AudioSegment
# 前準備
pygame.init()
AudioSegment.converter = "ffmpeg.exe"
AudioSegment.ffmpeg = "ffprobe.exe"
# 曲をロードして逆にしたものを保存
sound = AudioSegment.from_mp3('music.mp3')
reversed_sound = sound.reverse()
reversed_sound.export('reversed_music.mp3', format='mp3')
# それを再生
reversed_music = pygame.mixer.Sound('reversed_music.mp3')
reversed_music.play()
# 10ミリ秒ごとに曲が再生されているか判定
while pygame.mixer.get_busy():
pygame.time.Clock().tick(10)
pygame.quit()
解説
単純だし短いですから少しだけ...
sound = AudioSegment.from_mp3('music.mp3')
で.mp3ファイルを読み込みます。
sound.reserve()
で曲を反転します。それをreversed_sound.export('reversed_music.mp3', format='mp3')
で保存し、pygame.mixerが再生しています。
感想
いつ使うんだ...と思ったこのコードですが、案外ゲームとかで使ったりできそうですね...
https://www.youtube.com/watch?v=3c0rPmAWlug
こんな感じの
また友人Kからの変な機能のリクエストがあれば変な機能を調べるかもしれません。
ではでは~(o_ _)o
参考文献