2009-08-03 7 views
2

Ist es möglich, mit der verwalteten Version von DirectSound einen Ton rückwärts zu lesen? Wenn nicht, gibt es eine andere Bibliothek, die es leicht macht?Mit DirectSound einen Ton rückwärts lesen

+1

versuchen Sie, die Datei als Stream zu öffnen, erhalten Sie die Header-Informationen, erstellen Sie eine neue Tempdatei mit den Header-Informationen und schreiben Sie den Stream vom Ende. öffne die tempdatei als neues directsound-Objekt und versuche es zu spielen – Jim

+0

Das ist die Lösung, die ich gerade versuche zu implementieren. Ich fragte mich, ob es keinen leichteren Weg gab. Übrigens, warum hast du das nicht als Antwort gepostet? –

Antwort

7

Sie können die WaveFileReader- und WaveFileWriter-Klassen von NAudio verwenden, um eine WAV-Datei umzukehren. Sie müssen sicherstellen, dass Sie die BlockAlign-Eigenschaft des WaveFormat verwenden, um alle Bytes für ein einzelnes Sample (4 für Stereo-16-Bit-Audio) zu lesen.

public static void ReverseWaveFile(string inputFile, string outputFile) 
    { 
     using (WaveFileReader reader = new WaveFileReader(inputFile)) 
     { 
      int blockAlign = reader.WaveFormat.BlockAlign; 
      using (WaveFileWriter writer = new WaveFileWriter(outputFile, reader.WaveFormat)) 
      { 
       byte[] buffer = new byte[blockAlign]; 
       long samples = reader.Length/blockAlign; 
       for (long sample = samples - 1; sample >= 0; sample--) 
       { 
        reader.Position = sample * blockAlign; 
        reader.Read(buffer, 0, blockAlign); 
        writer.WriteData(buffer, 0, blockAlign); 
       } 
      } 
     } 
    } 
+0

Akzeptiert, aber ich habe es mit DirectSound implementiert. –