Преобразование файлов .wav в .aiff в С#

Я пытаюсь написать класс, который будет преобразовывать файлы .wav в файлы .aiff как часть проекта.

Я наткнулся на пару библиотек Alvas.Audio (http://alvas.net/alvas.audio,overview.aspx) и NAudio (http://naudio.codeplex.com)

Мне интересно, есть ли у кого-нибудь опыт работы с любым из них, поскольку я действительно изо всех сил пытаюсь понять, как написать файл в формате aiff, используя любую библиотеку.

Пока у меня есть следующий код, но я не могу понять, как определить выходной файл как 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();

NAudio

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

Любая помощь будет принята с благодарностью :)


person Keith Boynton    schedule 11.11.2012    source источник


Ответы (2)


Код последней версии Alvas.Audio см. ниже: Как преобразовать .wav в .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();
}
person user2217261    schedule 07.05.2013

WavWriter от Alvas и WaveFileWriter от NAudio предназначены для создания файлов WAV, а не файлов AIFF. NAudio не включает AiffFileWriter, и я не знаю об Alvas, но файлы AIFF обычно не используются на платформах Windows. Они используют порядок байтов с прямым порядком байтов (WAV использует обратный порядок байтов), а формат файла AIFF имеет другие определения «фрагментов» для файла WAV.

Основной ответ: вам, вероятно, придется создать свой собственный код для написания AIFF. Вы можете прочитать спецификацию AIFF здесь . В основном вам нужно создать фрагмент FORM, который содержит фрагмент COMM (общий), за которым следует фрагмент SSND (звуковые данные). Спецификация объясняет, что помещать в эти куски (это довольно просто). Главное, что вам нужно помнить в Windows, — это поменять порядок байтов.

person Mark Heath    schedule 12.11.2012
comment
Alvas 7.1 также не поддерживает AIFF. - person fofik; 12.11.2012
comment
Да, это вывод, к которому я пришел сегодня. Это звучит просто в теории, хотя на практике я обнаружил, что это не так просто. Aumplib - это еще одна библиотека, хотя и просто оболочка, которая, кажется, точно соответствует тому, что мне нужно (у нее есть AiffWriter), хотя, похоже, она больше не очень хорошо PInvoke DLL. Я удивлен, что нет библиотек, за которые я мог бы заплатить, чтобы удовлетворить эту потребность! - person Keith Boynton; 13.11.2012