Python音楽時代はここに来た!Pythonで作るTiny DAW.LaunchPadを動かす #pyconjp #pyconjp_201
人生をうまくやっていくための俺様ルール3つ。1.「できるだけ選択肢・可能性の多い方に向かう」 2.「我慢しない」 3.「努力しない」 - Standard notation: Any opinions are my own.
明日のセッションで紹介するプログラム。あっちこっちのライブラリから便利機能摘まみ食いしまくりでキメラ状態。だが全体としてはちゃんと読めるし破綻もしてないとおもうですよ。やっぱりPythonはお手軽ホビーストに最適言語でありますな #pyconjp
2016-09-20 18:40:27#pyconjp #pyconjp_201 Pythonで作るTiny DAW (Digitai Audio Workstation) はじまります! pic.twitter.com/BMFm0zI0sJ
2016-09-21 13:06:53PythonでLaunchpad弄る話聞いてる 製品付属のソフトウェアが高機能すぎて使いづらかったのでシンプルなものを自分で作ったと #pyconjp_201
2016-09-21 13:13:48#pyconjp #pyconjp_201 DAWの基本構成 pic.twitter.com/14OdoaGC5N
2016-09-21 13:14:02#pyconjp #pyconjp_201 DAW必須機能 リアルタイム性←重要! 30msもずれると人はズレに気付いてしまうので、できるだけレイテンシ(遅延)は減らさなければならない 発音中も各種捜査ができる必要がある(エディット・再生は分けたくない)
2016-09-21 13:16:51#pyconjp #pyconjp_201 リアルタイム性の確保 ・エフェクタを考えなければそんなに難しくない →入出力のブロッキングだけ気をつける シングルスレッドで作ると、どこかで詰まると全部詰まってしまうので、マルチスレッドで作る部分が必要 pic.twitter.com/brhcxmJCAk
2016-09-21 13:21:10device に対して reader, writer がマルチスレッドで動いていてイベントやキューを扱う。普通のアーキテクチャで実現できる #pyconjp_201
2016-09-21 13:23:34#pyconjp #pyconjp_201 音声の多重再生 自前で実装しようとすると大変 ・複数のバイト列を合成する ・PCMバイトストリームは非同期に入ってくる ・最終出力バッファリング精度 ・リアルタイム処理&ブロッキングの注意
2016-09-21 13:23:54#pyconjp #pyconjp_201 >>>Pythonistaはめんどくさいことはやらない<<< PyGame on SDL2 を使用 SDL2のPythonWrapper SDL→Simple Direct media Layer メディア系の総合ライブラリ
2016-09-21 13:25:23多重再生はデバイスのブロッキングを考慮すると、実装はなかなか難しい。先人の知恵である pygame を使おう #pyconjp_201
2016-09-21 13:25:42#pyconjp #pyconjp_201 今回はpygame.mixerというモジュールを使用 sound = pygame.mixer.Sound(FileName) sound.play() ↑これでOK >>>すごい<<<
2016-09-21 13:26:16