Domanda

Ho una applicazione c# che gioca semplice file wav tramite directsound.Con i dati di test ho avuto, il codice ha funzionato bene.Tuttavia, quando ho usato i dati del mondo reale, ha prodotto un inutile errore nella creazione della scuola secondaria di buffer:"ArgumentException:Valore non compreso nell'intervallo previsto."

Il test wavs avuto un 512 kbps bit rate, audio 16bit dimensione del campione e 32 khz di frequenza di campionamento audio.Il nuovo wavs è 1152kbps, 24 bit e 48 khz rispettivamente.Come posso ottenere il directsound per far fronte con questi valori più grandi, o se no come posso fare a livello di programmazione in grado di rilevare questi valori prima di tentare di riprodurre il file?

è gestito DirectX v9.00.1126 sto usando, e ho incluso qualche esempio di codice riportato di seguito:

using DS = Microsoft.DirectX.DirectSound;  
...  
DS.Device device = new DS.Device();
device.SetCooperativeLevel(this, CooperativeLevel.Normal);  
...
BufferDescription bufferDesc = new BufferDescription();
bufferDesc.ControlEffects = false;  
...
try
{
    SecondaryBuffer sound = new SecondaryBuffer(path, bufferDesc, device);
    sound.Play(0, BufferPlayFlags.Default);
}
...

Informazioni aggiuntive:il mondo reale wav file non vengono riprodotti in windows media player, mi dice un codec necessari per riprodurre il file, mentre giocano bene in winamp.

Ulteriori informazioni 2:Confrontando i byte del test di funzionamento dati e i brutti dati del mondo reale, ho passato il pezzo RIFF, i brutti dati è un "bext" chunk, che internet mi informa i metadati associati con la trasmissione di estensione audio, mentre i dati di test va dritto in un fmt chunk.C' /è/ un fmt chunk nel male i dati, quindi non so se è mal formate, o se il loader dovrebbe essere alla ricerca di più per fmt dati.Posso vedere se riesco a ottenere qualche informazione su questo rouge bext pezzo di popolo la fornitura di me i dati - se si può rimuovere il mio codice possono ancora funzionare.

È stato utile?

Soluzione

Non tutte le schede audio supportano 24 bit di riproduzione del campione, e anche quando lo fanno, spesso devono essere aperta esclusivamente in quel modo.C'è un problema simile, con frequenze di campionamento.La scheda può essere operativo a 44,1 kHz, nel qual caso 48kHz deve essere ricampionato per essere giocato.

Ho scritto un open source .NET audio libreria chiamata NAudio che vi permetterà di scoprire quale frequenza di campionamento e profondità di bit di un dato file WAV è.Offre anche modi alternativi di riproduzione audio (ad es.attraverso il Wav...Api), e la possibilità di ridefinire i file utilizzando il DMO resampler oggetto.

Altri suggerimenti

Oltre al campionamento problema, WAV è solo un formato contenitore e l'audio potrebbe essere compresso in una miriade di formati audio come AVI è un contenitore di video).È possibile utilizzare uno strumento come GSpot per scoprire se i tuoi file sono codificati in un formato non standard e installare il codec.Winamp ha più installato i codec di WMP, il che spiegherebbe il Winamp gioca e WMP non.

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