2012-12-13 15 views
3

我试图在不同的时间播放不同的声音。基于按钮按下或定时器超时等。 这是代码。有关AudioQueue的XCODE AVAudioPlayer错误:请求从包含1152帧的缓冲区中修剪0 + 1676 = 1676帧

要播放声音功能:

-(void)myPlaySound:(NSString *)mySoundFile NumberOfLoops:(int)loopsCount ofType:(NSString *)fileType 
{ 


NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
              pathForResource:mySoundFile 
              ofType:fileType]]; 

myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil]; 

myAudio.volume = audioVolume; 

myAudio.delegate = self; 

myAudio.numberOfLoops = loopsCount; 
[myAudio prepareToPlay]; 
[myAudio play]; 

} 

停止声音:

if([myAudio isPlaying]){ 
     [myAudio stop]; 
     myAudio.currentTime = 0; 
    } 

问题:有时我得到这个错误: AudioQueue:要求修剪0 + 1676 = 1676帧从包含1152帧的缓冲区中删除

只要调用[myAudio play],就会​​发生错误。

任何有关这方面的帮助表示赞赏。

+0

任何机会,你的 'myPlaySound' 被调用,同时在音频播放?那么你应该在分配不同的实例之前尝试停止播放器。 –

+1

我不认为我在调用玩家的时候正在调用我的方法。顺便说一句,当我尝试加载另一个声音文件[在现有的地方]这个错误没有发生。我不确定,可能是因为这些音频文件的比特率不同? – user1771823

回答

3

我遇到了这个问题,就像拉杜说的那样,我似乎遇到的问题是当它已经播放时试图播放声音。如果声音被另一个声音取代,我认为这不是什么大问题,但要小心,在演奏过程中不要尝试播放相同的声音。

3

有点迟到,但如果你没有解决你的问题,这可能会有所帮助。

如果您在播放myAudio之前停止myAudio,则可以消除此问题。

所以,你必须:

myAudio.numberOfLoops = loopsCount; 
    [myAudio prepareToPlay]; 
    [myAudio play]; 

尝试将其更改为:

[myAudio stop]; 
    myAudio.numberOfLoops = loopsCount; 
    [myAudio prepareToPlay]; 
    [myAudio play];