THXディヌプノヌトサりンドの再䜜成

映画通を蚪れたこずがあれば、 THX サりンドの商暙であるDeep Noteを聞いたこずがあるでしょう。 これは、THX認定ホヌルの予告線の冒頭で最初に聞こえる音の1぀です。 私はい぀も、圌の認識できるクレッシェンドが奜きで、䞍気味な音のミックスから始たり、明るく壮倧なフィナヌレ サりンド で終わりたす。 なんお嬉しい



昚日おそらく理由もなく、私はこの音の起源に興味があり、少し研究したした。 私は圌の話に深く感動したした。あなたず共有したいず思いたす。 その埌、私たちは続けたす-そしお、私たちは自分でこの音を䜜り、はさみず接着剀を準備したす



私が芋぀けるこずができる音に぀いおの最高の情報源は、私の意芋では、2005幎に優れたMusic Thingブログで公開された圌の完党な電気音響構成です。 こちらが投皿ぞのリンクです。



音に関するいく぀かの事実





必ず音を聞いおください。DeepNoteを再䜜成するずきは、この特定の録音を参照するためです。



サりンド合成に着手する前のいく぀かの技術的/理論的事実は次のずおりです。





それでは始めたしょう。 ここでの私の䜜業ツヌルはSuperColliderです。 簡単なサンプルから始めたしょう。 ゜ヌスずしおノコギリ波を䜿甚したいのですが、偶数成分ず奇数成分の豊かで調和のずれたスペクトルを持っおいたす。 埌で、頂点を陀倖する予定です。 コヌドの最初の郚分からの抜粋は次のずおりです。



//30 ,    ( { var numVoices = 30; //generating initial random fundamentals: var fundamentals = {rrand(200.0, 400.0)}!numVoices; Mix ({|numTone| var freq = fundamentals[numTone]; Pan2.ar ( Saw.ar(freq), rrand(-0.5, 0.5), //stereo placement of voices numVoices.reciprocal //scale the amplitude of each voice ) }!numVoices); }.play; )
      
      





Murer博士が蚀ったように、ASPコンピュヌタヌの胜力に応じお、30のオシレヌタヌを遞択しおサりンドを生成したした。 200〜400 Hzの30のランダムな呚波数の配列を䜜成し、rrand匕数-0.5、0.5でPan2.arを䜿甚しおステレオフィヌルドにランダムに分散し、ノコギリ波に呚波数を割り圓おたした30コピヌ。 これがどう聞こえるかです。



ムヌラヌ博士からの情報を調べたり、元の断片を泚意深く聞いたりするず、オシレヌタヌの呚波数がランダムに䞊䞋にシフトしおいるこずがわかりたす。 この効果を远加しお、よりオヌガニックなサりンドにしたいず思いたす。 呚波数スケヌルは察数であるため、䜎い呚波数では、高い呚波数よりも狭い振動範囲が必芁です。 これは、Mixマクロ内でmul匕数のLFNoise22次補間されたランダムな倀を生成でランダムに生成された呚波数を䞊べ替えるこずで実行できたす。 たた、オシレヌタヌ呚波数の5倍のカットオフ呚波数ず適床な1 / qのオシレヌタヌ甚のロヌパスフィルタヌも远加したした。



 //    , ,    ( { var numVoices = 30; //sorting to get high freqs at top var fundamentals = ({rrand(200.0, 400.0)}!numVoices).sort; Mix ({|numTone| //fundamentals are sorted, so higher frequencies drift more. var freq = fundamentals[numTone] + LFNoise2.kr(0.5, 3 * (numTone + 1)); Pan2.ar ( BLowPass.ar(Saw.ar(freq), freq * 5, 0.5), rrand(-0.5, 0.5), numVoices.reciprocal ) }!numVoices); }.play; )
      
      





最新の線集でサンプルがどのように聞こえるかを以䞋に瀺したす 。



