UnityEditorで音を鳴らす
Editorで音を鳴らしたい。具体的に言うと複数Platform向けのABを連続でビルドしているときに逐次音を鳴らしたい。であとcsだけ追加でAudioClipは追加したくない。
AudioClipひとつもないUnityプロジェクトが果たして存在するのか? という気もするが、なるべく使いまわしたいのでAudioをつけたくない。cs入れるだけでOKになるのがいい。
これなぜか自分の環境だと音が鳴らない。できるだけ複数の音を鳴らしたいので選択肢には入らないが……。
黒魔術でしか音が鳴らせないとは思わなかった
動的にAudioClipを生成してそうなリンク
中身ほぼ見てないけどさんかくかんすう? とかいうやつを使うっぽいな?
サインとかいうのが三角関数なのは知ってんだよ俺はよ
たぶんこれが最も近いのかな
引数の並びがやべーやつ感出してるのに公式のリファレンスが嫌に充実してる……
よく考えたら音声合成とか通話とかはみんなこれ使うのか。じゃあ充実も当然か。
でもこれ……このサンプルforループでよくない? なんでwhileループ? 深く解析する気はないけどなんかこわい……こういう下回りの人の感じからしてforループ書くのめんどかったとかそういう感じか?
var clip = AudioClip.Create("tmp", samplerate * 2, 1, samplerate, false);
var data = new List<float>();
for (int i = 0; i < samplerate * 2; i++)
{
data.Add(UnityEngine.Random.value);
}
clip.SetData(data.ToArray(), 0);
とりあえずノイズが鳴らせるようにはなった
聞けばこんなんあったな……ってなるな
private float[] CreateWaveSin()
{
var data = new float[samplerate * second];
for (var count = 0; count < data.Length; count++)
{
data[count] = Mathf.Sin(count);
}
return data;
}
private float[] CreateWaveNoko()
{
var data = new float[samplerate * second];
for (var count = 0; count < data.Length; count++)
{
var amari = (count % 1000);
data[count] = amari > 500 ? 1 : 0;
}
return data;
}
適当に音が鳴るの楽しくて遊んじゃうけどそういうのじゃねんだよな
計算式はこういう感じか
なんかドレミファソラシド作れるようになった
和音の合成よくわかんねえから足して3で割ったらなんかそれっぽくなった!
ぼんやり波形の概要が見えてきた
こ……こんなじかんまでわたしはなにをしていた……?
しらべた! 結果!
動的に生成したAudioClipはUnityEditorのAudioUtilのPlayClipでは再生できないのであった。
おしまい。
ちょっとだけバージョンアップしたけど、どうしようこれ……
そういえばやってらんねー! となって終わりました。
理由はこんな感じです。
- Editorで音を再生するためのAudioUtilはあくまでも生成済みでプロジェクトに登録されているAudioClip、つまり.metaが生成されているものしか再生できない。
- 動的に生成したAudioClipはだめ。
- そもそも、AssetBundleをPlatformを変えながらビルドする場合、1つのPlatformが終わるたびに音が途切れる。
- ビルドが終わる
- 音を鳴らす
- 次のPlatform向けのビルドを始める
- 再生中の音源ファイルがswitchPlatformによって読み込まれなくなるので音が途中で途切れる
とはいえ副作用で作ったこいつはそこそこ使いでがあるのと、毎回やって毎回忘れる音関係のことをまた思い出せたのでよかったかなと思いました。
おしまい。