Я пытаюсь пересдать сигнал, который находится внутри буфера в JUCE и работает на Visual Basic.
http://www.juce.com/about-juce
Если быть точным: под избыточной выборкой я подразумеваю увеличение количества выборок за одно и то же время. Например, если исходный файл имеет частоту 44100 кГц, я бы хотел увеличить частоту дискретизации до 88200 кГц. Это полезно для ослабления любых цифровых артефактов, которые могут присутствовать в сигнале.
Насколько я понимаю, у Juce есть класс для этого: ResamplingAudioSource
http://www.juce.com/api/classResamplingAudioSource.html#details
Моя проблема в том, что я не знаю, как реализовать класс. Я попытался создать новый экземпляр класса следующим образом:
Класс PluginOversampler: общедоступный ResamplingAudioSource
{
общественности:
PluginOversampler ();
~ PluginOversampler ();
void setResamplingRatio (double samplesInPerOutputSample)
}
с мыслью, что я могу затем вызвать PluginOversampler :: setResamplingRatio (указанное соотношение здесь) изменить частоту передискретизации.
Но проект не будет компилироваться в Visual Basic. Ошибки многочисленны, исчисляются сотнями. Некоторые из них относятся к глобальной переменной string22 который я использую в различных файлах .cpp и .h
std::string string22 = "";
И когда полученная ошибка:
extern std::string string22;
1>c:\users\friendly2\downloads\final\ctrl\source\plugineditor.h(28): error C2377: 'std::string' : redefinition; typedef cannot be overloaded with any other symbol
Проект компилируется нормально, когда я опускаю объявление
PluginOversampler : public ResamplingAudioSource
Другие сообщения об ошибках предполагают, что заголовочные файлы Juce неправильно определяют типы, но я думаю, что ошибки произошли от моего собственного программирования, а не от файлов Juce, учитывая, что программа работала отлично (файл vst отлично работает в DAW) до Я реализовал это.
Я уже создал другой класс:
class PluginAudioProcessor : public PluginProcessor
{
public:
//==============================================================================
PluginWidthCtrlAudioProcessor();
~PluginWidthCtrlAudioProcessor();
...
...
}
Нужно ли сделать так, чтобы класс PluginAudioProcessor наследовал функции внутри ResamplingAudioSource? Я довольно потерян.
Вы можете использовать #define DONT_SET_USING_JUCE_NAMESPACE
И вы должны JUCE :: ResamplingAudioSource или любые другие классы сока.
Большинство классов JUCE уже определены в других библиотеках или в системных библиотеках. Это должно помочь вам в устранении большинства ошибок.
Если быть точным: под избыточной выборкой я подразумеваю увеличение количества выборок
за то же количество времени. Если исходный файл на 44100 кГц,
Например, я хотел бы увеличить частоту дискретизации до 88200 кГц.
Это полезно для ослабления любых цифровых артефактов, которые могут представлять
в сигнале.
Нет, это не так.
Это основная теория сигналов: Найквиста держит. Вы ничего не можете с этим поделать. Ваш сигнал оцифровывался со скоростью 44,1 кС / с один раз, и нет никакого способа вернуть информацию, которая была потеряна в ходе этого процесса (подсказка: нет информации, которая была потеряна; люди не могут физически воспринимать вещи с частотами выше 22,05 кГц ).
Теперь вполне разумно предположить, что звуковая карта, которая генерировала этот сигнал, не была полностью линейной по всему спектру 0 Гц — 22,05 кГц. Вы можете объяснить это уравнением, но это совсем другая история. Обычно во время этого процесса вы используете специально созданные цифровые фильтры на поддиапазонах, которые сами имеют ниже пропускная способность, чем ваш исходный сигнал, не выше. Однако выравнивание сигналов — сложная проблема, и вам нужно сначала оценить характеристики системы оцифровки, что, я думаю, практически невозможно, если у вас нет возможности ввести в нее известный эталонный сигнал.
РЕДАКТИРОВАТЬ: кстати, ваша ошибка выглядит так, как будто вы случайно попытались повторно ввести def std::string
(например, вы сделали что-то вроде typedef mytype std::string
вместо typedef std::string mytype
).