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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top