Hay alrededor de 60 muestras de sonido en mi aplicación. Tengo que jugarlo con gran precisión en el tiempo. 5 ms será mater. El sonido debe reproducirse en respuesta a las acciones del usuario. Así que no sé qué sonido tocará a continuación. Pensé en hacer una preproducción de SoundEffectInstance para todos los sonidos. ¿La creación de SoundEffectInstance toma tiempo y memoria? ¿Es una copia completa de SoundEffect en la memoria o solo información del puntero? ¿Puedo mejorar mi aplicación si voy a precreate SoundEffectInstances? ¿Hay alguna otra forma de reproducir muestras lo más pronto posible en XNA?¿Cómo se reproduce el sonido lo antes posible?
Respuesta
A SoundEffect
contiene los datos de forma de onda reales. Utiliza una gran cantidad de memoria (tanto como los datos de forma de onda lo requieren).
A SoundEffectInstance
es un objeto pequeño que contiene datos sobre la reproducción (posición, volumen, etc.) y un identificador de la "voz" que se ha asignado para hacer la reproducción.
Cuando utiliza SoundEffect.Play
, internamente crea un SoundEffectInstance
. También puede agrupar estas instancias, por lo que no necesita recrearlas en llamadas posteriores.
Crear un SoundEffectInstance
lleva algo de tiempo y memoria. Para los efectos de sonido en un juego que se ejecuta a 30FPS (33ms por cuadro) la latencia involucrada debe ser imperceptible.
Si usted está tratando de reproducir la música secuenciada mediante la mezcla de diferentes efectos de sonido, donde las cosas aún 5ms, que necesita para implementar su propio mezclador de audio usando DynamicSoundEffectInstance
. Esto asegurará que los sonidos se sincronicen hasta la muestra.
Si usted está tratando de crear una especie de tiempo real practicable "instrumento", y que está tratando de obtener su latencia de entrada a salida de hasta 5 ms - a continuación, dar ahora. 5 ms es absurdamente bueno y normalmente requiere un equipo especializado y software.
Aún así, si necesita reducir la latencia de entrada a salida lo mejor que pueda, puede sondear la entrada con más frecuencia que una vez por fotograma. Y aún debes usar DSEI. No estoy seguro de si DSEI tiene un tamaño configurable de búfer de reproducción, pero si lo hace, debe hacerlo lo más pequeño posible sin introducir glitches de audio.
Cuando un usuario elige un conjunto, debe cargar esos efectos de sonido en un diccionario, por lo que acceder a ellos será más rápido más adelante.
Sin embargo, no debe cargar todos los efectos de sonido, especialmente aquellos que no necesita en una determinada pantalla o conjunto. Además, debes descargar los efectos de sonido que ya no necesitarás.
Lleva cierto tiempo cargar esos efectos de sonido, dependiendo del tamaño y la cantidad que desee cargar. Te recomiendo que hagas una pantalla de carga básica para cargar/descargar contenido en tu juego (la mayoría de los juegos lo hacen de esa manera). Estará cargando el grave efecto (¿formato wav, supongo?) En la memoria, no solo un puntero, por eso los efectos de sonido deben mantenerse cortos.
Un efecto de sonido ya cargado se reproducirá muy rápido (el retraso es imperceptible). La carga previa aumentará el rendimiento de la aplicación, a expensas del uso de memoria.
. ¿Necesitaré precargar el objeto SoundEffectIstance para cada sonido o solo SoundEffect? – xander27
Encontré allí [enlace] (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.aspx) que ** "Todos los objetos SoundEffectInstance creados a partir de un recurso compartido de SoundEffect recursos "**. Entonces puedo crear cualquier cantidad de 'SoundEffectInstance' – xander27
- 1. ¿Cómo se reproduce el sonido TICK predeterminado?
- 2. ¿Cómo se reproduce el sonido de la biblioteca en AS3?
- 3. ¿Cómo se reproduce el sonido tap de iPhone?
- 4. HTML5 Audio - El sonido sólo se reproduce una vez
- 5. Determine cuándo se reproduce un sonido fuerte en C#
- 6. ¿Cómo se reproduce un sonido (alerta) en una aplicación java?
- 7. ¿Cómo se reproduce un sonido en flash AS3 cuando termina?
- 8. ¿Cómo se reproduce el sonido cuando se hace clic en el botón en Android?
- 9. ¿Cómo se reproduce el sonido en una llamada telefónica con Android?
- 10. ¿Cómo se reproduce el archivo 3gp en Java?
- 11. Recibir notificaciones cuando se reproduce un sonido en OpenAL
- 12. ¿Reproduce el sonido predeterminado de notificaciones locales al mostrar UIAlertView?
- 13. UILocalNotification reproduce el sonido de los documentos de la aplicación
- 14. ¿Cómo se reproduce el sonido del clic del teclado en un teclado personalizado?
- 15. iPhone: ¿Cómo se reproduce un sonido de notificación local alto independientemente de la configuración del volumen?
- 16. cambiar la ruta de audio cuando se reproduce el audio
- 17. ¿Cómo se reproduce MIDI en el iPhone?
- 18. ¿Cómo se reproduce un archivo de sonido en una aplicación Metro de Windows 8 con WinRT?
- 19. Reproduce el archivo de sonido cuando se hace clic en la imagen
- 20. jQuery: ¿Cómo precarga el sonido?
- 21. Componente flash Flowplayer reproduce sonido pero no video
- 22. Inicio lento para AVAudioPlayer la primera vez que se reproduce un sonido
- 23. Reproducción de sonido a través de altavoces mientras se reproduce música a través de auriculares
- 24. WebView con video incrustado se reproduce en segundo plano
- 25. ¿Cómo se reproduce un AudioClip largo?
- 26. ¿Cómo se reproduce audio en una extensión?
- 27. Android: el oyente graba sonido si se produce algún sonido
- 28. Reproduce 1 clip de sonido tras otro sin interrupción en el iPhone
- 29. lo que se llama antes de onCreate en Android
- 30. ¿Cómo se reproduce el video en Java Swing?
¿Necesita todos los sonidos en cualquier momento en la aplicación, o hay sonidos asignados para pantallas diferentes? – Msonic
Pocos conjuntos por 60 sonidos.El usuario elige establecer, entonces puede haber algún sonido del conjunto – xander27