la riproduzione di un elenco di file audio in sequenza
Domanda
Sono stato confrontato ad una situazione. Sto scrivendo un'applicazione di Windows in C # .NET. Voglio giocare più file wav uno dopo l'altro e farlo in modo continuo.
c'è una classe che potrebbe consentire a questo? altrimenti, come potrei implementarlo?
Ho provato ad utilizzare MCI e funziona, con la bandiera e l'intercettazione del messaggio MM_MCINOTIFY notificare ma è piuttosto disordinato e complica il mio codice.
Soluzione
Se è fissato l'elenco dei file, poi basta fare una playlist e passarlo a un'istanza di MediaPlayer. lettore multimediale accetta playlist sia in formato .m3u o in formato wvx.
Ma se è necessario scegliere l'ordine dei file in modo dinamico, uno se il modo più semplice è quello di utilizzare PlaySound (). Si passerà ad essa i singoli nomi di file, o puntatori a sventolare i dati in memoria (si dovrebbe schierare che a memoria non gestita). Sia dedicare un filo al suono, e farlo basta chiamare PlaySound
in un ciclo, o utilizzare SND_ASYNC
.
Si noti che è possibile solo guardando l'intestazione di un file wave di sapere quanto tempo ci vorrà per riprodurre un file con un alto grado di precisione.
[DllImport("WinMM.dll")]
public static extern bool PlaySound(string name, int hModule, int flags);
// see mmsystem.h for these flags
public int SND_SYNC = 0x00000000; // don't return until playback is done
public int SND_ASYNC = 0x00000001; // play asynchronously
public int SND_NODEFAULT = 0x00000002; // don't play the default sound if n
public int SND_MEMORY = 0x00000004; // name is actual a pointer to a WAVEHEADER
public int SND_LOOP = 0x00000008; // loop the sound until next call to PlaySound (use with SND_ASYNC)
public int SND_NOSTOP = 0x00000010; // don't stop any currently playing sound
public int SND_FILENAME = 0x00020000; // name is a filename (it's a sound name otherwise)
public int SND_NOSTOP = 0x00000010; // don't stop any currently playing sound
Entrambi questi metodi vi permetterà di mixare i file di diversa profondità di bit e frequenza di campionamento. Ma saranno anche sia mettere una piccola quantità di silenzio tra le file. Se avete bisogno le transizioni tra i file di essere senza soluzione di continuità, allora hai bisogno di trovare sia un terzo motore audio di partito, o rotolare il proprio.
In alternativa, è possibile scrivere un-onda di file multipli lettore di flusso di file (in C ++, C # non deve essere il codice non gestito). E usarlo al posto del lettore di file wav predefinito per riprodurre i file in MediaPlayer.
Altri suggerimenti