0

C# で NAudio を使用して、wave ファイルを 48,000、8 ビット、モノラルに変換しています。変換されたデータをバイト配列に格納しています。私のコードは以下です。正常に動作しますが、新しい wave ファイル データは署名されていないため、署名する必要があります。

WaveFormat target = new WaveFormat(48000, 8, 1);
WaveStream stream = new WaveFileReader(this.FilePath);
WaveFormatConversionStream conv = new WaveFormatConversionStream(target, stream);
this.ConvertedData = new byte[conv.Length];
conv.Position = 0;
conv.Read(this.ConvertedData, 0, Convert.ToInt32(conv.Length));
stream.Dispose();
conv.Dispose();

データが変換された後にバイト配列をループして、各バイトから 128 を減算してみました。これは、このサイトで見つけた解決策です。

for (int i = 0; i < end; i++)
{
    signed = (int)this.ConvertedData[i] - 128;
    this.Data[i] = (byte)signed;
}

この種の方法は機能しますが、絶対確実というわけではなく、もっと良い方法があるはずです。どんな提案でも大歓迎です。ありがとう。

4

3 に答える 3

0

符号なしバイト配列から符号付きバイト配列に変換するためのより良い方法を探している場合は、Buffer.BlockCopyメソッドを使用するか、sbyte []signed =(sbyte [])(Array)unsignedを試してください。それが役に立てば幸い。

于 2012-08-18T14:56:09.937 に答える
0
WaveFormat target = new WaveFormat(48000, 8, 1);
WaveStream stream =new WaveFileReader(this.FilePath);
WaveFormatConversionStream str = new WaveFormatConversionStream(target, stream);
WaveFileWriter.CreateWaveFile("c:\\converted.wav", str); //or the path of .wav file

代わりに WaveFileWriter.CreateFile メソッドを使用してみてください。

Checkout NAudio このリンクからもチェックアウトできます C# オーディオ ライブラリ Alvis.Audioがあります

于 2012-08-18T14:51:05.567 に答える
0

コメントできないので、回答機能を「誤用」する必要があります。

試す:

Convert.toSByte

文字列ベースですが、動作するはずです...

http://msdn.microsoft.com/en-us/library/b0hdkwd9.aspx

于 2012-08-18T14:53:48.807 に答える