Frage

Ich habe eine c # Anwendung, die einfachen WAV-Dateien durch Directsound spielt. Mit den Testdatum hatte ich arbeitete der Code in Ordnung. Allerdings, wenn ich Daten der realen Welt verwendet wird, es erzeugt einen sehr hilfreich Fehler bei der Erstellung des sekundären Puffers: „Argument. Wert nicht innerhalb des erwarteten Bereichs fällt“

Der Test wavs hatte ein 512 kbps Bitrate, 16bit Audio-Sample-Größe und 32 kHz Abtastrate. Die neue wavs ist 1152kbps, 24bit und 48kHz ist. Wie kann ich Directsound bekommen mit diesen größeren Werten gerecht zu werden, oder wenn nicht, wie kann ich erkennen, programmatisch diese Werte, bevor Sie die Datei spielen?

es geschafft DirectX v9.00.1126 Ich verwende, und ich habe einige Beispiel-Code unten enthalten:

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);
}
...

Weitere Informationen:. Die realen WAV-Dateien werden auch nicht in Windows Media Player spielen, sagen mir ein Codec benötigt wird, um die Datei zu spielen, während sie in winamp fein spielen

Weitere Informationen 2: die Bytes der Arbeitstestdaten und die schlechten Daten der realen Welt vergleicht, kann ich sehen, dass hinter dem RIFF Brocken, die schlechten Daten einen „bext“ chunk hat, dass das Internet informiert mich Metadaten zugeordnet ist, mit der Broadcast-Audio-Erweiterung, während die Testdaten gehen direkt in einen fmt Brocken. Es ist / / a fmt Brocken in den schlechten Daten, so dass ich weiß nicht, ob es schlecht ausgebildet oder wenn die Lader weiter für fmt Daten suchen sollten. Ich kann sehen, ob ich einige Informationen zu diesen rouge bext Brocken von den Leuten bekommen kann mir die Daten liefern -. Wenn sie meinen Code entfernen kann es immer noch funktionieren

War es hilfreich?

Lösung

Nicht alle Soundkarten unterstützen 24-Bit-Sample-Wiedergabe, und selbst wenn sie es tun, sie müssen oft ausschließlich in diesem Modus geöffnet werden. Es gibt ein ähnliches Problem mit Sampleraten. Ihre Soundkarte kann in diesem Fall 48 kHz wird neu abgetastet werden muss, gespielt.

bei 44,1, in Betrieb sein

Ich habe eine Open-Source-.NET-Audio-Bibliothek mit dem Namen geschrieben NAudio , die es Ihnen ermöglicht, um herauszufinden, welche Abtastrate und Bittiefe eine bestimmte WAV-Datei ist. Es bietet auch alternative Möglichkeiten der Wiedergabe von Audiomaterial (zum Beispiel durch die Wav ... APIs), und die Möglichkeit, Dateien mit dem DMO Neuabtasters Objekt sampeln.

Andere Tipps

Neben der Sampling-Ausgabe, WAV ist nur ein Containerformat und das Audio in einem beliebigen eine Vielzahl von Audio-Formaten komprimiert werden könnte (wie AVI ist ein Container für Video). So könnte man ein Tool wie GSpot um herauszufinden, ob Ihre WAV in einem codiert wird nicht-Standard-Format in und um den Codec installieren. Winamp hat mehr Codecs standardmäßig installiert als WMP, die die Winamp spielt es erklären würde und WMP nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top