Tôi có một phiên bản AVAudioPlayer sẽ phát một số âm thanh. Có cách nào để cung cấp một trường hợp AVAudioPlayer với một âm thanh mới, hoặc tôi phải tạo một thể hiện mới với initWithData :?Sử dụng lại AVAudioPlayer cho một âm thanh khác nhau
Trả lời
Việc sử dụng lại các đối tượng thường là một ý tưởng tồi, thường cố gắng để các đối tượng của bạn tồn tại trong thời gian ngắn nhất có thể. Điều này làm giảm số lượng các trạng thái có thể có của mã của bạn và làm cho lý luận về nó dễ dàng hơn. (“Giá trị này đến từ đâu? Có lẽ nó còn sót lại từ việc sử dụng ví dụ trước đây?” Yuck.) Chỉ phá vỡ quy tắc này khi bạn gặp phải các vấn đề có thể đo lường được.
Để đọc thêm dọc theo dòng suy nghĩ này, bạn có thể duyệt questions tagged “immutable”.
Không có API để chuyển tệp mới sang phiên bản AVAudioPlayer hiện có. Tuy nhiên, việc tạo AVAudioPlayer không tốn kém, vì vậy bạn không nên lo lắng về hiệu suất, miễn là bạn phát hành các trường hợp khi bạn đã hoàn tất với chúng.
Nếu bạn có bộ âm thanh cố định phát trên nhau hoặc có thể phát lặp lại, bạn có thể tạo một bản AVAudioPlayer cho mỗi âm thanh và sử dụng lại các trường hợp đó bằng cách gọi play
trên trường hợp thích hợp.
Nếu chỉ có một âm thanh phát cùng một lúc và bạn đang tạo âm thanh mới (ví dụ: với chuyển văn bản thành giọng nói dựa trên đầu vào của người dùng), tôi thường có một trình phát đơn lẻ làm thuộc tính. Khi một âm thanh mới phát, tôi gọi số [player stop]
, nhả trình phát cũ và tạo bản nhạc mới với tệp âm thanh mới.
Vâng, tôi đã tìm kiếm Google về câu hỏi này bởi vì tôi nghĩ rằng việc tạo nhiều AVAudioPlayer mới sẽ làm giảm hiệu suất hoạt động. Câu trả lời của bạn giải quyết các câu hỏi của tôi cùng một lúc. 1) Không có cách nào để sửa đổi tập tin trong AVAudioPlayer 2) Tạo AVAudioPlayer không đắt. –
đây phải là câu trả lời được chấp nhận. – Herm
Bất kỳ đề xuất nào trong ARC? – piperchester
- 1. Phát nhiều tệp âm thanh bằng AVAudioPlayer
- 2. phát âm thanh từ internet bằng AVAudioPlayer
- 3. Tiếp tục Âm thanh Nền Sau khi Phát Âm thanh Với AVAudioPlayer
- 4. Cách phát nhiều tệp âm thanh liên tiếp bằng AVAudioPlayer?
- 5. Đang cố gắng hiểu AVAudioPlayer và đo mức âm thanh
- 6. iOS AVAudioPlayer khiến nhạc nền của ứng dụng khác dừng lại
- 7. Android - Nhiều appWidgets phát các âm thanh khác nhau
- 8. Ghi lại âm thanh bằng cách sử dụng HTML5 Microphone?
- 9. Tạo một cầu thủ python âm thanh sử dụng QWebView và API HTML5 âm thanh
- 10. Thực hiện hành động khi một âm thanh phát xong trong AVAudioPlayer?
- 11. Âm thanh lạ khi phát các âm thanh khác nhau với các âm lượng khác nhau được đặt thông qua OpenAL trên iPhone
- 12. Ghi lại âm thanh iOS
- 13. Cài đặt AVAudioPlayer hiện đang phát âm thanh và phát nó từ đầu
- 14. Phát âm thanh trong nền bằng AVAudioPlayer mà không dừng nhạc ipod
- 15. Phát lại âm thanh Ruby
- 16. AVAudioPlayer với MPMusicPlayerController
- 17. AVAudioPlayer ngừng phát âm thanh và phát nó ngay từ đầu
- 18. Tiến trình phát lại avaudioplayer
- 19. AVAudioRecorder & AVAudioPlayer - Đầu ra âm thanh trên loa trong, cách thay đổi?
- 20. Sự cố khi phát âm thanh sau khi tạm dừng bằng AVAudioPlayer
- 21. AVAudioRecorder ghi lại âm thanh luồng
- 22. Tốc độ AVAudioPlayer
- 23. Looping AVAudioPlayer w/o Gap
- 24. Cách phát âm thanh bằng AVAudioPlayer khi ở Chế độ im lặng trong iPhone
- 25. Cách lặp lại âm thanh chuông
- 26. Thanh màu khác nhau sử dụng nhiều dòng
- 27. AVCaptureSession Ghi lại Video Với Âm thanh
- 28. Tốc độ phát lại âm thanh pygame
- 29. ghi lại âm thanh hệ thống (stereomix) vào một tệp
- 30. Bạn sử dụng bộ âm thanh xây dựng nào?
Đây không phải là câu trả lời cho câu hỏi của @ Fernando và là một sự khái quát hóa quá mức. Có nhiều bối cảnh trong đó tái sử dụng đối tượng là một cách tiếp cận tốt hơn so với việc tạo đối tượng mới. –
Tôi nghĩ Christopher đúng. Đó là vì lý do hiệu suất. Ví dụ, chế độ xem bảng sử dụng lại các ô hiện có và Apple đã khuyến khích nó một cách rõ ràng. Ít nhất bạn đã trả lời cho câu hỏi áp phích, "không có cách nào để thay đổi tập tin" như Christopher đã làm. –
Chế độ xem bảng là trường hợp đặc biệt vì nó phải đáp ứng các yêu cầu về hiệu suất cứng (cuộn). Nhưng nhìn chung chi phí hiệu suất của một công trình xây dựng đối tượng mới khá thấp hôm nay và tôi đứng trước tuyên bố rằng đó là ý tưởng tồi để tái sử dụng các đối tượng cho đến khi gặp vấn đề về hiệu suất. – zoul