2010-10-02 41 views
21

Tôi đã sử dụng AVAudioPlayer để phát tệp wav 10 giây và hoạt động tốt. Bây giờ tôi phải dừng lại ở giây thứ 4 và sau đó chơi lại từ giây thứ nhất.AVAudioPlayer ngừng phát âm thanh và phát nó ngay từ đầu

Đây là mã tôi đã cố gắng:

NSString *ahhhPath = [[NSBundle mainBundle] pathForResource:@"Ahhh" ofType:@"wav"]; 
AVAudioPlayer *ahhhhhSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:ahhhPath] error:NULL]; 

[ahhhhhSound stop]; 
[ahhhhhSound play]; 

gì tôi nhận được là, wav dừng lại ở giây thứ 4 nhưng khi tôi chạy [XXX chơi] một lần nữa, wav tiếp tục đóng giây thứ 5 thay vì chơi từ đầu.

Làm cách nào để hoàn thành công việc này? Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Và đối với ngắn sẽ phát ra các triệu chứng rõ ràng là âm thanh không chơi lần thứ hai - gọi dừng và chơi chỉ gây ra âm thanh để kết thúc chơi và nó nghe như vở kịch thứ hai đã bị bỏ qua . Đó là những gì đã xảy ra trong mã của tôi, và câu trả lời dưới đây đã sửa nó. – Echelon

Trả lời

54

của AVAudioPlayer class reference Apple nói:

Phương pháp dừng không thiết lập lại giá trị tài sản currentTime để 0. Nói cách khác, nếu bạn gọi dừng trong khi phát lại và sau đó gọi vở kịch, phát lại sơ yếu lý lịch tại điểm mà nó rời khỏi.

Vì vậy, bạn sẽ có thể khởi động lại nó với:

[ahhhhhSound stop]; 
ahhhhhSound.currentTime = 0; 
[ahhhhhSound play]; 
+0

Tôi đã tìm thấy một vấn đề với điều này trên thiết bị iOS 4.3.3 và 4.3.5 ít nhất. Nó hoạt động tốt trên các thiết bị iOS 5.0.1. (iPhone 4 và 4S) sau khi dừng, sau đó đặt currentTime thành 0, sau đó phát, phát thực sự không thành công (trả về NO). Tôi đang kéo tóc của tôi ở đây ... – Jonny

+0

@ Jonny: Sau đó, hãy hỏi một câu hỏi mới. Câu hỏi này là 1,5 tuổi ;-) – DarkDust

+0

Không, tôi phát hiện ra cách giải quyết và đang chạy cho danh tiếng của bạn ;-) – Jonny

6

Vì vậy, tôi đã có một số rắc rối như bạn có thể nhìn thấy từ nhận xét của tôi về câu trả lời của DarkDust. Vấn đề chỉ xuất hiện trên iOS 4.3.3/4.3.5, iPhone 4. Có thể là phiên bản iOS cũ hơn, nhưng không phải iOS 5.0.1. Bằng cách nào đó, bản thân AVAudioPlayer dường như "phá vỡ" khi dừng nó và vở kịch thứ hai sẽ thất bại một cách không thể giải thích được. Trên thực tế một "dừng" sẽ dỡ bỏ một số công cụ được tải trên preparToPlay, mà không phải là unloaded nếu bạn chỉ cần "tạm dừng" người chơi - theo tham chiếu. Vì vậy, giải pháp của tôi sẽ được sử dụng tạm dừng thay vì dừng lại - coi người chơi hiện đang chơi - nếu không sẽ không có lý do gì để ngăn chặn bất cứ điều gì. Về mặt lý thuyết thì cũng nhanh hơn. Giải quyết nó cho tôi.

if (ahhhhhSound.playing) { 
    [ahhhhhSound pause]; 
} 
ahhhhhSound.currentTime = 0; 
[ahhhhhSound play]; 

Bây giờ tôi có thể tiếp tục cuộc sống.

+0

+1 cho giải pháp này. Tôi gặp sự cố dừng (âm thanh sẽ bị hỏng, chỉ các phần kết thúc sẽ phát các âm thanh khác, v.v ... Tôi có nhiều phiên bản AVAudioPlayer). Sử dụng tạm dừng và đặt currentTime thành 0 giải quyết tất cả vấn đề của tôi! –

+0

Có, tạm dừng() là cách chính xác để thực hiện. – StackUnderflow

0

Swift:

mySound.audioPlayer?.stop() 
mySound.audioPlayer?.currentTime = 0 
mySound.audioPlayer?.play() 
Các vấn đề liên quan