見出し画像

Pythonで音楽制作2 c++で音楽制作 puredataとかの話題

fendoapです。 max for liveなどを作ったりしてます。 FDNリバーブ


普段maxとかpdとかで作ってるんですがそもそもこういう言語の中身が何をしてるのか知りたくてドライバのやり取りだけ用意して、できるだけ作って
みることにしました。

>>Pure Dataで作ったアルバム。


という感じでPythonでシンセライブラリ作るところから音楽を作ってみました。チャーハン田んぼみたいな感じ。

>>ディレイとかはフラクショナルディレイで作ったので逆再生とかもできます。 
シーケンサー、オシレータ、エンベロープ、wavファイル読み込みサンプラー、ディレイ、フィルター、コンボリューションリバーブなどの機能を一通り作りました。

今回は学習も兼ねてできるだけ自分で作ってみようと思っていたのですがPythonで作っていて良かったのは他のライブラリとかと連携できるところです。FFTとか畳み込みとかをライブラリで引っ張ってきてくっつけたら簡単にできます。ただ処理速度的には遅い感じでした。自分の書き方がアレなのかもしれませんが、、 numpyとかの記法やjit コンパイル? 詳しくないのですがあれこれ入れてみて速くはなったのですが、やはり遅い感じはします。少し古いPCで動かしてみたところ処理落ちがしたのでやはりフルで使うにはもう少し工夫が必要かもしれません。手軽さはありますが。




c++

手元にラズパイ1B+があるのですがGUIのOSを入れてもカクカクしたりで放置していたのですが何か音に関することができないかなと思ってとりあえずCLIでなら動くかなと思って触り始めました。
最初さっきのPythonのライブラリを動かしたのですがカクカクして動きませんでした。

GUIなしなのでpure dataとかが使えない?と思っていましたがPure dataのGUI無しモードで起動して使うということをやってみてうまくいきました。Pure dataのファイルはテキストエディタで開くとこんな感じなので直接エディットしてGUI無しで起動する形で使えます。 


それからPythonでPure dataのファイルを書き出してくれるスクリプトを書いたのでこんな感じでpythonで書いてpure dataをgui無しモードで使うという方法もできるかもしれません。



>一直線だけだけどPythonで作れるPuredata 


そんな感じでCLIだとラズパイが軽いのでラズパイやLinuxなどを学習しつつ色々試してみています。ラズパイを起動したら自動でPuredataファイルをじっこうしてくれるようなのも出来ました。 

多分新しいラズパイとかなら色々普通に出来そうですが古いのでPuredataのGUI無しでも処理落ちします。普通に作る分には難しい感じだったのでc++の学習も兼ねてラズパイでc++でシンセライブラリを作り始めました。先ほど作ったPythonのライブラリ的なことを移植しつつc++で書いていったりしました。
演算子のオーバーロードとか関数のオーバーロードとか色々調べつつ書いていきました。
numpyとかだと0.5+numpy配列とか自動で計算してくれるけれどc++だと定義する必要があってそういう部分がわかって興味深いです。
変数はvarという型を作って内部ではバッファーサイズのベクトルで値を保持するようにしました。
例えばサイン波のオシレータをOsc(440)とかで書いていますが外から見ると一つだけですが内部に例えばバッファサイズ64なら値を64個保持しています。out = Osc(440) などとすると実際には値が64個返ってきます。
そうするとout = 1+Osc(440)とかだと1個と64個の足し算をすることになって単位が違ってきます。点と線を足すような感じです。
例えばOsc(440+10*Osc(440))ならば (点+点*線(点))のような感じで混在します。なので点+*/-線=線 線+*/-点=線 線+*/-線=線のように演算子を定義しました。また数式もtanh()とかはよく使いますがベクトルに対する演算が定義されていないのでtanh(線)=線などのように定義して使えるようにしました。 なのでsin(phasor(440)*PI*2)などのように数式の関数にベクトルが渡されてもベクトルが帰ってくるのでオシレータなどやFMシンセなどを標準の関数と同じ名前で定義できるようになっています。



でこんな感じで一通り作り動いたので音楽を作ってみました。
ラズパイで動かして録音してableton liveでリバーブやマスタリングでコンプ掛け等しました。 ある程度オシレータとかの数が増えると(~30個)カクカクしますが、簡単な音楽を作る分には普通に使える感じで軽いです。結構これで聴ける感じに作れたのでいい感じです。




よろしければサポートお願いします!