0

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

4

1 回答 1

0

你需要:

using System.IO;

这段代码获取字节数组

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

PathToFile文件的位置(作为字符串)在哪里.wav

编辑:

现在我有一个音频文件(2 个通道,44.1kHz 采样率,16 位采样大小,WAV)我想将它传递给这个方法,但我不确定将 WAV 文件转换为字节数组的任何方法。

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

于 2013-06-26T10:18:06.130 回答