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

2007年11月14日水曜日

物理の知識

この実例では、電話のベルの物理的な性質について考えたい。僕らがベルの音や一般的な物理についての知識を使ってね。導入が長いんだけど、加算合成で僕らが何をしてるのか理解するってところに設定した。簡単に考えると3つのトピックがある。形、構造、そして励起だ。

2007年9月29日土曜日

電話のベル2

一般論 対 特定の原理
最後の実例は特定の知識、古い電話の話題における専門的な領域の知識が必要だった。何らかの方法で非現実的な音をデザインする際に、エンジニアリングの知識を必要とすることはもう一般常識だ。ある実例はモーグフィルタ、808ドラムマシン、テルミン、1970年代のハモンドオルガンなどを作る。ほとんどの音は、元々電気または電子だ。覚えておきたいのは、AY38610サウンドチップはシフトレジスタをノイズのソースに使うと、日本のヴィンテージビデオゲームのノイズを忠実に再現するのに非常に役立つかも知れない、とかそういうこと。ある種のプリンターが24ポールのステッパーモータを使っていることを知っていれば、ドットマトリクスプリンタの音を忠実に再現するのを助けてくれるかもしれない。V8エンジンと2ストロークのモーターサイクルエンジンは広大だけど、実世界での物理的なデザインに根付いている。何故2羽の鳥が異なった音を鳴らすのか、というのは生物学の知識が役に立つ質問。でもこれらのそれぞれが限られた知識を動かす。

ときどき僕らは異なる種類の知識、僕らが”第一原理"とでも呼ぶような、もっと広範囲にわたる種類の物理的と数学的推論を使うことが必要になる。"関係する音はたいてい似たような時間フレームで再生停止される"とか、"振動する膜は常に指数関数的に減衰する"というような報告は、サウンドデザイナーにとても役立つ広い知識を語りかける。これらのルールは合成の根本における数学の基本的な法則よりも少し基礎的でなく厳密さを欠き、常に真とは限らないが、それらをデザインに採用したり、何が機能するかを理解することで沢山のものを得ることができる。

2007年9月28日金曜日

Phoney Mc Ring Ring

さあ、全部のパーツを集めてひとつの実例を作り上げる時がきた。自分で組み上げてもいいし、この実例をダウンロードして研究してもいいだろう。

スタートボタンは電話番号を表すリストをシンプルなシーケンサーに送り、それぞれの数値がダイアラに渡される。幸運なことに電話線がつながっておらず、すぐに呼び出し音が開始する。もちろん向こう側の人間を叩き起こして、重い腰を上げさせた後、電話をとらせるのには時間がかかるけどね。
puredataファイル

リンク
Amplitude modulation http://en.wikipedia.org/wiki/Amplitude_modulation
In practice http://www.soundonsound.com/sos/mar00/articles/synthsecrets.htm
Modulation http://ccrma.stanford.edu/courses/220b/topics/modulation-synthesis/

Telephone bell synthesis 1
Practical Synthetic Sound Design

無口な人をいらつかせる雑音って?

あるハーモニクスの組み合わせは聴くのがちょっと辛い。調和的でなく、色がぶつかり合って視覚的に気持ち悪いのと同じ感じで僕らの感覚を苛つかせる。人の脳を最も邪魔する音のひとつは赤ちゃんが泣く音だ。実際ある音は気持ち悪くストレスに感じる音の全ての組み合わせを持っている。これらの音のぶつかりは不協和音と呼ばれる。組み合わせは、対になる音と整数の関係にない場合や因数や公倍数がない場合に、より不協和な音となる。素因数はここで僕らの役に立つ。もし2つの周波数が互いに素であれば、そいつらはとても不協和になる。2つ3つの不協和な周波数を使うだけで、僕らの注意を引きつける音を作れるんだ。勿論初期の電話を作った回路のデザイナー達はこれに気づいてた訳ではなく、コストを抑えるために少しの変調器で注意を引くように実験した結果そうなっただけだと思う。
どうやったら比較的不協和な音色の全ての集まりを簡単に作れるだろう?興味深い疑問を考えよう、あるサイン波を複雑なスペクトラムで増幅したらどうなるか?言い換えると、4つのハーモニクスを含んだAMトーンのソースを出力し、別のサイン波で増幅したら何が起こるか?答えはもっと複雑なスペクトラムだ。複雑な音色のそれぞれのハーモニックは加算され900Hzの新しいサイン波によって増幅される。1000Hzと300Hzから始めて1900Hz,100Hz,1200Hz,600Hz,2200Hz,400Hz,1600Hzと200Hzに加えて元々の1000Hz,300Hz,1300Hz,700Hzそして900Hzの要素。わお!たった3つのオシレータと2つの増幅ブロックでこんなに複雑な信号が作れたよ!

