サウンドデザインに関する文書の翻訳

2007年7月25日水曜日

SC3の導入、言語、プログラミングの基本

基本
最初にSCを起動したら、起動したことについての情報がウィンドウに現れる。最初の訳わかんない文字列は無視しちゃっていいけど、見えるところに動かしておくこと。というのも、君のコードのエラーや実行結果など役立つ情報を出力してくれるからだ。これからこれをポストウィンドウと呼ぶよ。そのままこのウィンドウを使ってコードを編集したり入力したりもできるんだけど、僕は新しいウィンドウを開く方が好きだな。

SuperColliderはテキストエディタ、プログラミング言語、コンパイラ、デジタルシンセサイザーが一体となってる。これは君がSCを使ってコードを書いたり編集したりすることが、音楽を演奏することを含んでるってことを意味する。それから君はSCを使ってコードを評価したり、デバッグしたり、コンパイルしたり実行したりできて、その結果はリアルタイムに音になる。テキストを編集する機能(選択、コピー、置き換え、など)は他の基本的なエディタと一緒。でもいくつかコードを編集するのに手軽で役立つユニークな特徴がある。もし君が今まで一度もコードを書いたことがないなら、その価値はすぐには理解できないだろう。何度もここに戻って、見直すことをおすすめする。

Com-, 指定行に移動
Com-/ 選択された行をコメントアウト
Opt-Com-/ 選択された行のコメントを外す
Shift-Com-B 括弧を対照する
Com-] コードを右にシフト
Com-[ コードを左にシフト
Com-. 全ての録音再生を止める
Shift-Com-/ (Com-?) 選択されたアイテムからヘルプを開く
Com-' シンタックスを色付けする
括弧をダブルクリック 括弧を対照する
Com-\ ポストウィンドウを前面にする
Shift-Com-K ポストウィンドウをクリアする
Shift-Com-\ 全てを前面にする

評価はコードについてのシステムのメッセージ、数値(データ)、式や関数(計算機みたいな)、またはシンセサイザーパッチの音などになる。SCパッチからのデータは録音のためのピッチや、演奏者への命令、解析の結果になり得る。けど次のチャプターでの僕らの目的は、音だ。

選択されたコードを評価するには、エンターキーを押す(リターンじゃない、エンターだよ)。もし一行だけ評価したい場合は、選択する必要はない。その行にカーソルを置いておくだけ。このテキストの実例を実行するには、SCに(数)行を打ち込んで、そこにカーソルを置くか、全部の行を選択してエンターを押す。

全てのプログラミング文書は、ギークによって最初の実例で"hello world"を実行するように決められている。正確にこれらの行を打ち込んで、その行にカーソルを合わせ(もしくは選択して)、エンターキーを押し、それから次に移ってエンターキーを押す。3つめの実例では、両方の行を選択する。

8.1 Hello World

"Hello World";

"Hello World".speak;

"I've just picked up a fault in the AE35 unit. It's going to go a hundred percent
failure within seventy-two hours.".speak;

各行がセミコロンで終わっているところに注意して欲しい。これは行の終わり、またはコンピュータ言語を意味している。実例8.2はもっと意味がある実例。

8.2 音楽的な数学

5 + 4;

(5 + 4).asString.speak;

(440 * 3/2).asString.speak;

("The frequency for E5 is" ++ (440 * 3/2).asString).speak;

("The frequency for middle C is " ++ (60.midicps.round(0.1).asString)).speak;

これを"コード"と呼ぶのには理由がある。初心者はそれを神秘的なものだと思うから。実際新しい言語なんだ。フランス語とか、もっと言うと、中国語とか。でも言語の理解が進むと、smalltalkは簡単で、英語みたいに読めたりする。括弧は"これが使用する値のリストです"と"これをまず最初に実行する"の両方、引用は"これは文字列、または文章"を意味する。"dots"は"この情報をあのオブジェクトに送る"という意味。そして++は"この文章を次のに連結する"という意味。上記の実例の最後のやつを翻訳すると:MIDIナンバー60を1秒当たりの周期に変換(midicps)し、0.1に値を丸めたあと、文字列に変換する。"The frequency..."と連結し、結果を喋る。

上記の実例はSCが最も得意としている合成音を全く生成していない。これからどうやるかを説明しよう:まずシンセサーバを起動する必要がある。こいつが実際に書かれたコードを元に音を作るんだ。2つのサーバがあって(下の左に2つの小さいウィンドウがある)、インターナルとローカルだ。今はこの違いを気にしなくていい。2つのシンセサイザーが積み重ねられてて、そこに楽器の定義と録音再生の命令を送るんだって思っておいて。このテキストではインターナルサーバが最も機能する。

各セッションにおいて君はサーバを1回起動(例:電源入)して、動かしっぱなしにしておくだけでいい。ユーザーインターフェース上のbootボタンをクリックするか、下記のコードを実行すればできる。僕はコードを実行するのが好きだな。サーバを"s"って名付けられるから。特に示さない限り、この本の実例は全部サーバが動いているものとして、それがデフォルトのサーバで"s"と呼ばれる。8.3の行を実行もしくは"評価"して欲しい。

8.3 サーバの起動

Server.default = s = Server.internal.boot;

これで最初のパッチが動かせる。コマンドキーとピリオドキーで全部の録音再生が止まる(けどサーバは動いている)ことを思い出して欲しい。このテキストはそれぞれ実例が終われば君が録音再生を止めてるものとする。

8.4 最初のパッチ

{SinOsc.ar(LFNoise0.ar([10, 15], 400, 800), 0, 0.3)}.play;

この実例は複数行に渡り、もっと複雑。{からplayまで全部を選択して、エンターキーを押す。

8.5 2番目のパッチ

{
RLPF.ar(
LFSaw.ar([8, 12], 0, 0.2),
LFNoise1.ar([2, 3].choose, 1500, 1600),
0.05,
mul: 0.4
)
}.play


[訳者補足]
この文書はDavid Michael Cottleという方のComputer Music with examples in SuperCollider 3という文書の一部で、セクション2から翻訳をしています。セクション1はMac OSXの使い方からデジタルオーディオの基礎、マイクやケーブルの種類なども説明されているので、これから勉強を始める方は読むといいと思います。元の文書が読みたい場合は彼に直接連絡を取って下さい。その際に、自分が何を勉強してるかとかを書くといいです。僕もそうしました。その時に翻訳に関しても承諾を得ています(覚えているかどうかは分かりませんが...terms of useにも同僚や生徒に配るのはいいよーと書いてあるので問題はないでしょう)。SuperCollider 3はフリーでオープンソースな音響合成言語で、テキストによってプログラミングを行います。リアルタイムにコードを書きながら演奏するためのライブラリであるJITLibなどもありますし、コンピュータを使って音を扱う上で興味深い環境だと思います。

ダウンロードはここから。ヘルプやチュートリアルが充実している(Pure Dataなどもそうですが、そのまま実行できる)ので色々調べて試してみるといいと思います。
The SuperCollider Home Page

日本語で情報を得るならここ。コードリミックスコンテストなども面白いです。
SuperCollider Japan - SuperCollider コミュニティ
Jason Dixon氏のサイトも勉強になりますね。
MutantSounds - music, code and musings by Jason Dixon

2007年7月14日土曜日

基本的な加算法

面白くない音でしょ?まぁでも次のステップの電話を作るための出発点だ。下のダイアグラムを見て。もう1つオシレータを足した。2つのオシレータの出力を繋げる要素は[+~]ユニットで、そいつは単に2つのオーディオ信号を足してるだけ。注意して欲しいのが、今回はメッセージを送る代わりにデフォルトのパラメータを既に入力してるってとこ。これはPureDataのリアルタイムコントロールにもよく使われるし特定の初期値に最適化させる時にも使われる。つまりこのパッチはすぐ音が鳴らせる。でもこの周波数で決まっちゃって動かないって訳ではなくて、インレットに入力があればパラメータを上書きすることもできる。でたらめな周波数、単に打ちやすかった1234と789を選んだんだけど、ちょっと聴いてみて...知ってる感じしない?何でかって言うと、1980年代の電話はDTMF信号を使ってて、単純にユニークな周波数をお互いに足し合わせただけの仕組みだったからだ。周波数を正確に選ぶことで、電話交換スイッチはひどいノイズからダイアルされた音を判別できた。phase locked loopと呼ばれる回路を使って変調を戻す。これらのオシレータが初期の電話に組み込まれたので、同じチップが電話の呼び鈴を作るのに再利用されても驚くことはない。文化的/商業的理由からこうやって80年代の音は作られた。もうここまできちゃったけど、まずは単にサイン波のペアを重ね合わせるだけで可能性を探ってみよう。

ダイアルの音色をつくるのはとても簡単。ちょっとスパイスを足してキーパッドで数字を押してダイアルするようにしてみよう。

これがDTMF/CCITTで使われてる周波数のペアのリスト。

1209 1336 1477 1633
-------------------------------------------
697 | 1 2 3 A
770 | 4 5 5 B
852 | 7 8 9 C
941 | * 0 # D

9の音色を得るためには、1477Hzに852Hzを加える。そのため最終的な音はそれぞれ与えられた周波数に2つの成分をもつことになる。サイン波が使われてるのは重要で、サイン波やコサイン波は固有の周波数しかもたないことを思い出して欲しい。純粋なんだ。純粋なサイン波の重ね合わせはスペクトラムの理解が簡単で、結果はただ入力した二つの成分に過ぎない。これは正直な加算合成だ。シグナルを歪ませない限り、二つの成分は互いに干渉し合うことはない。化学の類推例で言えば水と油だったり溶液中の反応しない溶液みたいなもの。また後でフィルタリングとかその他のテクニックを使ってミックスされた状態から元に戻す。今回のはどの番号も純粋なサイン波の信号だ。

上記の表を使って僕らはDTMFダイアラを作ることができるようになった。サウンドカードをボイスモデムデバイスにつなげば実際に機能する。キーパッド上のキーは固有の行き先にbangメッセージを送り、それぞれの行き先は二つの周波数のリストメッセージをダイアラーパッチに送る。[unpack f f]要素はリストを二つの浮動小数点に分割し、それぞれオシレータに渡す。加算機能はシンメトリカルなので実際はどの値がどのオシレータに行こうが関係ない。1234Hz+789Hz=789Hz+1234Hzってこと。全部の機能がこうやって実現される訳じゃないってのは覚えておいて欲しい、けど加算と積算は全くこの通り。パッチをダウンロードするか実例を聴いてみて欲しい。
ピュアデータファイル .pd
オーディオ.mp3



Telephone bell synthesis 1
Practical Synthetic Sound Design

2007年7月8日日曜日

1980年がもう一度電話をかけ直してくれと呼んでる

ちょっと最初の実例を聴いてみるところから始めよう。オーディオ.mp3


どうやってこの音を作ったか?ーオシレータの基本


まず始めに、基礎を築き上げよう。僕らがやろうとする構成的な合成のほとんどは、シンプルなアウトラインや目的に近い大体の音から始めて、細部を足していくやり方だ。ある時はいきなり大きな音が欲しかったり、まず振幅のカーブが欲しかったり、またある時は大体の周波数だったり、正しいトーンを得ることから始めたりすることができる。基礎として、シンプルなサイン波から始める以外にいい信号ってあるだろうか?こういう合成を始める際によく出発点とされてて、下のダイアグラムなんてもう慣れ親しんでる。あとの実例ではこのステージを飛ばして、もう当然のことにする。だけど、このステージではダイアグラムのパラメータについてちょっと考えてみよう。僕らはただ周波数と位相を付け加えるだけ。基本を人間の可聴域の大体中点である1000ヘルツにしておく。位相に関しては忘れていていい。コードを繋がないか、0にしておく。というのも、シンプルな加算合成やAM合成では耳はちゃんと聴いてないし信号の位相に注意は向かないからだ。振幅を知ることは、実際信号がどのように合成に影響するか決定するのに非常に重要なんだけど、今は無視しよう。

真ん中の[osc~]って名前がついた要素。これがサイン波のオシレータユニット。2つの入力を持ってて、片方は周波数を、もう片方は位相をセットする。これらの入力は対になったメッセージによって与えられる。PureDataでこのパッチを作っても、最初は何の音も聴こえない。というのも、デフォルトの周波数が決められてなくて0Hzになってるから。0Hzの音は音がないと言ってもいい。だからまずメッセージボックスをクリックして何の周波数で実行するかってのを送ってやる必要がある。オシレータの出力は直接DAコンバータ(君のコンピュータのサウンドカード)に接続されてとてもでかい音になる、気をつけてね。普通は、振幅を少し減らすために減衰器/音量ブロックを置く。[*~ 0.25]とかがよく使われるんだけど、最大の音量から1/4または25%に減衰する。もし何も聴こえない場合、PureDataのオーディオエンジンがオンになってるかどうか確認して欲しい。メニューからMedia->AudioONか、コントロール(マックはコマンド)キー+/キーだ。

Telephone bell synthesis 1
Practical Synthetic Sound Design

2007年7月6日金曜日

3つの電話

このエクササイズでは3つの電話の音を作るつもり。それぞれ全く異なっていて、別々の原理を使ってる。これを実現するために3つの合成手法と3つの制御構造をみていこう。「同じ音」を3つの異なった手法で作ることで、どのような音の記述法が実現可能な実装に導くのかを理解できるようになる。それぞれが効果的に合成され、ある登場人物が鳴らす音を生成するための客観的な手法として、ゲームデザイナーは簡単にコードに組み込める。こういうことをやってくと、インターフェースデザインが振る舞いや制御構造にどのように関係してるかが分かるようになる。

最初の電話は1980年代のアメリカ式のもので、沢山のテレビ番組でおなじみだ。現実世界とは何の対応もなく、言い換えれば完全に人工の音だ。僕らは電話を知ってるから、電話が鳴ってることを連想できる。つまり、第一原理や物理的な分解は機能しないってこと。その代わりそういう電話がどうやって動いているかを学ぶ知識を基礎にして取り組む必要がある。これに関しては、特定の間隔で側帯波を発生させるAM合成を使って、それ自身が振幅変調を起こしている制御構造を結合する。

2つ目の実例は最初のとは根本的に違うところから出発する。ここではオールドファッションな着信音に近づけるため力技で加算合成を使う。欲しい音に近づけてくれる方法を理解することによって、絶対的/生産的な知識を使うんだ。これは1930年代から1940年代の電話の音で、戦時中や戦前の古い映画に特徴的な音。この時点で合成の構造から分離した操作の概念を拡張して、イベントメッセージがPureDataの中でどのようにオーディオブロックと異なっているかを探求しよう。これで以前よりは共依存のパラメータから離れられるし、モジュール性を通してより多才な操作が可能になる。

最後の実例はもっと進んだリアルな着信音を作り直す試みだ。そうすることで、僕らは最初の2つの試みでの欠点やごまかしを見つけ、どうやって洗練し、重要性をひとひねりしてその振る舞いを一般的に改良するかを調べていこう。このために僕らはclosed form cosine synthesisやstochastic control methodsを使う。

Telephone bell synthesis 1
Practical Synthetic Sound Design

[訳者補足]
この文書はAndy Farnellという方のPractical Synthetic Sound Designという記事の和訳です。専門用語など適切な訳し方がわからないところをそのままにしていたりするので中途半端な感じですが、目的はあくまでもPureDataを用いたサウンドデザインを勉強することなので、ご了承下さい。PureDataはブロックを線でつないでプログラミングをします。リアルタイムに音や映像などのマルチメディア環境を扱えるので、電子音楽やインタラクティブアートの作品及びプロトタイピングによく使われています。思いついたアイディアをすぐ試せる開発環境として、楽しくて役立ちます。フリーソフトです。

ここからダウンロードできます。開発者のMiller Puckette氏のサイト。
http://www-crca.ucsd.edu/~msp/software.html
僕は映像を扱うGEMなどの外部ライブラリも同梱されたPd-extendedを使っています。
http://puredata.info/downloads

PureDataのプログラミングに関しては下記に日本語の詳しい解説がありますので参考にして下さい。
http://psyto.s26.xrea.com/pd/