gpt4 book ai didi

objective-c - Xcode 4.2和ARC的iOS AVAudioPlayer双重声音播放问题

转载 作者:行者123 更新时间:2023-12-01 17:27:34 25 4
gpt4 key购买 nike

我一直在努力寻找解决程序中奇怪声音问题的方法。我将在下面发布代码。作为简要说明,我有一个传递变量的函数,它接受该变量并确定应播放的声音类别,在该函数中,我有多种到达声音类别,因此我使用arc4random语句,然后通过switch语句运行。一直在发生的是,它将播放case语句中的两种声音,而不是只播放一种声音,大多数情况下,如果我第二次按下按钮两次调用它,它将第一次播放声音,而另一种播放新声音。彼此的顶部相同,但稍有延迟。我在交换机中设置了一个断点,当它两次播放时,它只能通过一次交换机,这确实令人困惑。需要注意的一点是,在我确实播放另一种声音之前,但是它使用了单独的AVAudioplayer和path变量,因此这不会成为问题,因为它永远不会播放第二种声音,而不会播放我正在播放的另一种声音。当我按下按钮时,我只会调用一次函数,所以我不确定为什么会这样做。我试过将* path和* avaudioplayer变量放在函数中,但根本无法播放。在这里搜索,好像弧在获得播放机会之前就已对其进行了分配。我最终尝试将其作为全局变量放在.m文件的顶部,然后仅设置实际路径并在开关内播放声音。声音会播放,但会播放两次。.希望有人可以帮助我。我尝试将avaudioplayer定义也设置为属性,并且做同样的事情。这是我的代码段。在此先感谢...

在.m文件中

// Just below my synthesize statements
NSString *path;
AVAudioPlayer *theSound

// My code that I call when the button is pressed
[self playVoice:@"buyVoice"];

// The playVoice function
- (void)playVoice:(NSString*)voiceNum;

if ([voiceNum isEqualToString:@"buyVoice"]) // Bought an Item Time for a voice
{
// play coin sound
[self coinSound];

// play random buy phrase and coin sound
int phraseNumber = 0;
phraseNumber = arc4random() %(3);

switch (phraseNumber)
{
case 0:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy1" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}

case 1:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy2" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}

case 2:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy3" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}

case 3:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy4" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}
}
}

最佳答案

在您播放音频之前设置此代码

这会将播放器重置为开始:

[theSound setCurrentTime:0.0];
[theSound play];

尝试这个

关于objective-c - Xcode 4.2和ARC的iOS AVAudioPlayer双重声音播放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694154/

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