2012-03-13 18 views
0

波の読み取り、変更、書き込みにNAudioを使用したいと思います。このライブラリにあるWaveファイルのサンプルを個別に取得して設定するための直接アクセスはありますか?たとえば、wavファイルを開きたい場合は、すべてのチャンネルで5番目のサンプルの値を浮動小数点として取得したいと考えています。私はまた、これらの5番目のサンプルをどのように変更する方法があるのか​​天気を知りたいと思っています。その後、この修正された結果をどのように保存することができますか?どうすればこのことができるのか、私を助けて見せることができますか?私は今までに何のドキュメンテーションも見つけていませんでしたか?ありがとうございました。NAudio - 個々のサンプルへのアクセスと変更

+0

私見を、NAudioは、あなたが-何をしているかのようなもののためにやり過ぎです。たぶんこれは:http://www.codeproject.com/Articles/35725/C-WAV-file-class-audio-mixing-and-some-light-audio –

+0

私はその特定のプロジェクトに気付きましたが、それ以上はサポートしていませんモノラルおよびステレオのwav-sよりも優れています。もしあなたがこの知識を持っていれば、それらのサンプルに到達する方法を教えてください。 –

+0

マルチチャンネルのwavファイルはすべてのライブラリでサポートされていないので、サンプルから始めてそこから作業を進めてください。ここではnaudioの作者がいますが、おそらくその話題について少し明るい話をするでしょう。 –

答えて

3

はい、NAudioは、個々のオーディオサンプルにアクセスできるように設計されています。しかし、さまざまなオーディオフォーマット(ビット深度、圧縮タイプなど)があるので、これを行う普遍的な方法はありません。 WaveFileReaderクラスを使用すると、生のバイトデータにアクセスできます。その後、各バイトのペアを自分で16ビットのサンプルに変換したり、NAudioヘルパークラスを利用して、16ビットオーディオ(オーディオが16ビットであることが前提)でより簡単に作業できるようにします。次に、WaveFileWriterクラスを使用して、修正されたオーディオをディスクに書き戻します。あなたはフロートなどのオーディオに対処したい場合は

また、あなたは新しいAudioFileReaderクラスを使用することができ、それは、Readメソッド伝わってくるよう、それは非常に簡単にフロートとして各サンプルの値を調べることが可能おり、ISampleProviderを実装しています。あなたはその読む方法ソースAudioFileReaderとが調べから読み込み、オーディオ変更し、独自のISampleProvider作成します。

var reader = new AudioFileReader(); 
var mySampleProvider = new MySampleProvider(reader); 
WaveFileWriter.CreateWaveFile(mySampleProvider, "example.wav"); 

... 
class MySampleProvider: ISampleProvider 
{ 
    private readonly ISampleProvider source; 

    public MySampleProvider(ISampleProvider source) 
    { 
     this.source = source; 
    } 

    public int Read(float[] buffer, int offset, int count) 
    { 
     int samplesRead = source.Read(buffer, offset, count); 
     // TODO: examine and optionally change the contents of buffer 
     return samplesRead; 
    } 

    public WaveFormat WaveFormat 
    { 
     get { return source.WaveFormat; } 
    } 
} 
関連する問題