はじめに
docker-compose build
をしている間に仮面ライダービルド
に変身したら面白くない? といった技術と時間の無駄遣いを紹介します。 結論から言うと、とりあえず出来はしましたがcliとしてはまだ完成しておらず、変身の際に音声も流れるので著作権の問題もありそうなので配布はしません。なので完全に自己満足の作品です。
どうやって変身するか?
フローはこんなじ
1. 実行時に「ラビット! タンク! ベストマッチ!」を流す
2. docker-compose buid
を走らせながら待機音のループを流す
3. docker-compose buid
終了のタイミングで変身完了音を流す
とりあえず見て
docker-compose build で仮面ライダーに変身する#技術と時間の無駄遣い pic.twitter.com/mtMpXo9OKF
— 清水 幸佑 (@thimi0412) 2019年4月25日
音源を用意する
youtubeから取ってきて以下のファイルを作成
-
build1.mp3
がラビット!、タンク!、ベストマッチ! -
build2.mp3
が待機音デンデンデン、デデンデン -
build3.mp3
がハンドル回す~ラビットタンク!まで
環境
- Python: 3.6.5
- docker-compose.yml
docker-compose.yml
は以前書いた記事のプロジェクトを使用しています。
コード
main.py
import subprocess
import logging
from subprocess import Popen
import threading
from pydub import AudioSegment
from pydub.playback import play
class Ridocker:
def __init__(self):
self.stop_event = threading.Event() #停止させるかのフラグ
#スレッド
self.build = threading.Thread(target=self.exec)
self.begin = threading.Thread(target=self.run_mp3, args=('mp3/build1.mp3',))
self.standby = threading.Thread(target=self.retry)
def run_mp3(self, path):
'''mp3ファイルを再生する
Args:
path(str): mp3ファイルのパス
'''
sound = AudioSegment.from_file(path, 'mp3')
play(sound)
def exec(self):
'''docker-compose buildを実行する
'''
cmd = "docker-compose build"
popen = Popen(cmd, shell=True)
popen.wait() # コマンドの処理を待つ
self.stop() # 待機音のループを止める
def retry(self):
'''待機音をループさせる
'''
sound = AudioSegment.from_file('mp3/build2.mp3', 'mp3')
# execが終了するまでループ
while not self.stop_event.is_set():
play(sound)
def stop(self):
self.stop_event.set() # ループを止める
self.standby.join() # 変身待機音が終わるのを待つ
self.run_mp3('mp3/build3.mp3')
if __name__ == '__main__':
h = Ridocker()
h.begin.start()
h.begin.join()
h.standby.start()
h.build.start()
threadingを使用してdocker-compose build
を流しながらmp3ファイルを再生しています。
mp3ファイルの再生にはpydubを使用しました。mp3ファイルの再生は他にもpygameのmixer.musicもありましたがmixer.musicはtime.sleep(n)
の処理を行わないと再生できないので今回は見送りました。(無限ループ再生ができるそうです)
改善点
- 現状ではmp3ファイルを同じディレクトリ内に配置しているので
/User/{UserName}
配下にmp3ファイルを置いて読み込めばいいかもしれない -
python main.py
で実行しているのでcliとして作成したいridocker --no-cache
みたいな感じ - 変身音のパターンを増やしたい(ゴリラモンドとか)
ridocker --form gorillamond