2013-06-26 5 views
0

Прямо сейчас у меня есть аудиофайл (2 канала, частота дискретизации 44,1 кГц, размер выборки 16 бит, WAV). Я хотел бы передать его в этот метод, но я не уверен в каком-либо способе конвертировать WAV файл в массив байтов.Обработка звука 16 бит аудио

/// <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

Возможно, вы захотите ознакомиться с этим http://stackoverflow.com/questions/8754111/how-to-read-the-data-in-a-wav-file -to-an-array – MisterMetaphor

+0

Привет, спасибо. Я посмотрел на него и выяснил, что я предполагаю только получить массив байтов, содержащий блок данных. На стороне примечания, пример дал возврат двойника. Как я могу изменить его на массив байтов, чтобы передать его в мой метод здесь. Пожалуйста, поправьте меня, если я где-то ошибаюсь. –

+0

попробуйте файл libsoundfile или один из многих онлайн-ссылок, которые объясняют, как читать данные из wav-файла. –

ответ

0

вам нужно:

using System.IO; 

и этот код, чтобы получить массив байтов

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

где PathToFile это место (как строка) из файла .wav.

Edit:

Прямо сейчас у меня есть аудиофайл (2 канала, 44,1 частота дискретизации, размер 16bit проб, WAV) Я хотел бы передать его в этот метод, но я не уверен, что любой способ преобразования WAV-файла в массив байтов.

Он запрашивает функцию для получения байтового массива из файла .wav, он ничего не сказал о получении конкретной части массива байтов, содержащей данные музыки. Итак, правильный ответ:

+0

Это будет полный файл с заголовком RIFF и т. Д. Я думаю, что речь шла о обработке аудиоданных из WAV-файла. – MisterMetaphor

+0

Извините, но он спросил, как преобразовать WAV-файл в массив байтов. И не как получить DataChunk ... –

+0

Sry для путаницы. Я проголосовал за ур-ответ, так как пример, который я дал, был тем, что я «изначально» хотел спросить. –

Смежные вопросы