objective-c - xcode Objective c - 当我调用 2 个方法时 - 仅运行最后一个调用的方法,并跳过第一个方法

标签 objective-c ios avfoundation avaudioplayer

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{

    [self NextHeading]; // this plays an mp3 file

    [self NextHeadingMeaning]; // this plays an Mp3 file

}

仅调用[self NextHeadingMeaning]方法,每次都会错过NextHeading方法

-(IBAction) NextHeading{ 
    [audio stop]; 

    NSString *Filename = [[NSString alloc]initWithFormat:@"CH%@S%@",Heading,Meaning];
    Filepath = [[NSBundle mainBundle]pathForResource:Filename ofType:@"mp3"]; 

    audio = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:Filepath] error:NULL]; 

    audio.delegate = self; 
    [audio play]; 
    [Filename autorelease]; 
}

-(IBAction) NextHeadingMeaning { 
    [audio stop]; 

     NSString *Filename = [[NSString alloc] initWithFormat:@"CH%@S%@",bold**Chapter**bold, Meaning]; 
     Filepath = [[NSBundle mainBundle]pathForResource:Filename ofType:@"mp3"]; 

     audio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:Filepath] error:NULL]; 

     audio.delegate = self; 
     [audio play]; 
     [Filename autorelease]; 
}

为什么会发生这种情况以及如何解决?

请多多指教,先谢谢了。

最佳答案

您刚刚使用了一个 iVar ( audio ) 作为玩家,当您发送 NextHeading 时& NextHeadingMeaning消息,audio用你的 sound_1.mp3 初始化首先文件(如果 mp3 文件很大,则需要几秒钟),然后在下一刻(您的第一个 mp3 文件可能未初始化,或已初始化,但在下一条消息后停止),您用另一个文件重做初始化操作mp3 文件 (sound_2.mp3),最后,当第二个 mp3 文件初始化完成时,audio播放sound_2.mp3 。这就是为什么您认为 NextHeading被跳过。

因此,要解决这个问题,您可以使用 NSMutableArray iVar(例如 audioPlayers ),并创建本地 audio对于两者NextHeading & NextHeadingMeaning ,并将其推送至 audioPlayers .

而且我认为如果可以的话最好预加载声音文件。 :)


编辑:

有一个playAtTime:方法而不是 play ,你可以通过这个方法延迟第二个音频播放器的播放时间,就像这样:

[audioPlayer playAtTime:(audioPlayer.deviceCurrentTime + delay)];

delay以秒为单位 ( NSTimeInterval )。

关于objective-c - xcode Objective c - 当我调用 2 个方法时 - 仅运行最后一个调用的方法,并跳过第一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266900/

相关文章:

ios - NSNumber 原始值相等与 isEqualToNumber 与 Obj-C 文字

ios - 运行时 Swift 后根据边距约束获取 View 高度

iphone - 裁剪 AVCaptureSession 捕获的图像

xcode - 每次运行该应用程序时,如何一次运行一个循环的声音文件?

ios - Objective-C 如何使用 AVFoundation 向视频添加叠加层?

iphone - 没有已知的选择器'JSONValue'实例方法

ios - 迁移核心数据存储时的错误消息

ios - 如何在 PodioKit 中设置元素的邮箱/电话

ios - DAE 文件解析错误

ios - 如何区分 CardDAV 联系人来源?