2017-08-15 29 views
0

NAudioを使用してステレオ.wavファイルをモノラルに変換しようとしています。 1つの要件は、Azureでこのコードを実行する必要があるため、ネイティブコールを使用できないことです。ここに私が来たものは次のとおりです:wavファイルをモノに変換する

using (var waveFileReader = new WaveFileReader(sourceFileName)) 
    { 
     var toMono = new StereoToMonoProvider16(waveFileReader); 
     WaveFileWriter.CreateWaveFile(destFileName, toMono); 
    } 

私のコードはエラーなしで動作しますが、出力は純粋な無音を含むファイルです。

ファイルをモノに変換する他の方法はありますか?

+0

.wavファイルはバイトの配列です。外部ライブラリなしで処理することができます。唯一の問題は、どのように変換を定義するかです。つまり、L、Rの2つのチャンネルがあるとすれば、あなたの出力はどれくらいですか?その合計?平均? – TDG

+0

はい、私は知っていますが、私はwavファイルフォーマットを考え出し、すべてをゼロから作成することに時間を費やす必要はないと考えました。もちろん、NAudioのようなライブラリにはすでにそういうものがあるはずですか? 実際、mscorlibだけでほとんど何でもできますが、何がポイントですか? – ulu

+0

なぜwscファイルをバイト配列として読み込み、オーディオデータをループして単純な計算を行うにはmscorlibが必要ですか? – TDG

答えて

0

LeftVolumeおよびRightVolumeプロパティの値を指定する必要があります。たとえば、チャネルを混合するには0.5fに設定し、右チャネルを破棄するには、左に1.0を、右に0.0を設定します。

1

このコードは私にとって役に立ちました。

public static void StereoToMono(string sourceFile, string outputFile) 
    { 
     using (var waveFileReader = new WaveFileReader(sourceFile)) 
     { 
      var outFormat = new WaveFormat(waveFileReader.WaveFormat.SampleRate, 1); 
      using (var resampler = new MediaFoundationResampler(waveFileReader, outFormat)) 
      { 
       WaveFileWriter.CreateWaveFile(outputFile, resampler); 
      } 
     } 
    } 

channelsパラメータがoutFomatため1を渡されることに注意してください。

+0

これは私のPCで動作しますが、残念ながらAzureではなく、DLL 'mfplat.dll'を読み込めません。ネイティブDLLを使用せずに変換できるかどうかは疑問です。 – ulu

0

このコードはさえAzureの上で、私の仕事:ソースはfloat形式であったため、私は、追加のコンバータ(WaveFloatTo16Provider)を使用してい

private void ConvertToMono(string sourceFileName, string destFileName) { 
    var monoFormat = new WaveFormat(44100, 1); 
    using (var waveFileReader = new WaveFileReader(sourceFileName)) 
    { 
     var floatTo16Provider = new WaveFloatTo16Provider(waveFileReader); 
     using (var provider = new WaveFormatConversionProvider(monoFormat, floatTo16Provider)) 
     { 
      WaveFileWriter.CreateWaveFile(destFileName, provider); 
     } 
    } 

} 

注意を。

関連する問題