Можно ли использовать SuperpoweredFloatToShortIntInterleave для обработки воспроизведения мультимедиа с устройств?
У меня возникли некоторые проблемы с пониманием обработки звука Superpowered. Все было хорошо, когда я использовал входные буферы SuperpoweredFloatToShortInt как;
buffer[n] = (float *)memalign(16, (buffersize + 16) * sizeof(float) * 2);)
затем я понял, что мой аудио вывод был моно все это время, поэтому я решил обработать свой вывод, используя SuperpoweredFloatToShortIntInterleave, чтобы выдать эффект объемного стерео. Используя ту же переменную buffer [n], мой звук был обработан, но при тестировании на устройстве он был искажен и низкочастотен в сторону низких частот.
Я также попытался иметь отдельные переменные буфера, как показано здесь с помощью этих:
inputBufferFloat = (float *)malloc(buffersize * sizeof(float) * 2 + 128);
leftInputBuffer = (float *)malloc(buffersize * sizeof(float) + 128);
rightInputBuffer = (float *)malloc(buffersize * sizeof(float) + 128);
leftOutputBuffer = (float *)malloc(buffersize * sizeof(float) + 128);
rightOutputBuffer = (float *)malloc(buffersize * sizeof(float) + 128)
static bool audioProcessing(void * __unused clientdata, short int *audioInputOutput, int numberOfSamples, int
__unused samplerate) {
SuperpoweredShortIntToFloat(audioInputOutput, inputBufferFloat, numberOfSamples, 2);
SuperpoweredDeInterleave(inputBufferFloat, leftInputBuffer, rightInputBuffer, numberOfSamples);
FIR(leftInputBuffer, leftOutputBuffer, numberOfSamples);
FIR(rightInputBuffer, rightOutputBuffer, numberOfSamples);
SuperpoweredFloatToShortIntInterleave(leftOutputBuffer, rightOutputBuffer, audioInputOutput,
numberOfSamples);
return true;
}
Но приложение мгновенно падает при тестировании. Пожалуйста, любая помощь будет высоко ценится. Благодарю.
1 ответ
Вы можете настроить аудио ввод / вывод с другим "размером буфера", таким как "размер буфера", умноженным на два. В этом случае ваш "numberOfSamples" будет в два раза больше, а ваши буферы недостаточно велики.