2016-04-06 8 views
0

Ich kann WdlResamplingSampleProvider für das 16-Bit-Beispiel von Mark Heath in seinem Blog arbeiten;Funktioniert WdlResamplingSampleProvider mit 32 Bit?

int outRate = 16000; 
var inFile = @"test.mp3"; 
var outFile = @"test resampled WDL.wav"; 
using (var reader = new AudioFileReader(inFile)) 
{ 
    var resampler = new WdlResamplingSampleProvider(reader, outRate); 
    WaveFileWriter.CreateWaveFile16(outFile, resampler); 
} 

außer ich lese eine WAV-Datei anstelle einer MP3-Datei. Aber ich muss wirklich mit 32-Bit-WAV-Dateien (Input und Output) arbeiten, ohne die Bittiefe zu verlieren. Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

WdlResamplingSampleProvider arbeitet mit 32 Bit Fließkomma (IEEE) Samples. Also AudioFileReader hat bereits 32 Bit Float konvertiert, wenn die Eingabe nicht so war. Es liegt also ganz bei Ihnen, was Sie mit der Ausgabe machen. Wenn Sie einfach CreateWaveFile anrufen, erhalten Sie eine 32-Bit-Fließkomma-WAV-Datei.

+0

Wenn ich CreateWaveFile anstelle CreateWaveFile16 aufrufen, erhalte ich den folgenden Fehler; Das Objekt des Typs 'NAudio.WaveSampleProviders.WdlResamplingSampleProvider' kann nicht in den Typ 'NAudio.Wave.IWaveProvider' umgewandelt werden. – timothyjb

+0

gibt es einen SampleToWaveprovider, den Sie verwenden können –

+0

Ich habe versucht, herauszufinden, wie man das alleine macht, aber kein Glück. Sobald ich eine Wave-Datei mit dem AudioFileReader eingelesen habe, benutze ich SampleToWaveProvider, um CreateWaveFile zum Laufen zu bringen. Benutze ich es vor oder nach WdlResamplingSampleProvider? – timothyjb