如何用AVAudioPlayer从时间t1到t2在Xcode中播放mp3文件
我不知道是否有一个更优雅的方式播放AVAudioPlayer类的MP3文件,从t1到t2时间,而不使用NSTimers?
AVAudioPlayer有一个方法playAtTime:
它负责处理t1 ,但是在特定的时间( t2 )没有简单的方法来停止播放。
截至iOS8 AVFoundation有新的API,如AVAudioEngine和AVAudioPlayerNode 。 您可能会发现实现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];
}