- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将频谱保存在我的 FMOD_DSP_PARAMETER_FFT 中,但我只收到充满零的频谱,如果你能看到我的错误我会同意,我认为我没有很好地将 DSP 连接到 channel 或类似的东西,因为我没有在代码中发现错误。
我现在的代码是这样的:
FMOD::System *system;
FMOD::Sound *sound1;
FMOD::Channel *channel = 0;
FMOD::ChannelGroup *mastergroup;
FMOD::ChannelControl *control;
FMOD::DSP *mydsp, *dsphead, *dspchannelmixer;
FMOD::DSPConnection *conection;
FMOD_RESULT result;
unsigned int version;
result = FMOD::System_Create(&system);
result = system->getVersion(&version);
result = system->init(32, FMOD_INIT_NORMAL, NULL);
result = system->createSound("MySong.mp3",FMOD_DEFAULT, 0, &sound1);
result = sound1->setMode(FMOD_LOOP_NORMAL);
result = system->playSound(sound1, 0, true, &channel);
/*
Create the DSP effect.
*/
result = system->getMasterChannelGroup(&mastergroup);
result = system->createDSPByType(FMOD_DSP_TYPE_FFT, &mydsp);
result = system->getMasterChannelGroup(&mastergroup);
result = mastergroup->addDSP(0, mydsp);
result = mydsp->setBypass(true);
result = mydsp->setActive(true);
char s[256];
unsigned int len;
float freq[32];
float fft = 0;
std::vector<float> fftheights;
float m_spectrum_data[FFT_NUM_BINS];
while (1) { //program loop
unsigned int ms = 0;
unsigned int lenms = 0;
bool playing = 0;
bool paused = 0;
int channelsplaying = 0;
if (channel)
{
FMOD::Sound *currentsound = 0;
result = channel->setPaused(false);
result = channel->setMute(false);
result = channel->isPlaying(&playing);
result = channel->getPaused(&paused);
result = channel->setVolume(0.5);
result = channel->getPosition(&ms, FMOD_TIMEUNIT_MS);
channel->getCurrentSound(¤tsound);
if (currentsound)
{
result = currentsound->getLength(&lenms, FMOD_TIMEUNIT_MS);
}
}
system->getChannelsPlaying(&channelsplaying);
FMOD_DSP_PARAMETER_FFT *fftparameter;
float val;
char s[256];
unsigned int len;
float *data = 0;
float freq[32];
int rate, chan, nyquist;
int windowsize = 1024;
result = system->getSoftwareFormat(&rate, 0, 0);
result = mydsp->setParameterInt(FMOD_DSP_FFT_WINDOWTYPE, FMOD_DSP_FFT_WINDOW_TRIANGLE);
result = mydsp->setParameterInt(FMOD_DSP_FFT_WINDOWSIZE, windowsize);
result = mydsp->getParameterFloat(FMOD_DSP_FFT_DOMINANT_FREQ, &val, 0, 0);
result = mydsp->getParameterData(FMOD_DSP_FFT_SPECTRUMDATA, (void **)&fftparameter, &len, s, 256);
nyquist = windowsize / 2;
for (chan = 0; chan < 2; chan++)
{
float average = 0.0f;
float power = 0.0f;
for (int i = 0; i < nyquist - 1; ++i)
{
float hz = i * (rate * 0.5f) / (nyquist - 1);
int index = i + (16384 * chan);
if (fftparameter->spectrum[chan][i] > 0.0001f) // arbitrary cutoff to filter out noise
{
average += data[index] * hz;
power += data[index];
}
}
if (power > 0.001f)
{
freq[chan] = average / power;
}
else
{
freq[chan] = 0;
}
}
printf("\ndom freq = %d : %.02f %.02f\n", (int)val, freq[0], freq[1]);
}
我的 fftparameter->spectrum 始终是零值数组...是否可以在不修改正在播放的声音的情况下连接它?谢谢。
最佳答案
您的代码示例中有一些突出的问题。
result = mydsp->setBypass(true);
绕过,导致无法处理。我认为您的主要问题可能是 setBypass 调用,请使用 setBypass(false)。
关于c++ - 在 Fmod Studio C++ 中保存 FFT 频谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288081/
我研究了旧代码,看到了这样一个函数: inline double mod(double x, double y) { return x-y*floor(x/y); } fmod 是完全等效的,
我遇到了一个非常奇怪的情况:在我正在开发的多线程应用程序中,在某个代码点 fmod(x,y) 返回 -1.#IND00 而 double x = 0.0 和 double y = 1.0。当然,我仔细
这个问题在这里已经有了答案: Is floating point math broken? (31 个答案) 关闭 4 年前。 当我调用我的函数时: formatCurrency(7.5); str
当我在 C++ 中使用 fmod(0.6,0.2) 时,它返回 0.2 我知道这是由浮点精度引起的,但现在看来我必须得到两个双倍的余数 非常感谢对此类问题的任何解决方案 最佳答案 数学值 0.6 和
我试图在 3D 平面中表示声音的频谱,但我只能播放声音而无法将 dsp 放入结构 FMOD_DSP_PARAMETER_FFT,numchannels 和 length 始终 = 0 我的代码是这样的
好的,我希望我不要搞砸了,我已经寻找了一些答案,但找不到任何东西。我正在尝试在 3D 模式下使用 FMOD 声音播放器在 openframeworks 中制作一个简单的采样器。我可以使单个实例正常工作
这可能是 FMOD 的内置功能,但我想看看是否可以覆盖它。 使用 FMOD_System_PlaySound 播放声音时, FMOD_System_PlaySound( system, FMOD_CH
为什么 PHP 的 fmod 函数不能按预期工作。我错过了什么吗? fmod(2.0, 0.1); // outputs 0.1 以下应输出 0,因为 2.0/0.1 = 20,因此没有余数。我知道
任何人都可以帮助我使用 FMOD 或任何其他方式从内存流中播放文件吗? 到目前为止我有这个: 变量 private FMOD.System _fmod = null; private
我想使用 Cpp 计算阶乘中零的个数。问题是当我使用非常大的数字时。 #include #include long zeroesInFact(long n) { long double fact=
我从 fmod 教程中几乎逐字复制了以下代码块,对变量名进行了细微修改,以免与任何内容发生冲突。我的代码在没有任何 fmod 语句的情况下编译得很好。当我放入 FMOD_RESULT fm_resul
我想知道我是否做错了什么。我已经将我的 SoundManager 类设置为有 5 个不同的 channel ,在我的游戏中可能会同时播放一些声音,比如开枪和敌人“受伤”的声音......这就是我设置
在代码中: FMOD_RESULT result; FMOD::System *system; result = FMOD::System_Create(&system); FMODErrorChec
首先,我正在为学校做这个项目,我们不允许使用外部库,因此我不能使用 GMP 之类的东西。问题是,我有一个函数需要一些“艰难”的计算。即, m^e mod n 这是我的代码 #include #inc
使用 FMOD(交互式音频中间件),是否可以在播放轨道时实时计算其每秒节拍数? 我找不到太多关于此的信息,这将非常有用。将使用 c# 但能够翻译。 谢谢 最佳答案 FMOD 不提供任何计算每分钟节拍的
我想播放一个 mp3 文件,所以我搜索并了解了 FMOD。我下载了http://www.fmod.org/download/ (用于 Linux 的 FMOD Studio 程序员 API)。 我还收
我的问题是从模计算中获得最准确的结果,我得到余数答案以进行另一次舍入计算,因此我确实需要一个准确的结果。 double a = 0.12345678...(可能有很多数字); double b = f
我开始使用 FMOD 库,因为我需要在 C# 应用程序中播放没有间隙的声音(循环中的一个声音和序列中的许多声音)。谁能告诉我正确的方法吗?我尝试根据示例制作一些东西,但它没有像我希望的那样工作。首先,
我正在尝试设置我的声音管理器 (FMOD) 以在不同的 channel 上播放背景音乐和其他 Action 声音,据我所知,这是使用 FMOD 同步声音的唯一方法....我的设置是下面,如果我调用 p
我开始使用 FMOD API,但我在播放声音时遇到了问题。我使用了本网站的教程:http://glasnost.itcarlow.ie/~powerk/audio/AddFMODtoaproject.
我是一名优秀的程序员,十分优秀!