Tengo una instancia de AVAudioPlayer que reproducirá varios sonidos. ¿Hay alguna manera de proporcionar una instancia de AVAudioPlayer con un nuevo sonido, o tengo que crear una nueva instancia con initWithData :?Reutilizando un AVAudioPlayer para un sonido diferente
Respuesta
La reutilización de objetos generalmente es una mala idea, generalmente intente que sus objetos sean lo más efímeros posible. Esto reduce el número de estados posibles de su código y facilita el razonamiento al respecto. ("¿De dónde vino este valor? ¿Tal vez es un residuo del uso de la instancia anterior?" Yuck). Solo rompa esta regla una vez que se encuentre con problemas mensurables.
Para leer más a lo largo de esta línea de pensamiento, puede navegar questions tagged “immutable”.
No hay API para pasar un archivo nuevo a una instancia existente de AVAudioPlayer. Sin embargo, la creación de AVAudioPlayer no es costosa, por lo que no debe preocuparse por el rendimiento, siempre que libere las instancias una vez que haya terminado con ellas.
Si tiene un conjunto fijo de sonidos que se reproducen entre sí, o es probable que se reproduzcan repetidamente, puede crear una instancia de AVAudioPlayer para cada sonido y volver a utilizar esas instancias llamando al play
en la instancia correspondiente.
Si solo se reproduce un sonido a la vez, y está generando nuevos sonidos (por ejemplo, con texto a voz según la entrada del usuario), generalmente tengo un solo reproductor como propiedad. Cuando suena un nuevo sonido, llamo al [player stop]
, lanzo el reproductor anterior e instalo uno nuevo con el nuevo archivo de sonido.
Sí, busqué en Google esta pregunta porque pensé que hacer muchos nuevos AVAudioPlayer causaría una degradación del rendimiento. Tu respuesta resuelve mis preguntas a la vez. 1) No hay forma de modificar el archivo en AVAudioPlayer 2) Crear AVAudioPlayer no es costoso. –
esta debería ser la respuesta aceptada. – Herm
¿Alguna sugerencia bajo ARC? – piperchester
- 1. ¿Actúa cuando un sonido ha terminado de reproducirse en AVAudioPlayer?
- 2. AVAudioPlayer detener un sonido y reproducirlo desde el principio
- 3. Streaming con un AVAudioplayer
- 4. Reutilizando un simulacro verificado
- 5. Inicio lento para AVAudioPlayer la primera vez que se reproduce un sonido
- 6. Generar un búfer LPCM en memoria para AVAudioPlayer initWithData
- 7. Reutilizando un vector en C++
- 8. AVAudioPlayer tasa
- 9. Cómo reproducir un sonido con AVAudioPlayer en modo silencioso en iPhone
- 10. AVAudioPlayer no se reproducirá repetidamente
- 11. Reutilizando un Estado Preparado varias veces
- 12. Reutilizando? S en un DBI prepare
- 13. AVAudioPlayer con MPMusicPlayerController
- 14. Reutilizando HttpURLConnection para mantener viva la sesión
- 15. Nivel máximo de volumen IOS para AVAudioPlayer?
- 16. Reutilizando SqlCommand?
- 17. AVAudioPlayer memory leak
- 18. Demo de AVAudioPlayer al llamar play
- 19. extraer sonido de un fla
- 20. Un sonido del sistema ignora el nivel de volumen
- 21. Cómo obtener una salida al altavoz AVAudioPlayer
- 22. AVAudioRecorder & AVAudioPlayer - Salida de sonido en el altavoz interno, ¿cómo cambiar?
- 23. AVAudioPlayer apaga el iPod, ¿cómo funciona?
- 24. Reproducir/Pausa con el mismo botón [AVAudioPlayer]
- 25. Reutilizando websockets entre páginas?
- 26. Reutilizando UITableViewCell con GCD
- 27. AVAudioPlayer restablecer el sonido que se está reproduciendo y reproducirlo desde el comienzo
- 28. Reproducir un sonido en un complemento de Firefox
- 29. Use un archivo .ini diferente para alembic.ini
- 30. ¿Dónde puedo encontrar efectos de sonido gratis para un juego?
Esta no es una respuesta a la pregunta de @ Fernando, y es una generalización excesiva. Hay muchos contextos en los que la reutilización de objetos es un mejor enfoque que la creación de objetos nuevos. –
Creo que Christopher tiene razón. Es por motivos de rendimiento. Por ejemplo, la vista de tabla reutiliza las celdas existentes y Apple lo alienta explícitamente. Al menos usted había respondido a la pregunta de los carteles, "no hay forma de cambiar el archivo" como lo hizo Christopher. –
La vista de tabla es un caso especial porque tiene que cumplir con los requisitos de rendimiento (desplazamiento). Pero, en general, el costo de rendimiento de una nueva construcción de objeto es bastante bajo en la actualidad y estoy de acuerdo con la afirmación de que es una mala idea reutilizar objetos hasta que se produzca un problema de rendimiento. – zoul