DAWから出力した音をフーリエ変換して可視化しつつ音も鳴らす
この記事は?
この記事は,MIDIキーボードなどをDAWに接続しながら,Processingで音の可視化を行いつつ,音も出力するための手順を紹介します.
*また,この記事は,「PERSOL PROCESS & TECHNOLOGY Advent Calendar 2019」の最終日の記事です.
https://qiita.com/advent-calendar/2019/ppt
TL;DR
PIIB 気球
— いわし (@tty_tkhs_ml) 2019年12月24日
ギターも弾いて加えてみた。
演奏とオケ分けないとよく分からないという結果。 pic.twitter.com/fqfDO4jzkg
今回のシステム構成を示します.ポイントは,複数出力装置で,音声へのアウトプットと,ループバックのためのsoundflowerへ出力しているところです.
前提条件
- Macを前提とした解説をしています.
- sound flowerをインストールしてください(参考:https://appli-world.jp/posts/2831)
- 複数出力装置をインストールしてください(参考:https://support.apple.com/ja-jp/HT202000)
- DAWやProcessingを用意してください.DAW製品はなんでも可能です.今回はStudio Oneをベースに解説します.
目的と課題
目的は,音を可視化しつつ音声を鳴らすことです.これにより,リアルタイムに演奏しながら音を可視化することができるため,演出パフォーマンスに利用できます.
音をProcessingで可視化する方法は無数にありますが,今回はフーリエ変換した特徴量を利用します.Processingへ音を入力する方法は大きく分けて二つあり,
- マイクなどの入力装置を利用する
- PC上で鳴っている音を仮想的に出力 -> 入力(ループバック)させて利用する
です.今回は2の応用となります.
2の方法を解説した記事は無数にありますが,課題として,ループバックさせてしまうので音が聞こえない(最終的にスピーカーに出力されない)というものがあります.実際にその問題は,この記事でも示唆されています.
対応策
シンプルで,ループバックの入力と,スピーカーへの入力を同時に行うのみです.そんなこと可能なの?という感じですが,「複数出力装置」を利用することで簡単に実現できます.
今回は,単純に音楽ファイルを再生するだけでは面白くないので,DAW経由で演奏しながら可視化しました.
複数入力装置の設定
1,Launchpadを開き「midi」と入力し,「Audio MIDI設定」をクリックする.
2,マスター装置に「Soundflower(2ch)」を設定し,下のリストからSoundflower(2ch)と,音を鳴らしたいスピーカー(Mac本体のスピーカーの場合は内蔵出力)の「使用」チェックボックスをチェックして下さい.
これで完成です.
これにより,アプリケーションのアウトプットに「複数出力装置」を選択すると,Soundflower(2ch)と内蔵出力の両方に出力されるようになります
すなわち,Processing側で,Soundflowerを入力として受け取ることにより,Processing側が受け取るシグナルと,スピーカーから出力される音が同期します.
DAW側の設定
オーディオデバイスの出力先を,「複数出力装置」にするだけです.簡単ですね.
画面はStudio Oneですが,CubaseだろうがPro Toolsだろうが一緒です.
デフォルトの入力デバイスの設定
Processingではデフォルトの入力デバイスの音を受け取るように(デフォルトでは)なっているので,デフォルトの入力デバイスをSoundflowerに設定します.
1,右上のスピーカーアイコンをクリックし,"サウンド"環境設定を開く.
2,入力に「Soundflower(2ch)」を選択します.
これでDAWで発生した音が複数入力装置に出力され,
複数入力装置からスピーカーとSoundflowerに出力され,
Soundflowerからループバックされた音がProcessingに入力されるようになりました.
Processingのコード
下記記事の大部分を利用しています.
結果
PIIB 気球
— いわし (@tty_tkhs_ml) 2019年12月24日
ギターも弾いて加えてみた。
演奏とオケ分けないとよく分からないという結果。 pic.twitter.com/fqfDO4jzkg
課題・展望
- オケと演奏を同時に鳴らすと,リアルタイム感が無くなる.MIDIを入力でも受け取れるので,オーディオ+MIDI情報を利用して,音のコード感やチャンネルなど離散的な情報を組み合わせることで面白くなりそう.
- 構成が複雑なのでシンプルにしたい
- DAW側で,複数入力装置をOutputに設定すると,なぜかInputも複数入力装置になってしまう.これだと,オーディオインターフェースからの入力を受け取れない.MIDI以外のアナログな楽器の入力を取れない.
以上です.