Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

Pythonで作る、信号処理開発プラットフォーム用の音楽プレイヤー

リアルタイム音響信号処理プラグインの開発において、開発言語がC++であればVSTを使うことでDAW上で自作プラグインを動かすことができます。

一方で Python の場合、Numpy, Scipyといった強力な信号処理モジュールを使って簡単にリアルタイム音響信号処理のプログラムを作ることができますが、自作のプログラムを動かすアプリケーションや環境に恵まれていません。

そこで、Pythonで書いた音響信号処理のプログラムを利用できる音楽プレイヤーを作ってみました。

実装

実装の解説(メモ)

楽曲ファイルの読み込み

  • librosa.load()を利用
    • 私の環境では、.mp3, .wav の読み込みに成功
    • ステレオ信号用のプレイヤーとするため、mono=Trueとした
  • pyaudioの出力ストリームへの書き込み処理の分岐を減らすため、信号サイズを n_chunk の倍整数に調性

オーディオの再生(書き込み)方法

- PyAudioを利用 - ストリームに対してはndarrayではなくバイト列を渡す必要があることに注意(以下の記事を参考にしてください) www.wizard-notes.com

AudioPyler クラスの機能

  • set_audiofile(filepath)
    • 楽曲ファイルをセットする
  • play()
    • 楽曲ファイルを再生する
    • 実際にストリームに書き込み処理は __run() が行う(threading で非同期処理)
  • stop()
    • 楽曲の再生を停止する
  • pause()
    • 楽曲の再生を停止する
    • stop() との違いは、再生位置 (offset) を保存するかどうか。
  • terminate()
    • 終了用処理。ストリームを閉じる
  • __run()
    • 信号をストリームに書き込み

f:id:Kurene:20200810165022p:plain