Mam instancję AVAudioPlayer, która będzie odtwarzać kilka dźwięków. Czy istnieje sposób dostarczenia instancji AVAudioPlayer z nowym dźwiękiem, czy też muszę utworzyć nową instancję za pomocą initWithData :?Ponowne użycie AVAudioPlayer dla innego dźwięku
Odpowiedz
Ponowne używanie obiektów to zwykle zły pomysł, ogólnie postaraj się, aby obiekty były jak najkrótsze. Zmniejsza to liczbę możliwych stanów kodu i ułatwia rozumowanie. ("Skąd wzięła się ta wartość? Może to pozostało z użycia poprzedniej instancji?" Yuck.) Przerywaj tę regułę tylko wtedy, gdy napotkasz na wymierne problemy.
Aby zapoznać się z tym artykułem, możesz przejrzeć questions tagged “immutable”.
Nie ma interfejsu API do przekazania nowego pliku do istniejącej instancji AVAudioPlayer. Jednak tworzenie AVAudioPlayer nie jest drogie, więc nie powinieneś martwić się o wydajność, o ile zwolnisz instancje, gdy skończysz.
Jeśli masz ustalony zestaw dźwięków, które odtwarzają się nawzajem lub które mogą być odtwarzane wielokrotnie, możesz utworzyć jedną instancję AVAudioPlayer dla każdego dźwięku i ponownie użyć tych instancji, wywołując play
na odpowiedniej instancji.
Jeśli jednocześnie odtwarzany jest tylko jeden dźwięk i generowane są nowe dźwięki (na przykład w przypadku zamiany tekstu na mowę na podstawie danych wprowadzonych przez użytkownika), zazwyczaj jako właściwość ma jednego gracza. Kiedy odtwarzany jest nowy dźwięk, dzwonię pod numer [player stop]
, zwalniam starego odtwarzacza i tworzę nowy z nowym plikiem dźwiękowym.
Tak, szukałem w Google tego pytania, ponieważ uważałem, że zrobienie nowego AVAudioPlayera może spowodować pogorszenie wydajności. Twoja odpowiedź natychmiast rozwiązuje moje pytania. 1) Nie ma możliwości modyfikacji pliku w AVAudioPlayer 2) Tworzenie AVAudioPlayer nie jest drogie. –
to powinna być zaakceptowana odpowiedź. – Herm
Wszelkie sugestie w ramach ARC? – piperchester
- 1. Wznowienie dźwięku w tle po odtworzeniu dźwięku z AVAudioPlayer
- 2. Ponowne użycie elementów HTML
- 3. Ponowne użycie DataTemplate
- 4. Ponowne użycie HttpClient dla różnych użytkowników
- 5. Ponowne użycie SpecFlow Scenariusze
- 6. Ponowne użycie instancji NSURLConnection
- 7. Ponowne użycie FtpWebRequest
- 8. Ponowne użycie zapytania LINQ
- 9. Ponowne użycie ikony aplikacji .NET
- 10. R data.table: ponowne użycie agregacji
- 11. Ponowne użycie opcji Kod menu
- 12. Odtwarzanie dźwięku i ponowne uruchamianie onclick
- 13. Ponowne użycie obiektów zapytań Lucene
- 14. Ponowne użycie zmiennych w Pythonie
- 15. Ponowne użycie wskaźnika po `usuń`
- 16. Ponowne użycie MNIEJ style zagnieżdżone
- 17. Ponowne użycie formularzy administracyjnych dla widoków użytkowników w django?
- 18. Zapisywanie i ponowne użycie bloku dla wywołań metod
- 19. Ponowne użycie kodu w różnych kontekstach rspec
- 20. Ponowne użycie modelu z różnymi wymaganymi właściwościami
- 21. AVAudioPlayer i Losowa Powolność
- 22. Ponowne użycie SSL połączenia z Androidem HttpClient
- 23. Ponowne użycie wątku Java za pomocą executora
- 24. LINQ do SQL: Ponowne użycie wyrażenia lambda
- 25. Ponowne użycie formantów i widgetów Backbone.js
- 26. Java 7: Ponowne użycie wątku? (disconnect - reconnect)
- 27. Ponowne użycie widoku z serii ujęć
- 28. Ponowne użycie grubości warstwy w Tensorflow
- 29. Ponowne użycie układu XML i kodu
- 30. Scala - czy można cofnąć ponowne użycie varargs?
To nie jest odpowiedź na pytanie @ Fernando i jest nadmiernym uogólnieniem. Istnieje wiele kontekstów, w których ponowne wykorzystanie obiektu jest lepszym rozwiązaniem niż tworzenie nowego obiektu. –
Myślę, że Christopher ma rację. To ze względu na wydajność. Na przykład widok tabeli ponownie wykorzystuje istniejące komórki, a firma Apple wyraźnie je zachęca. Przynajmniej odpowiedziałeś na pytanie o plakaty: "nie ma sposobu na zmianę pliku" tak jak Christopher. –
Widok tabeli jest szczególnym przypadkiem, ponieważ musi spełniać twarde wymagania wydajności (przewijanie). Generalnie jednak koszt wydajności budowy nowego obiektu jest dziś dość niski i stoję na stanowisku, że ponowne wykorzystanie obiektów do złego działania jest złym pomysłem. – zoul