Closed22

UnityEditorで音を鳴らす

ねこみみだいまおうねこみみだいまおう

Editorで音を鳴らしたい。具体的に言うと複数Platform向けのABを連続でビルドしているときに逐次音を鳴らしたい。であとcsだけ追加でAudioClipは追加したくない。

ねこみみだいまおうねこみみだいまおう

AudioClipひとつもないUnityプロジェクトが果たして存在するのか? という気もするが、なるべく使いまわしたいのでAudioをつけたくない。cs入れるだけでOKになるのがいい。

ねこみみだいまおうねこみみだいまおう

中身ほぼ見てないけどさんかくかんすう? とかいうやつを使うっぽいな?
サインとかいうのが三角関数なのは知ってんだよ俺はよ

ねこみみだいまおうねこみみだいまおう

よく考えたら音声合成とか通話とかはみんなこれ使うのか。じゃあ充実も当然か。
でもこれ……このサンプル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;
}

適当に音が鳴るの楽しくて遊んじゃうけどそういうのじゃねんだよな

ねこみみだいまおうねこみみだいまおう

しらべた! 結果!
動的に生成したAudioClipはUnityEditorのAudioUtilのPlayClipでは再生できないのであった。

おしまい。

ねこみみだいまおうねこみみだいまおう

そういえばやってらんねー! となって終わりました。
理由はこんな感じです。

  • Editorで音を再生するためのAudioUtilはあくまでも生成済みでプロジェクトに登録されているAudioClip、つまり.metaが生成されているものしか再生できない。
  • 動的に生成したAudioClipはだめ。
  • そもそも、AssetBundleをPlatformを変えながらビルドする場合、1つのPlatformが終わるたびに音が途切れる。
  1. ビルドが終わる
  2. 音を鳴らす
  3. 次のPlatform向けのビルドを始める
  4. 再生中の音源ファイルがswitchPlatformによって読み込まれなくなるので音が途中で途切れる
このスクラップは2021/11/22にクローズされました