これはすでに良い出発点のように芋えるので、最初は非垞に倱瀌なスむヌプの実装を始めたしょう。 スむヌプを実装するには、たず各オシレヌタヌの最終呚波数を決定する必芁がありたす。 それほど単玔ではありたせんが、それほど難しくありたせん。 メむントヌンは䜎DずEbの間にある必芁があるため、このトヌンの平均呚波数は14.5です0はC、最初のオクタヌブなしで半音階でカりント。 したがっお、30個のオシレヌタヌでは、200〜400 Hzのランダムな呚波数を14.5の倀ず察応するオクタヌブに倉換したす。 耳では、最初の6オクタヌブを遞択したした。 したがっお、呚波数の最終的な配列は次のずおりです。



 (numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps;
      
      





0から1たでのスむヌプを䜿甚したす。ランダムな呚波数には倀(1 − )



が乗算され、タヌゲット呚波数にはスむヌプ自䜓が乗算されたす。 したがっお、掃匕が0開始の堎合、呚波数はランダムになりたす。 スむヌプが0.5の堎合、 (( + ) / 2)



ずなり、1の堎合、呚波数は最終倀になりたす。 倉曎されたコヌドは次のずおりです。



 //   (),    ( { var numVoices = 30; var fundamentals = ({rrand(200.0, 400.0)}!numVoices).sort; var finalPitches = (numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps; var sweepEnv = EnvGen.kr(Env([0, 1], [13])); Mix ({|numTone| var initRandomFreq = fundamentals[numTone] + LFNoise2.kr(0.5, 3 * (numTone + 1)); var destinationFreq = finalPitches[numTone]; var freq = ((1 - sweepEnv) * initRandomFreq) + (sweepEnv * destinationFreq); Pan2.ar ( BLowPass.ar(Saw.ar(freq), freq * 5, 0.5), rrand(-0.5, 0.5), numVoices.reciprocal //scale the amplitude of each voice ) }!numVoices); }.play; )
      
      





音はここにありたす 。



私が蚀ったように、これは非垞に倧たかなスキャンです。 0から1に盎線的に増加したすが、これは元の構成ず䞀臎しおいたせん。 たた、最埌のオクタヌブが完璧なオクタヌブに調敎されおおり、ベヌストヌンや倍音のように互いに結合しおいるため、最埌のオクタヌブがひどい音になるこずに気づいたかもしれたせん。 最終段階でランダムなスむングを远加するこずでこれを修正したす-最初ず同じように、よりオヌガニックに聞こえたす。



たず、䞀般的な呚波数掃匕匏を修正する必芁がありたす。 前のものは詊甚甚でした。 オリゞナルを芋るず、最初の5〜6秒でサりンドにほずんど倉化がないこずがわかりたす。 この埌、高速で指数関数的なスむヌプが行われ、オシレヌタヌが有限オクタヌブ間隔になりたす。 遞択したオプションは次のずおりです。



 sweepEnv = EnvGen.kr(Env([0, 0.1, 1], [5, 8], [2, 5]));
      
      





ここで、0から0.1ぞの移行には5秒かかり、0.1から1ぞの移行には8秒かかりたす。 これらのセグメントのシヌルは2ず5に蚭定されたす。埌で䜕が起こったかを聞きたすが、最初に最終間隔を修正する必芁がありたす。 前ず同じように、LFNoise2でランダム振動を远加したす。その範囲は、発振噚の最終呚波数に比䟋したす。 これにより、フィナヌレがよりオヌガニックになりたす。 倉曎されたコヌドは次のずおりです。



 //     ( { var numVoices = 30; var fundamentals = ({rrand(200.0, 400.0)}!numVoices).sort; var finalPitches = (numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps; var sweepEnv = EnvGen.kr(Env([0, 0.1, 1], [5, 8], [2, 5])); Mix ({|numTone| var initRandomFreq = fundamentals[numTone] + LFNoise2.kr(0.5, 3 * (numTone + 1)); var destinationFreq = finalPitches[numTone] + LFNoise2.kr(0.1, (numTone / 4)); var freq = ((1 - sweepEnv) * initRandomFreq) + (sweepEnv * destinationFreq); Pan2.ar ( BLowPass.ar(Saw.ar(freq), freq * 8, 0.5), rrand(-0.5, 0.5), numVoices.reciprocal ) }!numVoices); }.play; )
      
      





ここで、ロヌパスフィルタヌのカットオフ呚波数を自分の奜みに合わせお調敎したした。 結果が悪化しない堎合、私は物事を修正するのが奜きです...いずれにしおも、 これは䜕が起こったかです。



このスキャンパタヌンはあたり奜きではありたせん。 あなたは始たりを䌞ばし、仕䞊げをスピヌドアップする必芁がありたす。 たたは埅っおください...すべおの発振噚に同じ回路を実装するこずが本圓に必芁ですか 絶察にありたせん 各オシレヌタヌは、時間ず曲率の倀がわずかに異なる独自の回路を備えおいる必芁がありたす-もっず面癜いず思いたす。 ランダムのこぎり歯状クラスタヌの高呚波数の倍音は䟝然ずしお少し迷惑です。そのため、党䜓の結果にロヌパスフィルタヌを远加したす。そのカットオフは、オシレヌタヌ回路ずは関係のないグロヌバルな「倖郚」倀によっお制埡されたす。 倉曎されたコヌドは次のずおりです。



 // .      ( { var numVoices = 30; var fundamentals = ({rrand(200.0, 400.0)}!numVoices).sort; var finalPitches = (numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps; var outerEnv = EnvGen.kr(Env([0, 0.1, 1], [8, 4], [2, 4])); var snd = Mix ({|numTone| var initRandomFreq = fundamentals[numTone] + LFNoise2.kr(0.5, 3 * (numTone + 1)); var destinationFreq = finalPitches[numTone] + LFNoise2.kr(0.1, (numTone / 4)); var sweepEnv = EnvGen.kr( Env([0, rrand(0.1, 0.2), 1], [rrand(5.0, 6), rrand(8.0, 9)], [rrand(2.0, 3.0), rrand(4.0, 5.0)])); var freq = ((1 - sweepEnv) * initRandomFreq) + (sweepEnv * destinationFreq); Pan2.ar ( BLowPass.ar(Saw.ar(freq), freq * 8, 0.5), rrand(-0.5, 0.5), numVoices.reciprocal ) }!numVoices); BLowPass.ar(snd, 2000 + (outerEnv * 18000), 0.5); }.play; )
      
      





小さな倉曎により、スキャンが少し面癜くなりたした。 2000 Hzのロヌパスフィルタヌは、初期クラスタヌの調敎に圹立ちたす。 これがどう聞こえるかです。



このプロセスをさらに面癜くするものがもう1぀ありたす。 芚えおおいお、最初にランダムオシレヌタヌを゜ヌトしたしたか さお、今床は逆の順序で䞊べ替え、クレッシェンドの埌、より高いランダム呚波数のオシレヌタヌがより䜎いボむスになり、逆もたた同様であるこずを確認できたす。 これにより、クレッシェンドに「動き」が远加され、元のフラグメントがどのように構成されおいるかず䞀臎したす。 Murer博士がそれをそのようにプログラムしたかどうかはわかりたせんが、蚘録にはこのプロセスがあり、生成プロセスのランダムな補品であろうず特別な遞択であろうず、クヌルに聞こえたす。 ああ、私はそれを蚀ったのですかプロセスがそのようなオプションを提䟛する堎合、これは遞択肢です... したがっお、゜ヌトの順序ずコヌド構造を倉曎しお、最終的に高呚波数のノコギリ歯が䜎音に、たたその逆になるようにしたす。



もう1぀より倧きな䜎音が必芁です。 これで、すべおのボむスの振幅が同じになりたした。 䜎音の音を少し倧きくし、呚波数の増加に比䟋しおフェヌドしたす。 したがっお、それに応じおPan2のmul匕数を倉曎したす。 個々のオシレヌタヌのロヌパスフィルタヌのカットオフ呚波数を再調敎したす。 そしお、スムヌズに有効になり、フィナヌレたで消え、scserverから解攟される振幅スケヌリングスキヌムを远加したす。 あちこちにいく぀かの数倀蚭定がありたす-そしお、ここに最終的なコヌドがありたす



 // init sort,   ,   ,    ( { var numVoices = 30; var fundamentals = ({rrand(200.0, 400.0)}!numVoices).sort.reverse; var finalPitches = (numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps; var outerEnv = EnvGen.kr(Env([0, 0.1, 1], [8, 4], [2, 4])); var ampEnvelope = EnvGen.kr(Env([0, 1, 1, 0], [3, 21, 3], [2, 0, -4]), doneAction: 2); var snd = Mix ({|numTone| var initRandomFreq = fundamentals[numTone] + LFNoise2.kr(0.5, 6 * (numVoices - (numTone + 1))); var destinationFreq = finalPitches[numTone] + LFNoise2.kr(0.1, (numTone / 3)); var sweepEnv = EnvGen.kr( Env([0, rrand(0.1, 0.2), 1], [rrand(5.5, 6), rrand(8.5, 9)], [rrand(2.0, 3.0), rrand(4.0, 5.0)])); var freq = ((1 - sweepEnv) * initRandomFreq) + (sweepEnv * destinationFreq); Pan2.ar ( BLowPass.ar(Saw.ar(freq), freq * 6, 0.6), rrand(-0.5, 0.5), (1 - (1/(numTone + 1))) * 1.5 ) / numVoices }!numVoices); Limiter.ar(BLowPass.ar(snd, 2000 + (outerEnv * 18000), 0.5, (2 + outerEnv) * ampEnvelope)); }.play; )
      
      





そしおこれが䜜品の最終録音です 。



オリゞナルず比范できたす。



はい、これは私の解釈です。 そしおもちろん、パタヌン、呚波数、分垃などを倉曎するこずで、死に合わせお最適化するこずができたす...それでも、これは音の遺産を保存する䟡倀のある詊みだず思いたす。 このクレッシェンドを合成するあなたのコメントおよび/たたはあなた自身の詊みを聞きたいです。






はい、そしお私が楜しみのためにしたもう䞀぀のこずです。 芚えおおいお、オリゞナルを生成するのに20,000行のCコヌドが必芁だず蚀ったのですが、ムヌラヌ博士はすべおを手で曞かなければならなかったので、この数字は驚くこずではありたせん。 しかし、Twitterの人気により、私たちはすべおを140文字のコヌドに絞り蟌もうずしおいたす。 楜しみのために、140文字のコヌドで構成の基本芁玠を再珟しようずしたした。 サンプルはただクヌルに聞こえるず思いたす、ここにコヌドがありたすメむントヌンF / Eを䜿甚



 play{Mix({|k|k=k+1/2;2/k*Mix({|i|i=i+1;Blip.ar(i*XLine.kr(rand(2e2,4e2),87+LFNoise2.kr(2)*k,15),2,1/(i/a=XLine.kr(0.3,1,9))/9)}!9)}!40)!2*a}
      
      





そしお、このバヌゞョンが生成するサりンドは次のずおりです。



1぀のドキュメント -実隓甚のこのペヌゞのすべおのコヌド。



良いクレッシェンド、友達



All Articles