2013-11-26 15 views
5

tôi một chút bối rối bởi lần xuất hiện kỳ ​​lạ này:AVAudioPlayer số vòng lặp chỉ có hiệu lực sau khi được chơi qua một lần

Tôi có một UIButton, mà một khi khai thác hoặc thiết lập một vòng lặp cho một máy nghe nhạc, hoặc reset nó đến 0 (không có vòng lặp). Dưới đây là phương pháp -

-(void)changeLoopValueForPlay:(int)tag toValue:(bool)value{ 
    AVAudioPlayer *av = [self.playerArray objectAtIndex:tag]; 
    if(value){ 
     [av setNumberOfLoops:100]; 
     [av prepareToPlay]; 
    } 
    else{ 
     [av setNumberOfLoops:0]; 
    } 
} 

Bây giờ đối với một số lý do, vòng lặp sẽ chỉ có hiệu lực sau khi người chơi chơi thông qua các âm thanh một lần, có nghĩa là giá trị vòng lặp không mất ảnh hưởng ngay lập tức, nhưng "numberOfLoops" giá trị của người chơi trên thực tế được đặt thành 100 khi tôi kiểm tra giá trị của nó trước khi chơi. Tôi giả định này có một cái gì đó để làm với khởi tạo hoặc tải của người chơi, nhưng tôi không khởi tạo lại nó giữa hai vở kịch (một mà không có vòng lặp, khác với). Bất kỳ ý tưởng tại sao điều này đang xảy ra? Nếu bạn muốn xem bất kỳ mã nào khác, vui lòng cho tôi biết.

Trả lời

1

Điều này khắc phục được sự cố, tuy nhiên tôi cảm thấy như thể đây là một công việc thay vì giải pháp trực tiếp. Những gì tôi đã làm chỉ là tạo một AVAudioPlayer mới với giá trị numberOfLoops được đặt thành bất kỳ thứ gì tôi muốn và thay thế trình phát đó bằng trình phát hiện có thay vì thay đổi giá trị của trình phát đã tồn tại.

0

Tôi giải quyết vấn đề bằng cách bỏ qua numberOfLoops hoàn toàn và thay vào đó thực hiện logic của riêng tôi.

Thứ nhất, thiết lập các đại biểu của AVAudioPlayer:

self.audioPlayer.delegate = self; 

Tiếp theo, thực hiện -audioPlayerDidFinishPlaying:successfully: của các đại biểu:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag 
{ 
    if(flag && <#(bool)i_want_to_repeat_playing#>) 
    { 
     [self.audioPlayer play]; 
    } 
} 

Chỉ cần thay thế <#(bool)i_want_to_repeat_playing#> với logic mong muốn của bạn, ví dụ, kiểm tra xem một bộ đếm có đạt đến một ngưỡng nhất định.

Các vấn đề liên quan