ちょび日記

明日は明日の風が吹く

2015-12-29

A-Bループ/Intro+A-Bループを実現するには


  • そもそもUnityでの途中ループは(普通のやり方では)できない。そういう機能がない
    • 曲を頭とリピート部分の二つの波形に分割してAudioClipで読み込みPlayScheduledやPlay(delay)させることでうまくつなげられる
    • 実はWAVでループポイントを仕込めばループしてくれる(なんでやねん)、が今更ループポイント指定できる波形エディタは少数。
  • つなぎ目がきになるのはプログラム的な問題ではなく波形の切り方、スケジューリングの問題
using UnityEngine;
public class RepeatExample : MonoBehaviour {
    AudioClip intro;
    AudioClip repeat;
    AudioSource a;
    AudioSource b;
    private float offset = 2f;
    // Use this for initialization
    void Start () {
        //イントロ
        intro = Resources.Load<AudioClip>("victory_intro");
        
        //ループ部分
        repeat = Resources.Load<AudioClip>("victory_repeat");
        a = gameObject.AddComponent<AudioSource>();
        a.playOnAwake = false;
        a.clip = intro;
        b = gameObject.AddComponent<AudioSource>();
        b.playOnAwake = false;
        b.clip = repeat;
        b.loop = true;
        a.PlayScheduled(AudioSettings.dspTime + offset);
        
        //http://www.slideshare.net/IGDAJ_SigAudio/sigaudio6-unity
        //p37参照
        //ちゃんと波形が0の位置でぶった切れてると違和感を感じない。
        //つなぎを目立たせない工夫があると確実だけど別に必要ではない
        b.PlayScheduled(AudioSettings.dspTime + offset + ((float)intro.samples / (float)intro.frequency));
    }
}

波形の作り方

適当なループもの音源を拾ってくる。検証であればゲームのサントラとかでIntro+ループぐらいいなっているのを探すと良い。 以下波形編集ソフトを使った編集。

img

  • イントロ部分を適当に切る *波形編集ソフトで一回目のループの部分より後をざっくり削除する

img

  • 一回目のループの最後で拍に合わせて程よく切る。
  • なんとなく位相を考慮しながら0の振幅の位置で切る。この状態できれいにループが回っていればOK

よくある問題

  • ループ時にぶつって音が鳴るのはなぜ?

    • 変なサンプルで切っているからノイズがのります。ループ開始、終了ができるだけきれいにゼロでつながるようにしましょう。
    • ぶっちゃけ多少サンプルずれたとしても44.1Khz分の数秒の誤差だから気づけないです。
  • ループ時に前小節のリリース音が入って一発目の再生が不自然でうs

    • 単純なIntro+A-Bループではなくイントロ+一発目。以降A-Bループにすれば綺麗にはなる。
    • 要するに[イントロ][初回][ループ用]という構成にすること。
    • 曲を作る観点でいえば最後の小節のリリース音ながくしないようにつくるべし(ぇー



Copyright© 2016, chobie All rights reserved.