首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android SuperPowered SDK音频频域示例- memset频率操作

Android SuperPowered SDK音频频域示例- memset频率操作
EN

Stack Overflow用户
提问于 2017-03-19 21:33:26
回答 1查看 662关注 0票数 2

我正在努力理解超级动力SDK,但是对于安卓和C++,以及音频信号来说,都是全新的。这里有一个频域例子:Android/FrequencyDomain

在我的Nexus 5X上跑。在FrequencyDomain.cpp文件中:

代码语言:javascript
复制
static SuperpoweredFrequencyDomain *frequencyDomain;
static float *magnitudeLeft, *magnitudeRight, *phaseLeft, *phaseRight, *fifoOutput, *inputBufferFloat;
static int fifoOutputFirstSample, fifoOutputLastSample, stepSize, fifoCapacity;

#define FFT_LOG_SIZE 11 // 2^11 = 2048

static bool audioProcessing(void * __unused clientdata, short int *audioInputOutput, int numberOfSamples, int __unused samplerate) {
SuperpoweredShortIntToFloat(audioInputOutput, inputBufferFloat, (unsigned int)numberOfSamples); // Converting the 16-bit integer samples to 32-bit floating point.
frequencyDomain->addInput(inputBufferFloat, numberOfSamples); // Input goes to the frequency domain.

// In the frequency domain we are working with 1024 magnitudes and phases for every channel (left, right), if the fft size is 2048.
while (frequencyDomain->timeDomainToFrequencyDomain(magnitudeLeft, magnitudeRight, phaseLeft, phaseRight)) {
    // You can work with frequency domain data from this point.


 // This is just a quick example: we remove the magnitude of the first 20 bins, meaning total bass cut between 0-430 Hz.
    memset(magnitudeLeft, 0, 80);
    memset(magnitudeRight, 0, 80);

我知道前20个箱子是如何从这里0-430赫兹:How do I obtain the frequencies of each value in an FFT?

但我不明白梅塞特80的价值.是4* 20,浮动*20回收箱是4个字节吗?magnitudeLeft是否保存所有频率的数据?例如,我如何从中间移除10个频率箱,或者从末端移除最高的频率?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-20 20:51:32

magnitudeLeft和magnitudeRight中的每个值都是一个浮点数,它是32位,4个字节.

memset采用若干字节参数,因此20个回收箱*4个字节=80个字节。梅塞特用这种方式清理前20个垃圾箱。

magnitudeLeft和magnitudeRight都代表1024个浮标的全频率范围。它们的大小通常是FFT的大小除以2,所以在示例中是2048 /2。

从中间和顶部移除看起来像:

memset(&magnitudeLeftindex_of_first_bin_to_remove,0,number_of_bins *(浮子);

请注意,第一个参数不与sizeof(浮点数)相乘,因为编译器知道magnitudeLeft是浮点数,因此它将自动输入正确的地址。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42892561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档