じゃあセグメントに分けられた着信音について考えよう。決まった間隔で再生したり止めたりすると、その音はより聴かれるようになる。というのも、僕らは絶え間ない音よりも、変化を聴く傾向にあるからだ。これは一般常識だけど、BigandとMcAdamsのデモによる研究が参考になるだろう。実際のところ、一般なニューラルシステムはほとんど変化しない値はあまり知覚しない。そしてそれが視覚、聴覚、触覚、味覚、嗅覚のどれであれ、ある質や量が実際私たちが知覚したものだ。今言っているのは”安定した音色”であることを忘れないで。どんなオーディオ信号だって定義によれば実際は変化する量なんだ。ということで、僕らの次のステップはチャンクの中に作った安定したスペクトラムを壊し、変調に再利用する。とても遅い周期でスイッチのオンオフを切り替える矩形波で音色を変調させる。

矩形波を作るには、クリッピングと呼ばれるちょっとしたトリックを使う。[clip~]要素は2つの境界内、もしくは閾値以下である限り、信号を変化させないで通す。いったん信号が閾値を超えたら、正であろうと負であろうと、その最大値または最小値にクリップされ固定される。サイン波を増幅してアシンメトリカルにクリップさせた場合、矩形波を使ったレベルコントロールみたいなことができる。



Telephone bell synthesis 1
Practical Synthetic Sound Design

変調(AM)

えっと、電話はかけられるようになったんだけど、誰かが呼んでるってことを知るための音がないよね。さあ"変調"と呼ばれる新しいテクニックに移ろう。僕らは既にオーディオを増幅する要素を[*~]知ってる。2つのサイン波を足し合わせるんじゃなくって掛け合わせてみたらどうなる?これが変調だ。変調は新しいハーモニクスを加える、そしてそれは最初の2つの周波数とは異なったものだ。2つのオリジナルの周波数は出力された信号にも聴き取れるものだけど、他にも得られるということ。でも新しい周波数はランダムじゃなくて、ソースとなった信号と数学的な関係を持つ。どうやって?そうだな、変調を使うとたいていベースの周波数について対称的なハーモニクスが加わる。そしてシンプルな増幅やAM(振幅変調)はソースの和や差なんだ。言い換えれば、1200Hzと200Hzの成分をひとつにつないだとき、1000Hz(1200-200)ともうひとつ1400Hz(1200+200)を得るってこと。ピュアなAMはうってつけだね。信号Fを信号Mで変調すると、F+MとF-Mの2つの新しいハーモニクスを得る。これを聴くか、PureDataのパッチをダウンロードして下の図の出力と比べてみて。



ピュアデータファイル.pd
オーディオ.mp3

ちょっとずつベルの音らしくなってきたね。けどまだまだだ。呼び出し音の実例はもっとリッチで、沢山の周波数を含んだ複雑なスペクトラムを持ってる。変調を使って単なるランダムないくつかの新しい周波数を作り出す前に何故僕らがある特定の種類のスペクトラムを選ぶのかについて考えよう。呼び出し音の模倣に挑戦するひとつの方法は、ベルハンマーの効果を再生成することだ。初期の機械的なベルはソレノイドを内蔵していて、アーム付きの磁気ブザーがベルを固定する錘に付けられていた。振動の周波数はたいてい8Hzから20Hzだった。この周波数での変調はさえずりのような効果をもたらし、本物の電気機械仕掛けのベルの音と全く似ていないこともなかった。DTMFトーンもまた、聴いていて楽しかったけど、あれは技術的な機能としてちゃんと動くようデザインされた結果得られたもの。逆に呼び出し音はワイヤーを通して運ばれるためではなく、明確に復調され、どちらかと言えば人間の注意を引きつけるためにデザインされた音だ。ある音が他の音より人の注意をより引きつけるってことはどのようにして起こり、何故起こるのだろう?

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/