C#使用NAudio转换wav文件

C#使用NAudio转换wav文件,c#,audio,audio-streaming,naudio,C#,Audio,Audio Streaming,Naudio,我有一个WAV文件,其值为2^16,介于0到2之间。 我想将其更改为2^8个值。。。这意味着它将拥有更少的信息,但占用更少的空间 我有转换的公式,但我不知道如何访问数据 我阅读了以下文件: wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName)); while (wave.Position < wave.Length) { read = wave.Read(bu

我有一个WAV文件,其值为2^16,介于0到2之间。 我想将其更改为2^8个值。。。这意味着它将拥有更少的信息,但占用更少的空间

我有转换的公式,但我不知道如何访问数据

我阅读了以下文件:

 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));

 while (wave.Position < wave.Length)
   {
    read = wave.Read(buffer,0,16348); 
   }
wave=new NAudio.wave.WaveChannel32(new NAudio.wave.waveilereader(open.FileName));
while(波位<波长)
{
读取=波形读取(缓冲器,016348);
}
现在我可以使用wave或buffer

如何将波浪修改为2^8?我想传递每个值并将其转换。。但我不知道如何访问转换的值


例如,如果我有一个表示wav文件的浮点数组,我将知道如何继续。

要访问数据,请使用读卡器的读取方法:

var myReader = new WaveFilereader(filename);
int bytesRead = 0;
var readChunck = new byte[1024];
do
{
   //Read 1024 bytes at a time, will return 0 when there are no more bytes to Read
   bytesRead = myReader.Read(readChunk, 0 , readChunk.length );

   //Process the bytes here

}
while(bytesRead != 0)
P> >你可以通过使用媒体基金会重新采样器来重置音频,从而使你的生活更轻松。你可以通过做这样的事情来降低音频与媒体基金会重新采样的频率:

   //Read 2-channel Audio with sample rate 44.1Khz 
    var myReader = new WaveFileReader(filename); 

    //New Waveformat has 2-channels and sample rate 22KHz
    var myOutputFormat = new WaveFormat(22000,2); 

    //Resample
    var resampledAudio = new MediaFoundationResampler(myReader, myOutputFormat)  
                                                     { ResamplerQuality = 60 });

有关音频转换的更多信息,请参见。

按2^8和2^16,是否参考样本的位宽度?这将降低文件质量。。。例如,在图像中,如果我有256种颜色,这是2^8个可能的值。。我想将其降级为黑白,即2^1个值。当然,这只是一个明确的例子……最后一个代码片段的可能重复似乎只会影响采样率和通道数,但保持采样位宽度(这是OP想要更改的)……我不认为OP想要更改音频的位深度,他想做的只是将音频中的采样数从2^16减少到2^8,这是通过下采样实现的。更改位深度只会影响用于表示一个采样的位数,而不会影响采样数。查看上面OP的评论,他在评论中对2^8=256色和2^1=黑白进行了类比。我认为从这一点可以清楚地看出,他关心的是位宽/位深。那么我认为OP的问题是这个问题的重复: