1

プロジェクトの一部として .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);
   }
}

どんな助けでも大歓迎です:)

4

2 に答える 2

1

Alvas.Audio の最新バージョンについては、以下のコードを参照してください: 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 はどちらも、AIFF ファイルではなく、WAV ファイルを作成するように設計されています。NAudio には AiffFileWriter が含まれていません。Alvas については知りませんが、AIFF ファイルは Windows プラットフォームでは一般的に使用されていません。それらはビッグ エンディアンのバイト順を使用し (WAV はリトル エンディアンを使用)、AIFF ファイル形式には WAV ファイルとは異なる「チャンク」定義があります。

基本的な答えは、おそらく独自の AIFF 書き込みコードを作成する必要があるということです。ここで AIFF 仕様を読むことができます。基本的に、COMM (共通) チャンクとそれに続く SSND (サウンド データ) チャンクを含む FORM チャンクを作成する必要があります。仕様では、これらのチャンクに何を入れるかが説明されています (かなり単純です)。Windows で覚えておく必要がある主なことは、バイト順を入れ替えることです。

于 2012-11-12T07:45:03.563 に答える