我有一个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或缓冲区。
我如何修改波形有2 ^ 8?我想传递每个值并转换它..但我不知道如何访问转换的值。
例如,如果我有一个代表wav文件的浮点数组,我将知道如何继续。
答案 0 :(得分:2)
要访问数据,请使用阅读器的Read方法:
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)
或者,您只需使用媒体基础重采样器重新采样音频,即可让您的生活更轻松。您可以使用Media Foundation resampler对音频进行下采样,方法如下:
//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 });
有关音频转换的详细信息,请参阅THIS。