2013年8月23日金曜日

Pure Data(Pd)ことはじめ

サウンド系アプリを作ってみようと思ったきっかけは,libpdを知ったことにあります.

libpdは,音声処理向けのビジュアルプログラミング言語である
Pure Data(以下Pd)で作ったパッチ(≒キット,システム)を,CやJava等のコードに
組み込むためのライブラリです.

サウンド系アプリはその性質上,オーディオ系の機能に関する要求は
相応にリッチなものが必要になるんだろうなと想像してます.



初めからCore Audioを実装していたiOSに対して,Androidがこの分野で
大きく後れを取っているというのはエンドユーザも含めた多くの人の共通認識だと思いますが,
そうでなくても,オーディオ系のアプリケーションには
タイミング制御・バッファ管理云々といった特有のインプリが必要になってきます.
これを自分で作りこむというのはちょっと気後れする部分があるので,
難しいところは既存のフレームワークにまるっと任せて,
こちらとしては「タイミングとサンプルを適切に入れてやりさえすれば安定して鳴ってくれる」
という環境が容易に構築できれば,結構やる気が出るというもの.

Pdはまさにそんな感じの言語なので,libpdを導入してPdを取り込めば
サウンド系アプリの制作環境が結構整うんじゃないかなという想像.
AndroidのlibpdはOpenSLをサポートしはじめたようなので,
Android 4.1あたりからシステムミキサ周辺が整備されてきたということも相まって,
発音のレイテンシや,その他オーディオの動的処理・リアルタイム処理にかかわる
パフォーマンスも期待できるような気がします.

実際のところどんなもんなんかは順々に作りながら確かめていこうと思いますが,
そもそもPdについて理解がないとスムーズには進まないだろうと思い,
ここでお勉強がてら試作をしてみることにしました.



長い前置き終わり.

Pdをいじり始める


音楽系のビジュアルプログラミング言語というと

・Max/MSP
・NIのReaktor
・LogicのEnvironment(オーディオ信号処理はできませんが)

あたりを知っている人であれば想像がつきやすいと思います.
幸なことに私は一応,学生時代に計測工学や信号処理を専門にしていたので,

・MATLAB/Simulink
・LabView

などの経験も多少あり、個人的にはさらに取っかかりがよいです.

Androidやlibpdの勉強も,具体的な実装の目的があったほうが捗るだろうと思い,
せっかくなのでこの先必要そうな基本要素から作りはじめてみます.

まずは無いと話にならないと思うのが,テンポを使ったタイムベース.
これは時間の単位として,ミリ秒とかサンプル数といった信号処理的な概念ではなく,
16分音符,128分音符といった音楽の拍を基準にした単位を使ってタイミング管理をするもので,
シーケンサには必須の機能です.

Pdの公式コミュニティで公開されているumetronomという16ステップメトロノームをベースに,
操作方法や主要なエレメントの動作を調べながら書き加えて作ってみました.

設定されたテンポ(bpm)をもとに16分音符でwavファイルの音がポコポコ鳴るのに加えて,
1拍あたり48tics(DTM用語でタイムベースの単位をticと呼びます)の分解能で
シャッフル機能をつけてます.



shuff_test.zip
Pdで開いて,左上の緑の"sound enable"ボタンでサウンド出力を有効にし,
水色の"play/stop"ボタンを押すとポコポコループ再生されます.
オレンジ色の"bpm"の箱をクリック&ドラッグして数値を変えると再生速度が変わって,
黄色の"Shuffle"の箱をクリック&ドラッグして数値を変えるとリズムがヨレていきます.

Shuffleは数値をギッコンバッタンと反転させて足したり引いたりしてる機構なので,
なんとなく音楽的な理解(偶数ステップだけ後ノリになるイメージ)と違って気持ち悪いですが…
あと,普通の算術オブジェクトを知らずに謎のexpr乱発.GPL乙.
まぁほんとにとりあえずということで.

0 件のコメント :

コメントを投稿