2016-11-10 16 views
2

私のアプリケーションでは、いくつかの.wav形式のオーディオファイルがあります。を使用してオーディオファイルのビットレートを確認しています dll、ビットレートが128kbps未満であれば、 128kbpsを超えているので、私はチェックビットレートのために以下のコードを書きました。もしそれが128kbpsより小さければ、それは128kbpsより上に変換します。いくつかのファイルの場合.wav形式のオーディオファイルのビットレートを変更する方法

int bitrate; 
using (var reader = new WaveFileReader(textBox1.Text)) 
{ 
    bitrate = reader.WaveFormat.AverageBytesPerSecond * 8; 
    reader.Dispose(); 
} 

if (bitrate < 128000) 
{ 
    using (var reader = new WaveFileReader(textBox1.Text)) 
    { 
    var newFormat = new WaveFormat(8000, 16, 1); 
     using (var conversionStream = new WaveFormatConversionStream(newFormat, reader)) 
     { 
      WaveFileWriter.CreateWaveFile(@"C:\Docs\Files\", conversionStream); 
     } 
    } 
} 

は、それが正常に動作しているが、いくつかのファイルのために、私は、エラーの下に取得しています

型「NAudio.MmException」の未処理の例外がNAudio.dll で発生しました追加情報: AcmNotPossible呼び出すacmStreamOpen

私はエラーを添付しています。エラーError Snap ここで、どのようにしてこの問題を解決できますか?

答えて

0

FFmpegをご覧ください。これは私がすべてのオーディオ/ビデオ変換作業に使用するものです。

これは、ほとんどのオプションから何かに変換できるコマンドラインツールです。多くのオプションがあります。あなたが欲しいものを行うには、あなたはおそらくのようなものを実行する必要があります。上記の行では

$ ffmpeg -i input.wav -ab 128 output.wav 

を、我々は128ビットレートにファイルを変換します。コード内でこれを使用する

最も簡単な方法は、プロジェクト内のFFmpegの実行ファイルが含まれる(または環境変数として世界的にインストール)とのようなもので、それを直接呼び出すことです:

Process process = new Process(); 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.RedirectStandardError = true; 
process.StartInfo.FileName = "ffmpeg"; 

process.StartInfo.Arguments = $"-i \"{originalFile}\" -ab 128 \"{outputPath}\""; 

process.StartInfo.UseShellExecute = false; 
process.StartInfo.CreateNoWindow = false; 
process.Start(); 
process.WaitForExit(); 

よりエレガントなソリューションがあります - FFmpegの周りのラッパー - しかし、これはトリックを行う必要があります。

+1

こんにちは@ stoyan-berov、ffmpegは素晴らしいですが、それはrequirmentには適していません、ここで私たちはWebアプリケーションを持っていますので、私はそれをprogrameticallyだけに変換したい。ありがとうstoyan-berov。 –

+0

ねえ、私は最後にWebアプリケーションのためにFFmpegを使いました。これは.NET MVCプロジェクトです。上記のコード(またはこれに類するもの)を使用すると、プログラマチックにのみ変換を実行できます。ユーザーにはコンソールが表示されません。 –

+0

ok @ stoyan-berov。 。私が試してみます。 –

0

WaveFormatConversionStreamは、要求された変換を実行できるACMコーデックを探します。すべての変換が可能ではありません。たとえば、通常、サンプルレート、ビット深度、チャンネル数を一度に変更することはできません。したがって、可能な変換は、入力オーディオの正確なWaveFormatに依存します。ワンステップでダウンサンプリングし、別のステップでステレオからモノラルに移行する必要があります。 MediaFoundationResamplerは柔軟性が高く、1つのステップで実行できる可能性があります。

関連する問題