2009-08-03 48 views
2

是否可以使用DirectSound的託管版本向後朗讀聲音? 如果不是有另一個庫允許輕鬆地嗎?用DirectSound向後朗讀聲音

+1

嘗試打開文件作爲流,獲取頭信息,創建一個新的臨時文件與頭信息,並從結尾寫入流。打開臨時文件作爲一個新的directsound對象,並嘗試播放它 – Jim 2009-08-03 08:10:06

+0

這是我目前試圖實現的解決方案。我想知道是否沒有更簡單的方法。 順便說一句,爲什麼你沒有發佈這個答案? – 2009-08-03 08:53:05

回答

7

您可以使用NAudio中的WaveFileReader和WaveFileWriter類來反轉WAV文件。您需要確保使用WaveFormat的BlockAlign屬性讀取單個樣本的所有字節(4爲立體聲16位音頻)。

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