处理 16 位样本音频
Posted
技术标签:
【中文标题】处理 16 位样本音频【英文标题】:Processing 16bit sample audio 【发布时间】:2013-06-26 09:44:11 【问题描述】:现在我有一个音频文件(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 并将其转换为频谱图。谢谢。
【问题讨论】:
你可能想看看这个***.com/questions/8754111/… 您好,感谢您的参考。我看了看,发现我想只检索包含数据块的字节数组。在旁注中,该示例返回了双精度数。我如何将其更改为字节数组以将其传递到我的方法中。如果我在任何地方错了,请纠正我。 尝试 libsoundfile 或解释如何从 wav 文件中读取数据的众多在线参考文献之一。 【参考方案1】:你需要:
using System.IO;
这段代码获取字节数组
byte[] data = File.ReadAllBytes(PathToFile);
其中PathToFile
是.wav
文件的位置(作为字符串)。
编辑:
现在我有一个音频文件(2 通道,44.1kHz 采样率,16 位采样大小,WAV)我想将它传递给这个方法,但我不确定将 WAV 文件转换为字节的任何方法大批。
他要求一个函数从 .wav 文件中获取字节数组,但他没有说明获取字节数组中包含音乐数据的特定部分。 所以拒绝一个正确的答案是..
【讨论】:
这将读取完整的文件,包括 RIFF 标头和内容。我认为问题是关于处理来自 WAV 文件的音频数据。 抱歉,他问如何将 .wav 文件转换为字节数组。而不是如何获取 DataChunk... 抱歉造成混乱。我对你的答案投了赞成票,因为你给出的例子是我“最初”想问的。以上是关于处理 16 位样本音频的主要内容,如果未能解决你的问题,请参考以下文章