mooooogleコメントする上の動画を見て「すげえ!音ってこんな簡単に生成できんの!」と興味を持ったのでちょっとやってみようと思った。探してもライブコーディングできそうな既存の環境がなさげ。以前にUnityで波形を生成するという記事を見たことがあったので、Unity使ってライブコーディングするおもちゃを作ってみました。反映できるアセットがあるらしい。ライブコーディングを実現するアセットLivityけどどうせならランタイム上で動かしたい。それにタカイし・・なのでこのアセットを使うのは今回は見送りに。用いてコードのコンパイルが行えるらしい。おまけにexeも吐けるとか。今回の目的ではないけども便利そう。2.0環境でしか動作しない模様・・WEBを切り捨てるならいいと思いますが、どうせならWEB上で気軽にできたらいいなーと思ったのでこれを用いての実装もやめました。Unityのあらゆるコードがかけてしまうのでセキュリティー的にはあやしい気がしますが見なかったことにします。(ほんとはちゃんと構文解析して自前でやったほうがいいのかな?)ということで今回はJavaScriptのevalを使って実装してみます。C#とJavaScriptの連携JavaScriptを使うといいつつもやっぱ使い慣れてるC#で実装は行いたいのでコード実行部分はJavaScript、他はC#で実装したいところ。なるとJavaScriptとC#の連携を行う必要がありますが、結構楽でした。JavaScriptとC#間のアクセス呼び出される側のスクリプトをAssets/Plugins以下に置く呼び出す側、呼び出される側のスクリプトを任意のGameObjectに追加GetComponentでスクリプトを取得し、操作するAssets/Plugins以下に置かなくてはならないのが管理の都合上めんどくさいですね。呼び出し自体は特に不自由なくできるみたいです。関数やpublicなメンバへのアクセスもできました。Reference本来は出力されている音にリアルタイムにエフェクトをかけるためのものらしいですが、なにも出力されていない状態でもこの関数経由で音を生成することができます。■[Unity][Unity3d]音データをジェネレートする(頑張ればファミコンのピコピコ音も作れるよ)先ほどの動画のような記述をすることを目標に、実装してみます。以下、関連部分の抜粋です。data.Length;}OnAudioFilterReadが呼ばれるたびにバッファにデータを詰め込んでいきます。複数チャンネルある場合は同じ音をコピーしておきます。あとはデータをつめた分時間を進めておしまい。これで正弦波がつくれました。上記のスクリプトをカメラなどAudioListenerを持っているGameObjectに追加すると音がでます。今まで音作りとは無縁だったので自分で音がだせるとわりとうれしいですね。この波形計算の部分を外部に出して編集可能にしてみます。コメントをキャンセルメールアドレスが公開されることはありません。