1

我正在尝试编写一个类,将 .wav 文件转换为 .aiff 文件作为项目的一部分。

我遇到了几个库 Alvas.Audio (http://alvas.net/alvas.audio,overview.aspx) 和 NAudio (http://naudio.codeplex.com)

我想知道是否有人对其中任何一个有任何经验,因为我真的很难弄清楚如何使用这两个库以 aiff 格式编写文件。

到目前为止,我有以下代码,但我不知道如何将 outfile 定义为 aiff:

阿尔瓦斯

string inFile = textBox1.Text; 
WaveReader mr = new WaveReader(File.OpenRead(inFile));
IntPtr mrFormat = mr.ReadFormat();
IntPtr wwFormat = AudioCompressionManager.GetCompatibleFormat(mrFormat, AudioCompressionManager.PcmFormatTag);
string outFile = inFile + ".aif";
WaveWriter ww = new WaveWriter(File.Create(outFile), AudioCompressionManager.FormatBytes(wwFormat));
AudioCompressionManager.Convert(mr, ww, false);
mr.Close();
ww.Close();

南音频

string inFile = textBox1.Text;
string outFile = inFile + ".aif";

using (WaveFileReader reader = new WaveFileReader(inFile))
{
   using (WaveFileWriter writer = new WaveFileWriter(outFile, reader.WaveFormat))
   {
       byte[] buffer = new byte[4096];
       int bytesRead = 0;
       do
       {
           bytesRead = reader.Read(buffer, 0, buffer.Length);
           writer.Write(buffer, 0, bytesRead);
       } while (bytesRead > 0);
   }
}

任何帮助都会被广泛接受:)

4

2 回答 2

1

For latest version of Alvas.Audio see code below from: How to convert .wav to .aiff?

static void Wav2Aiff(string inFile)
{
    WaveReader wr = new WaveReader(File.OpenRead(inFile));
    IntPtr inFormat = wr.ReadFormat();
    IntPtr outFormat = AudioCompressionManager.GetCompatibleFormat(inFormat, 
        AudioCompressionManager.PcmFormatTag);
    string outFile = inFile + ".aif";
    AiffWriter aw = new AiffWriter(File.Create(outFile), outFormat);
    byte[] outData = AudioCompressionManager.Convert(inFormat, outFormat, wr.ReadData(), false);
    aw.WriteData(outData);
    wr.Close();
    aw.Close();
}
于 2013-05-07T13:20:49.623 回答
0

from AlvasWavWriterWaveFileWriterfrom NAudio 都设计用于创建 WAV 文件,而不是 AIFF 文件。NAudio 不包含 AiffFileWriter,我也不了解 Alvas,但 AIFF 文件在 Windows 平台上并不常用。它们使用 big-endian 字节排序(WAV 使用 little-endian)并且 AIFF 文件格式对 WAV 文件有不同的“块”定义。

基本答案是您可能必须创建自己的 AIFF 编写代码。您可以在此处阅读 AIFF 规范。您基本上需要创建一个 FORM 块,其中包含一个 COMM(通用)块,后跟一个 SSND(声音数据)块。规范解释了在这些块中放入的内容(相当简单)。在 Windows 上您需要记住的主要事情是交换字节顺序。

于 2012-11-12T07:45:03.563 回答