1

I initialize an AVAudioPlayer instance:

NSString* path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"wav"];

AVAudioPlayer* player =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; //Returned object not nil, indicating that the file has loaded successfully


BOOL b = [player prepareToPlay]; //returns TRUE

BOOL b2 = [player play]; 
//returns TRUE, goes immediately to the next line since asynchronous


[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]; //wait 1 sec

printf("%10.4f\n",player.duration); //duration is 2s

printf("%10.4f\n",player.currentTime); //position remains 0

/* There is no sound output, player is also stuck since position==0 */

Does anyone know why the AVAudioPlayer is not responding? Is there something that I am overlooking while initializing, playing the audioplayer? Boilerplate code maybe?

I am running this on the iPhone simulator. Also, AudioServicesPlaySystemSound() works for the same file, which is puzzling, but this indicates that sound playback might work with AVAudioPlayer as well.

4

2 に答える 2

2

私は2つの簡単な提案があります:

  1. そのパスが実際にデータを提供するかどうかを確認してください。[[NSData alloc] initWithContentsOfFile:path]を使用してNSDataオブジェクトを割り当て、デバッガーでそれを調べて、実際にそのwavファイルをロードしているかどうかを確認します。

  2. AVAudioPlayerを使用するサンプルプロジェクトをここに作成しました:AVAudioPlayerの例。コードはあなたのものとほとんど同じなので、私が想像できる唯一のことはあなたのデータに問題があるということです。

それらをチェックして、どこにでも行くことができるかどうかを確認してください!

于 2009-07-29T05:26:37.073 に答える
2

私はちょうど同様の問題を抱えていました。同じソリューションかどうかはわかりませんが、私のアプリケーションは iPhone を介してオーディオを録音し、それをユーザーに再生します。

オーディオ セッションにデータを記録することを伝えることで、正しいことをしていると思ったので、次のことを行いました。

[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

この設定を使用すると、再生はシミュレーターでは機能しましたが、デバイスでは機能しませんでした.... didFinishPlaying イベントは決して発生しませんでした。

オーディオ再生が正しく機能するようになったので、この行が必要ないことに気付いたので、この行を削除しました。今、私はなぜそれがとても静かなのかを理解する必要があります:)

ポール

于 2009-07-31T15:55:59.763 に答える