正在处理16位采样音频

本文关键字:采样 音频 16位 处理 | 更新日期: 2023-09-27 18:19:52

现在我有一个音频文件(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,并将其转换为频谱图。谢谢

正在处理16位采样音频

您需要:

using System.IO;

和这个代码得到的字节数组

byte[] data = File.ReadAllBytes(PathToFile);

其中PathToFile.wav文件的位置(作为字符串)。

编辑:

现在我有一个音频文件(2个通道,44.1kHz采样率,16位采样大小,WAV)我想把它传递到这个方法中,但我不确定是否有任何方法可以把WAV文件转换成字节数组。

他要求一个函数从.wav文件中获取字节数组,但他没有说要获取包含音乐数据的字节数组的特定部分。所以向下投票的正确答案是..