Как загрузить аудиофайлы для импульсных характеристик с помощью Juce

В настоящее время я создаю плагин реверберации свертки для университета, и я загрузил уже созданную библиотеку свертки для использования в плагине. У меня есть код, который генерирует импульсный отклик, но я не совсем уверен, как загрузить в процесс реальный аудиофайл.

Вот класс конвольвера:

class FFTConvolver
{  
public:
  FFTConvolver();  
  virtual ~FFTConvolver();

  /**
  * @brief Initializes the convolver
  * @param blockSize Block size internally used by the convolver (partition size)
  * @param ir The impulse response
  * @param irLen Length of the impulse response
  * @return true: Success - false: Failed
  */
  bool init(size_t blockSize, const Sample* ir, size_t irLen);

  /**
  * @brief Convolves the the given input samples and immediately outputs the result
  * @param input The input samples
  * @param output The convolution result
  * @param len Number of input/output samples
  */
  void process(const Sample* input, Sample* output, size_t len);

  /**
  * @brief Resets the convolver and discards the set impulse response
  */
  void reset();

private:
  size_t _blockSize;
  size_t _segSize;
  size_t _segCount;
  size_t _fftComplexSize;
  std::vector<SplitComplex*> _segments;
  std::vector<SplitComplex*> _segmentsIR;
  SampleBuffer _fftBuffer;
  audiofft::AudioFFT _fft;
  SplitComplex _preMultiplied;
  SplitComplex _conv;
  SampleBuffer _overlap;
  size_t _current;
  SampleBuffer _inputBuffer;
  size_t _inputBufferFill;

  // Prevent uncontrolled usage
  FFTConvolver(const FFTConvolver&);
  FFTConvolver& operator=(const FFTConvolver&);
};

А вот код, который я использовал для реализации импульсного отклика (но не аудиофайла):

//convolver
    ir.ensureStorageAllocated (512);
    zeromem (ir.getRawDataPointer(), 512 * sizeof(float));
    ir.set (0, 1.0f);


    for (int i = 0; i < 10; ++i)
    {
        ir.set (Random::getSystemRandom().nextInt (512),
                Random::getSystemRandom().nextFloat() * 2.f - 1.f);
    }

    convolver.init (128, ir.getRawDataPointer(), 512);

и в блоке процесса...

convolver.process (inputData, channelData, buffer.getNumSamples());

Может ли кто-нибудь сказать мне, как я могу использовать реальный аудиофайл импульсной характеристики?


person willfo    schedule 22.10.2015    source источник


Ответы (2)


JUCE может помочь вам в этом, наиболее важными частями документации являются:

person OMGtechy    schedule 22.10.2015
comment
Я добавил редактирование попытки чтения аудиофайла, но я все еще получаю сообщения об ошибках, я на правильном пути? - person willfo; 22.10.2015
comment
@willfo, если вы решили свою первоначальную проблему (которая, похоже, у вас есть), отметьте ее как принятую, отмените свое редактирование и задайте новый вопрос относительно новых проблем с компонентами JUCE. Буду рад помочь там! Другим пользователям будет проще искать ответы на свои проблемы, если каждый вопрос задает ровно одну вещь. - person OMGtechy; 22.10.2015

Самое простое решение — прочитать несжатый файл .WAV. Это тривиальный формат файла, вы можете легко его разобрать. Поскольку он несжатый, вы можете получить доступ к образцам, используя int16_t*

person MSalters    schedule 22.10.2015
comment
Вы подразумеваете, что каждый образец имеет 16 бит? Даже Wav не так прост. - person deviantfan; 22.10.2015
comment
Не могли бы вы привести пример того, как я могу загрузить файл .wav в функцию? - person willfo; 22.10.2015
comment
@deviantfan: Несжатые одноканальные WAV-файлы на самом деле так просты. У нас их несколько гигабайт. @ willfo: Не влезет в комментарий, авторские права на него принадлежат моему работодателю, но написать собственный синтаксический анализатор .WAV несложно. В Википедии правильный формат. - person MSalters; 22.10.2015