4 Stimmen

Wie kann ich eine Nicht-PCM-Datei abspielen oder in eine PCM-Datei konvertieren?

Der folgende Code funktioniert mit einigen wav-Dateien, aber bei anderen erhalte ich die Meldung "InvalidOperationException was unhandled. Message=Sound API unterstützt nur die Wiedergabe von PCM-Wave-Dateien."

var webClient = new WebClient();
webClient.DownloadFile(url, fileName);
var fileSound = new SoundPlayer(fileName);
fileSound.PlaySync();

Gibt es eine Möglichkeit, programmatisch zu prüfen, ob eine wav-Datei "schlecht" ist (keine PCM-Wave-Datei) und sie dann bei Bedarf zu konvertieren?

Was seltsam ist, ist, dass der Code in der Legacy-Delphi-Anwendung funktioniert - alle wav-Dateien spielen einfach gut. Hier ist der Delphi-Code:

filename := GetEnvironmentVariable('TEMP')+'\archieAndDingbat.wav';
URLDownloadToFile(nil, PChar(url), PChar(filename), 0, nil);
PlaySound(filename);

Ich habe mir die Eigenschaften der beiden Dateien im Explorer angesehen und festgestellt, dass es tatsächlich einen Unterschied gibt. Die Datei, die sich abspielen lässt, hat das Audioformat PCM; die Datei, die sich nicht abspielen lässt, hat CCITT u-Law.

Also ... Ich brauche entweder einen Weg, um von CCITT u-Law zu PCM on the fly nach dem Herunterladen dieser Dateien zu konvertieren (sie sind von einer URL herunterladen und dann lokal gespielt) ODER vielleicht eine andere Art der Wiedergabe dieser Dateien als PlaySync() ...

1voto

Francis Lee Punkte 984

Sehen Sie sich die audiolab-Bibliothek von mitov an. Es funktioniert großartig

0voto

Verwenden Sie dazu den Code von newkie unter: http://www.codeproject.com/Articles/175030/PlaySound-A-Better-Way-to-Play-Wav-Files-in-C?msg=4366037#xx4366037xx

In meinem Fall musste ich allerdings alle kleinen x in große x ändern, damit es funktionierte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X