如何用AVAudioPlayer从时间t1到t2在Xcode中播放mp3文件

我不知道是否有一个更优雅的方式播放AVAudioPlayer类的MP3文件,从t1到t2时间,而不使用NSTimers?

AVAudioPlayer有一个方法playAtTime:它负责处理t1 ,但是在特定的时间( t2 )没有简单的方法来停止播放。

截至iOS8 AVFoundation有新的API,如AVAudioEngineAVAudioPlayerNode 。 您可能会发现实现AVAudioPlayerNode更适合您的需求,因为它有一个名为的方法

 - scheduleSegment:startingFrame:frameCount:atTime:completionHandler: 

这是播放audio文件的一部分。

我在代码下面testing,它在t1和t2时间内完美工作。 但是别忘了在你的课堂上定义AVAudioEngine *engine

 - (void) playAudioWithinT1: (float) t1 andT2:(float) t2{ //t1 and t2 are the seconds to play audio in between NSError *error; NSURL *urlForSoundFile; float startingFrame; float framesToPlay; NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"_preview" ofType:@"mp3"]; urlForSoundFile = [NSURL fileURLWithPath:audioPath]; engine = [[AVAudioEngine alloc] init]; AVAudioPlayerNode *player = [[AVAudioPlayerNode alloc] init]; [engine attachNode:player]; AVAudioFile *file = [[AVAudioFile alloc] initForReading:urlForSoundFile error:&error]; startingFrame = (t1 * file.processingFormat.sampleRate); framesToPlay = (t2 * file.processingFormat.sampleRate - startingFrame); AVAudioMixerNode *mainMixer = [engine mainMixerNode]; [engine connect:player to:mainMixer format:file.processingFormat]; [player scheduleSegment:file startingFrame:startingFrame frameCount:framesToPlay atTime:nil completionHandler:nil]; [engine startAndReturnError:&error]; [player play]; 

}