gpt4 book ai didi

objective-c - xcode objective-c - 当我调用 2 个方法时 - 只有最后一个调用的方法运行而第一个被跳过

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:50:14 26 4
gpt4 key购买 nike

-(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) 作为播放器,当您发送 NextHeadingNextHeadingMeaning 消息时, audio 首先用你的 sound_1.mp3 文件初始化(如果 mp3 文件很大,这将需要几秒钟),然后在下一刻(你的第一个 mp3 文件可能没有初始化,或者已启动,但在下一条消息后停止),您使用另一个 mp3 文件(sound_2.mp3)重做初始化操作,最后,当第二个 mp3 文件初始化完成时,audio 播放 sound_2 .mp3。这就是您认为 NextHeading 被跳过的原因。

所以,为了解决这个问题,你可以使用一个NSMutableArray iVar(例如audioPlayers),并为两个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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com