gpt4 book ai didi

android - Superpowered SDK - 实时过滤器

转载 作者:行者123 更新时间:2023-11-28 01:37:14 25 4
gpt4 key购买 nike

我的目标是制作一个从麦克风捕捉音频然后将其传递给带通滤波器并将其乘以一些增益然后将结果实时输出到扬声器的应用程序
所以我在 Superpowered SDK 中编辑了 FrequencyDomain.cpp 示例以符合我的目的,我尝试了这段代码但我听不到输出音频,,我的代码中缺少什么?

static SuperpoweredFrequencyDomain *frequencyDomain;
static float *inputBufferFloat;

// This is called periodically by the media server.
static bool audioProcessing(void * __unused clientdata, short int
*audioInputOutput, int numberOfSamples, int __unused samplerate) {
// Creating the filter.
SuperpoweredFilter *filter = new
SuperpoweredFilter(SuperpoweredFilter_Resonant_Lowpass, samplerate);
filter->setResonantParameters(1000.0f, 0.1f);
filter->enable(true);
filter->process(stereoBuffer, stereoBuffer, numberOfSamples);
SuperpoweredShortIntToFloat(audioInputOutput, inputBufferFloat, (unsigned int)numberOfSamples); // Converting the 16-bit integer samples to 32-bit floating point.
}
extern "C" JNIEXPORT void
Java_com_superpowered_frequencydomain_MainActivity_FrequencyDomain(JNIEnv *
__unused javaEnvironment, jobject __unused obj, jint samplerate, jint buffersize) {


inputBufferFloat = (float *)malloc(buffersize * sizeof(float) * 2 + 128);

SuperpoweredCPU::setSustainedPerformanceMode(true);
new SuperpoweredAndroidAudioIO(samplerate, buffersize, true, true, audioProcessing, NULL, -1, SL_ANDROID_STREAM_MEDIA, buffersize * 2); // Start audio input/output.
}

最佳答案

不要在音频处理回调中创建过滤器。正如您在上面的评论中看到的那样,媒体服务器(操作系统的音频堆栈)会定期调用它。

只有 filter->process() 应该在音频处理回调中。

您没有听到音频输出,因为音频处理回调中的其余代码都是无稽之谈。

麦克风输入到达“audioInputOutput”数组。您需要首先使用 SuperpoweredShortIntToFloat 将其转换为 float 据。然后你需要用你的过滤器处理这些数据。最后,使用 SuperpoweredFloatToShortInt 将数据转换回 short int。那只是 3 行代码。

关于android - Superpowered SDK - 实时过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com