2012-01-09 8 views
6

私は音楽ゲームを作っています。ユーザーが音符を押すと音が鳴ります。ユーザーが押すと即座に再生する必要があるため、音楽に合っているかどうかを確認することができます。しかし、音が遅れているかのように感じます。特に、ノート・プレスが速くなると感じます。Cocos Denshion:音楽と同期して効果音を演奏する

私の背景.m4a音楽ファイルは、AVAudioPlayerで再生されます。私はcurrentTimeプロパティにアクセスできるので、これをCocos Denshionよりも使用することにしました。私は間違っているかもしれないが、私はCocosDenshionでこれにアクセスできるとは思っていない。

非常に短い(1秒未満).wavファイルを作成しました。私は呼んCCTouchesBeganで、効果音を再生するためにその後

[[SimpleAudioEngine sharedEngine] preloadEffect:@"Assist.wav"]; 

[[SimpleAudioEngine sharedEngine] playEffect:@"Assist.wav"]; 

それがポイントのタイミングと賞のユーザーを決定するために自分のコードを呼び出した後、私はinitの私の効果音をプリロード。なぜそれが遅れているのかもしれないか、あるいは音楽に間に合うように効果音を演奏する良い方法はありますか?

EDIT:最近Iveは結果を出さずにいくつかのことを試しました。最初に、彼らは曲の中の適切な時間に来たので自動的に音を鳴らそうとしました。まだ遅れがあったので、それはタッチイベントが遅いとは思わない。 3つのサウンドライブラリも試しました。

しかし、私がシミュレータで走ったとき、それは遅くないようでした。誰にもアイデアはありますか?私は実際には取ることができません...

+0

あなたは、CPUの負荷とGPUの負荷に関する情報を実行し、そしてX-コード楽器ているかのデバイスに関する情報を提供し、また演奏しているどのように多くの音を同時にのアイデア、そしてどのような形式であるしてくださいバックグラウンドミュージック(1つがあると推測する)。 –

答えて

1

このコードを避ける必要があります: - [[SimpleAudioEngine sharedEngine] preloadEffect:@ "Assist.wav"];アプリの開始と

あなたはこのコードを書き込むことによって、あなたのフレームワークSimpleAudioEngineをロードする必要があります: -

// SimpleAudioEngine * palySound。 .hファイル内にオブジェクトを作成しました。 palySound = [SimpleAudioEngine sharedEngine];

あなたが書き込むことができるサウンドを再生するときはいつでも:[palySound playEffect:@ "Assist.wav"];

+0

返事をありがとう。私はこれを試みたが、それは何か異なるように見える。音はまだ遅れている。 – Arbel

+0

didFinishLaunchingWithOptionsでappelegateでSimpleAudioEngineをロードしましたか... –

+0

ええ、違いはありません。たぶんタッチイベントが遅いですか? – Arbel

0

SoundEngineで何をやっているのか分かりませんが、私自身の経験では、サウンドを再生するのが遅れないようにするには、AVAudioPlayerを各サウンドファイルに割り当ててくださいAudioQueuesを使って)。

ここでは一例です:

は、あなたがあなたの現在のビューコントローラでAVAudioPlayer *assistPlayer;を持っていると仮定しましょう。

NSURL *wavURL = [[NSBundle mainBundle] URLForResource:@"Assist" withExtension:@"wav"]; 
assistPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:wavURL error:nil]; 

次に、あなたがファイルを再生したいあなたIBActionで、ちょうどん:あなたは任意の遅れを取得するべきではありません

[assistPlayer play]; 

あなたviewDidLoadサウンドでそれを初期化するには

+0

試してみましたが、違いはありません。実際にはパフォーマンスが低下しました。 DenshionはopenAL用のかなり薄いラッパーです。 – Arbel

+0

wavファイルのサンプリング周波数とビット深度は何ですか?あなたはそれを再サンプリングして、ちょうど16ビットを使用しようとしましたか? –

0

Finchを試しましたか?低レイテンシーのサウンドを再生すると主張しており、それはOpenALのラッパーでもあります。それ以外

は、私は本当にOpenALのを経験してないんだけど、あなたの遅れのための2つの理由を考えることができます。

  1. メインスレッドがビジー状態です - 他に、そこから作業をオフロードするようにしてください スレッド。

  2. おそらく、OpenALはバッファーが大きすぎるため、パイプラインはサウンド全体をバッファー(またはその大きなチャンク)にロードし、その後は再生を開始します。

+0

ええと、私はフィンチに試しましたが、デンシオンと同じ結果がありました。私はこれを非常に簡単なサンプルプロジェクトhttps://github.com/so3arbelnox/soundtestで再現することもできました – Arbel

関連する問題