lesson8を学んだ。順にそれぞれ自分の理解をメモしながらまとめる。
オシロスコープ ミュージックという、ジャンルの音楽がある。(詳しくはこちらの動画を参照)アイディアとしては、オーディオ信号をオシロスコープに通したときに浮かび上がるデザインされたパターンを表現として用いることで、視覚的に楽しめるものにしている。本稿では、このように波形を視覚化する方法を探る。
オシロスコープのXYモード
XY モードは、独立した2つの入力信号をまとめて出力する。仕組みはかんたんで、信号1の強さで点のX座標、信号2の強さでY座標を表す。有名なリサージュ曲線は、2つの正弦波を入力として、XYモードでかんたんに確認できる。
オーディオデータのデコード
audioreadを利用して、オーディオデータを符号付きの配列(int16_t)にデコードする。
オーディオファイルはバッファごとに読み込まれ、各バッファは特定のサイズ(通常は4KB)のオーディオデータのchuckになっている。バッファはサンプルで構成され、各サンプルのサイズはオーディオデータのサイズの倍のチャンネル数となる。(この時、ステレオオーディオであり、データ型が符号付き shortであるため、各サンプルのサイズは2×2バイト=4バイトとなる。)各サンプルには、各チャンネルのデータが横に並んで格納される。
よりPythonフレンドリーにするために、データを大きな配列に結合、numpyを使って2チャンネルに分割することができる。詳細は元記事のDecoding audio dataの項を参照。
オーディオ再生
PyOpenALパッケージを使用して、オーディオ再生をサポートする。パッケージが提供する最も基本的なAPIを使用しているため、動画と音声を正確に同期させるためには、調整が必要な可能性がある。PyOpenALはWAVのみのサポートだが、audioreadはより多くのフォーマットをサポートしている。
デモ
GitHub を確認して実行してみる。私の環境では以下のように、audioreadとPyOpenALのインストールが必要だった。
pip install audioread
pip install PyOpenAL