ファイル プレーヤー オーディオ ユニットを使用してオーディオ ファイルを再生、一時停止、停止するプログラムがあります。これを達成する方法は、ファイル プレーヤーのオーディオ ユニットを初期化してファイルを位置 0 で再生し、ユーザーが一時停止ボタンを押したときに AUGraph を停止し、現在の位置をキャプチャして、その位置を開始位置として使用することです。ユーザーが再生ボタンを押したとき。すべてが正常に機能していますが、3、4 回一時停止してから再生するたびに、一時停止したポイントの 0.5 秒から 1 秒前に曲が再生され始めます。
なぜこれが起こっているのかわかりません。何か考えがある人はいますか?ここに私のコードの簡略版があります。
//initialize AUGraph and File player Audio unit
...
...
...
//Start AUGraph
...
...
...
// pause playback
- (void) pauseAUGraph {
//first stop the AuGrpah
result = AUGraphStop (processingGraph);
// get current play head position
AudioTimeStamp ts;
UInt32 size = sizeof(ts);
result = AudioUnitGetProperty(filePlayerUnit,
kAudioUnitProperty_CurrentPlayTime, kAudioUnitScope_Global, 0, &ts,
&size);
//save our play head position for use later
//must add it to itself to take care of multiple presses of the pause button
sampleFrameSavedPosition = sampleFrameSavedPosition + ts.mSampleTime;
//this stops the file player unit from playing
AudioUnitReset(filePlayerUnit, kAudioUnitScope_Global, 0);
NSLog (@"AudioUnitReset - stopped file player from playing");
//all done
}
// Stop playback
- (void) stopAUGraph {
// lets set the play head to zero, so that when we restart, we restart at the beginning of the file.
sampleFrameSavedPosition = 0;
//ok now that we saved the current pleayhead position, lets stop the AUGraph
result = AUGraphStop (processingGraph);
}