Nella mia applicazione ci sono circa 60 campioni sonori. Devo giocare con una precisione elevata nel tempo. 5ms sarà mater. Il suono deve essere riprodotto in risposta alle azioni dell'utente. Quindi non so quale suono suonerà dopo. Ho pensato ad un pre-trattamento abituale di SoundEffectInstance per tutti i suoni. La creazione di SoundEffectInstance richiede tempo e memoria? È una copia completa di SoundEffect in memoria o solo alcune informazioni sul puntatore. Posso migliorare la mia applicazione se precederò SoundEffectInstances? C'è un altro modo per suonare il campione il più presto possibile in XNA?Come riprodurre l'audio il prima possibile?
risposta
Un SoundEffect
contiene i dati della forma d'onda. Utilizza una grande quantità di memoria (per quanto richiede i dati della forma d'onda).
A SoundEffectInstance
è un oggetto di piccole dimensioni, contenente dati relativi alla riproduzione (posizione, volume, ecc.) E un handle alla "voce" che è stata assegnata per eseguire la riproduzione.
Quando si utilizza SoundEffect.Play
, internamente crea un SoundEffectInstance
. Può anche raggruppare queste istanze, quindi non è necessario ricrearle nelle chiamate successive.
Creazione di un SoundEffectInstance
richiede un certo tempo e la memoria. Per gli effetti sonori in un gioco che gira a 30 FPS (33ms per frame) la latenza coinvolta dovrebbe essere impercettibile.
Se stai cercando di riprodurre la musica in sequenza mescolando insieme diversi effetti sonori, dove anche 5ms questioni, è necessario implementare il proprio mixer audio utilizzando DynamicSoundEffectInstance
. Ciò assicurerà che i suoni siano sincronizzati fino al campione.
se si sta cercando di creare una sorta di tempo reale giocabile "strumento", e si sta cercando di ottenere la latenza di input-to-output fino a 5ms - poi mollare adesso. 5 ms è assurdamente buono e normalmente richiede attrezzature e software specialistici.
Tuttavia, se è necessario ridurre la latenza input-to-output nel modo migliore possibile, è possibile eseguire il polling dell'input più frequentemente rispetto a una volta per frame. E probabilmente dovresti ancora usare DSEI. Non sono sicuro che DSEI abbia una dimensione del buffer di riproduzione configurabile, ma se lo fosse dovresti renderlo il più piccolo possibile senza introdurre l'audio glitch.
Quando un utente sceglie un set, è necessario caricare gli effetti sonori in un dizionario, in modo da accedervi sarà più veloce in seguito.
Tuttavia, non è necessario caricare tutti gli effetti sonori, specialmente quelli che non hai bisogno in un determinato schermo o impostare. Inoltre, dovresti scaricare gli effetti sonori di cui non avrai più bisogno.
Ci vuole tempo per caricare gli effetti sonori, a seconda delle dimensioni e la quantità che si desidera caricare. Ti consiglio di creare una schermata di caricamento di base per caricare/scaricare contenuti nel tuo gioco (la maggior parte dei giochi lo fa in questo modo). Caricherete l'effetto sonoro (formato wav suppongo?) In memoria, non solo un puntatore, ecco perché gli effetti sonori devono essere mantenuti corti.
Un effetto audio già caricato verrà riprodotto molto velocemente (il ritardo è impercettibile). Il preloading sarà incrementare le prestazioni dell'applicazione, al costo dell'utilizzo della memoria.
Avrò bisogno di precaricare l'oggetto SoundEffectIstance per ogni suono o solo SoundEffect? – xander27
Io trovo lì [link] (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.aspx) che ** "Tutti gli oggetti SoundEffectInstance creati da SoundEffect condividono le risorse di memoria "**. Quindi posso creare qualsiasi numero di 'SoundEffectInstance' – xander27
- 1. YouTubeAndroidPlayerAPI non è possibile riprodurre alcuni video
- 2. Android: come riprodurre la musica al massimo volume possibile?
- 3. come mostrare la barra di avanzamento prima di riprodurre il video
- 4. Riprodurre il file mp3 durante il download?
- 5. Come posso riprodurre il file pcm
- 6. Come riprodurre il suono TICK predefinito?
- 7. Come posso riprodurre file video?
- 8. HTML5 Audio iPAD, non è possibile riprodurre file audio?
- 9. Android VideoView Non è possibile riprodurre video mp4
- 10. è possibile riprodurre l'interpolazione delle stringhe di python in ocaml?
- 11. È possibile caricare una gif animata senza riprodurre l'animazione?
- 12. Non è possibile riprodurre video in Web View
- 13. È possibile riprodurre un percorso all'indietro in una CAKeyFrameAnimation?
- 14. come riprodurre un video utilizzando il videoView e un inputStream
- 15. È possibile eseguire il calcolo prima di super() nel costruttore?
- 16. Come riprodurre l'audio dalla risorsa
- 17. Come posso riprodurre un'applicazione multithread?
- 18. Come riprodurre poco frequenti 404?
- 19. come riprodurre l'audio con AVAudioPCMBuffer
- 20. Elemento audio HTML come riprodurre?
- 21. Come riprodurre suoni con JavaFX
- 22. Come riprodurre l'audio in un'estensione?
- 23. riprodurre mp3 con monotouch
- 24. Intestazione php per il download del file .wav ma non è possibile riprodurre in Embedded
- 25. Come riprodurre video online su Android?
- 26. Come riprodurre l'audio in Qt5 (migrazione Qt4)?
- 27. Impossibile riprodurre il videoregistratore con GPUImage
- 28. Come riprodurre il file di libreria dell'iPod in AVPlayer
- 29. Notifica push Android come riprodurre il suono predefinito
- 30. Come riprodurre i video di YouTube tramite il plugin vlc?
Avete bisogno di tutti i suoni in qualsiasi momento nell'applicazione o ci sono suoni assegnati per schermi diversi? – Msonic
Pochi set di 60 suoni.L'utente sceglie il set quindi potrebbe essere un qualsiasi suono dal set – xander27