ChucK

ChucK入門 #11 ループ素材をカットしてみる

ひさびさのChucK。SndBufを使うとループ素材を簡単にカットしてつなぎかえることもできるはず、なのでやってみた。 SndBuf l1; "c:/temp/amen.wav" => l1.read; 1 => l1.loop; l1 => dac; l1.samples() => int full; 8 => int breaks; full / breaks => int …

Chuck入門 #10 - SndBufでwavファイルを鳴らす

なんだか ChucK by Exampleというべき様相を呈している本入門記事ですが、ついに第10回を迎えることとなりました。私の興味や、思いつきの実験精神にしたがってソースコードを作成しているので、どうしてもヘンな(妙に突っ込んだ)例が多いため理解の妨げにな…

ChucK入門 #9 - マウス入力を扱う〜XYフィルター編

今回は趣向を変えてユーザーからの入力を扱ってみましょう。まずはマウス入力を使ってみましょう。ついでに、マウスといえば、ということで、フィルターを作ってみましょう。 いきなりですがソースコードとその解説をしていきます。 Hid hid; HidMsg msg; 0 …

ChucK入門 #8 - ADSRエンベロープを使う

前回、音を鳴らすときに減衰を行うためにエンベロープ用のオシレータを準備していましたね。ですが、シンセなどでおなじみのADSR式エンベロープのUGenが ChucK にはすでに準備されているのです。こっちを使いましょう。書き換えると、発音部分はこのようにな…

ChucK入門 #7 - マルチしゅれっど(shred, not thread)

前回は発音部を関数に切り出しました。で、呼び出すと音がなりますが、音が鳴り始めて消えるまで呼び出し元はブロックされています(同期)。和音はもとより、これでは複数のパートで演奏するとか不可能です。非同期で動作させるために、マルチスレッドです。…

ChucK入門 #6 - 関数(手続き)を作る

なかなか音を鳴らす、ちょっといじるだけでもずいぶん大変だなあ、という印象を持ったかもしれません。今回は、「音を鳴らす」部分を関数/手続き化しちゃいましょう。たとえばシンセも、外界から見ると「どの音高を、どの強さで、どの程度の長さで発音するか…

ChucK入門 #5 - 時間の単位

ChucKでは 5::second => now;として、5秒待つことが出来ますが、今回はこれをもう少し掘り下げてみましょう。まず、second の部分にはどのような単位が使えるのでしょうか。ChucKのマニュアル(PDF)によると、以下のような定義済みの時間単位があるようです s…

ChucK入門 #4 - そしてステレオへ

今回は音のステレオ化に挑戦しましょう。その前に、オシレータの他の種類も見てみましょう。 SqrOsc s1; SawOsc s2; 0.5 => s1.gain; 0.5 => s2.gain; s1.freq() + 2 => s2.freq; s1 => dac; s2 => dac; 5::second => now;新しく SqrOsc と SawOsc が登場し…

ChucK入門 #3 - blackhole!

ChucK入門第三回です。ChucKのドキュメントの流れをパクっていますが気にしない。blackholeの存在 SinOsc s1 => dac; SinOsc s2; 5 => s2.freq; while (true) { 20::ms => now; (s2.last() * 40) + 440 => s1.freq; }このプログラムを実行しても「あれ?別に…

ChucK入門 #2 - 代入文とループとプロパティと私

今回は、さっそくこのソースを試してみましょう SinOsc s1 => dac; SinOsc s2 => dac; 440 => s1.freq; 660 => s2.freq; for (1.0 => float f; f>0.0; f - 0.1 => f) { f => s1.gain; 1::second => now; }実行してみると、440Hzと660Hzの混じった音が聞こえ…

ChucK入門 #1 - 音をならす

ChucKという、オーディオ処理用の言語、環境があります。同種のものにはSuperCollidorなどが挙げられます。SuperColliderは相対的にメジャーなようなのですが、このChucKはまだまだ日本語での記事/ドキュメントが不足しているようなので、(リファレンス的な…