现在我有一个音频文件(2个频道,44.1kHz采样率,16位样本大小,WAV)我想把它传递给这个方法,但我不知道有什么方法可以将WAV文件转换成一个字节阵列。
/// <summary>
/// Process 16 bit sample
/// </summary>
/// <param name="wave"></param>
public void Process(ref byte[] wave)
{
_waveLeft = new double[wave.Length / 4];
_waveRight = new double[wave.Length / 4];
if (_isTest == false)
{
// Split out channels from sample
int h = 0;
for (int i = 0; i < wave.Length; i += 4)
{
_waveLeft[h] = (double)BitConverter.ToInt16(wave, i);
_waveRight[h] = (double)BitConverter.ToInt16(wave, i + 2);
h++;
}
}
else
{
// Generate artificial sample for testing
_signalGenerator = new SignalGenerator();
_signalGenerator.SetWaveform("Sine");
_signalGenerator.SetSamplingRate(44100);
_signalGenerator.SetSamples(16384);
_signalGenerator.SetFrequency(5000);
_signalGenerator.SetAmplitude(32768);
_waveLeft = _signalGenerator.GenerateSignal();
_waveRight = _signalGenerator.GenerateSignal();
}
// Generate frequency domain data in decibels
_fftLeft = FourierTransform.FFTDb(ref _waveLeft);
_fftRight = FourierTransform.FFTDb(ref _waveRight);
}
编辑您好抱歉。我目前刚接触音频信号,所以我对我可能想要得到的解释是错误的。为了使此方法正常工作,我相信我只需要传入wav文件中数据块的字节数组。最终结果是在代码中显示fft并将其转换为谱图。感谢。
答案 0 :(得分:0)
你需要:
using System.IO;
此代码获取字节数组
byte[] data = File.ReadAllBytes(PathToFile);
其中PathToFile
是.wav
文件的位置(作为字符串)。
编辑:
现在我有一个音频文件(2个频道,44.1kHz采样率,16位样本大小,WAV)我想把它传递给这个方法,但我不知道有什么方法可以将WAV文件转换成一个字节阵列。
他要求一个函数从.wav文件中获取字节数组,他没有说明如何获取包含音乐数据的字节数组的特定部分。 所以,正确的答案是正确的答案..