短い音を連続で鳴らしたい

AVAudioPlayerを使えばできるんだけど、
すでに再生中の場合は、currentTimeプロパティを変更して、
先頭から鳴らすようにしたものの、思ったようにいかなかった。

もう少し具体的に説明すると、ステージをクリアするたびに、
残っているタイムがスコアに加算されるアレを実装したい。

で、上記の方法で鳴らしてみると、
途切れ途切れになったり、鳴り始めのアタック感がなくなったり、
とにかく、それっぽくない。
音が短すぎるのか、再生間隔が短過ぎるのか原因は分かんない。

結論から言うと、波形編集で鳴らしたい間隔と同じ長さにしておいて、
鳴らす時にnumberOfLoopsプロパティに鳴らす回数をセットする。

もちろん、事前に鳴らしたい回数が分からないとダメだけど、
音の方は等間隔で連続再生される。
ただし、変更したスコアが描画されるタイミングと一致するかは別。
だって、描画の方はフレームレートが決まっているので。
でも、音の長さが分かっているので、SKActionwaitForDurationを使って、
それっぽく同期をとることはできる。
実際、少しずれるけど、そこまで違和感はないと思う。

という訳で、あと2人日くらい。

おしまい。

Leave a Comment