AVAudioPlayer Play/Pause/Stop 三个不同按钮上的本地音频文件

AVAudioPlayer Play/Pause/Stop local audio file on three different buttons

我想要play/pause/stop本地音频文件。所有功能的按钮都不同。查看随附的屏幕截图以供参考。

下面是我的点击事件,

-(IBAction)click_Play:(id)sender {
        NSString *path;
        NSURL *url;

        //where you are about to add sound
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

        path =[[NSBundle mainBundle] pathForResource:@"MySong" ofType:@"mp3"];
        url = [NSURL fileURLWithPath:path];

        player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
        [player setVolume:1.0];
        [player prepareToPlay];
        [player play];

}

-(IBAction)click_Pause:(id)sender {
    [player pause];
}

-(IBAction)click_Stop:(id)sender {
    [player stop];
}

在这里,我遇到了暂停功能方面的问题。当我再次点击播放按钮时暂停音频后。它从头开始播放,而不是在我暂停的地方播放。任何解决方案? 提前致谢!

不要在播放按钮操作中一次又一次地创建 AVAudioSessionAVAudioPlayer 的实例。因此,保持简单,在 viewDidLoad

中创建 AVAudioSessionAVAudioPlayer 的实例
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *path;
    NSURL *url;

    //where you are about to add sound
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

    path =[[NSBundle mainBundle] pathForResource:@"MySong" ofType:@"mp3"];
    url = [NSURL fileURLWithPath:path];

    player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
    [player setVolume:1.0];
    [player prepareToPlay];
} 

-(IBAction)click_Play:(id)sender {
    [player play];
}

-(IBAction)click_Pause:(id)sender {
    [player pause];
}

-(IBAction)click_Stop:(id)sender {
    [player stop];
}

编辑: 当你改变轨道时调用这个方法。我永远不会建议一次又一次地创建对象实例

-(void)changeTrackWithPath:(NSString *)path{
    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:path]];
    [player replaceCurrentItemWithPlayerItem:playerItem];
    [player play];
}

将您的代码更改为:

-(IBAction)click_Play:(id)sender {
    if (!player)
    {
        NSString *path;
        NSURL *url;

        //where you are about to add sound
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

        path =[[NSBundle mainBundle] pathForResource:@"MySong" ofType:@"mp3"];
        url = [NSURL fileURLWithPath:path];

        player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
        [player setVolume:1.0];
        [player prepareToPlay];
        [player play];
    }
    else {
        [player play];
    }
}