我想要一个库或某种类型的命令,它将MP3文件位置作为输入(只有MP3,我不需要WAV,OGG或任何其他类型)并将文件播放到它的末尾并制作某种均衡器输出,但只有像(31HZ,62HZ,......,16KHZ)这样的数字频率,所有10个频段都可用但是向我展示了改变10个变量......意思就像31 HZ频段一样(1,30,24,5,31 ......等等)这适用于每个乐队...但它不需要是1-31我的意思是它可以是任何东西,但我想要的想法说是以数字和数字来表示每个乐队的价值。将它与其他乐队分开......
与均衡器相同但不完全相同.. 它可以做到吗?是否有任何可以做到这一点或帮助做到这一点?
P.S。
- 我没有制作均衡器
- 我仍然是一种对C ++的NOOB,所以放轻松,不要去“你这个C ++正确的命令行”...非常感谢:)
答案 0 :(得分:2)
SoX(声音交换)可以在播放音频文件时对其进行频率分析。命令
sox myfile.mp3 temp.wav stat --freq
将MP3文件解码为WAV文件;当它这样做时,它对每个音频块执行4096点傅立叶变换,并将像这样的频率 - 功率对打印到stderr
:
0.000000 3.079278
10.766602 5.994057
<snip>
22028.466797 14.589799
22039.233398 14.289429
0.000000 0.232025
<snip>
因此,您可以将这些对作为输入,将频率值映射到您选择的波段,并将每个波段的总和相加。
或者,您可以从开源MP3解码器(例如MAD)开始,并对其进行修改以进行所需的分析。 MP3解码可分为两个阶段:
对于您的分析,您只需要进行第一阶段,然后将每个均衡器频段的频谱功率相加。因此,这种方法比使用SoX(完成解码,然后转换回频域)所需的处理要少得多,但只能将你绑定到MP3(你说这不是问题)。
答案 1 :(得分:0)
如果您认为自己是C ++的新手,那么我建议您使用Qt Phonon库。我创建了一个简单的演示,请参阅代码中的注释:
#include <QtCore/QCoreApplication>
#include <phonon>
#include <iostream>
using namespace Phonon;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Phonon::AudioOutput m_AudioOutput(Phonon::MusicCategory);
// Create Phonon music player
MediaObject *music = createPlayer(MusicCategory,MediaSource("path_to_audio_file.mp3"));
// Get list of included Fxs and print it to the stdout
QList<EffectDescription> fxs = Phonon::BackendCapabilities::availableAudioEffects();
for(QList<EffectDescription>::iterator i = fxs.begin(); i != fxs.end(); i++)
{
std::cout<<std::string(i->name().toUtf8())<<std::endl;
}
// Creates a new Path connecting the two MediaNodes - source and sink
Phonon::Path path = Phonon::createPath(music, &m_AudioOutput);
if(path.isValid ())
{
// Create parametric EQ
Phonon::Effect *effect = new Phonon::Effect(fxs.at(0));
path.insertEffect(effect);
// Get list of fx parameters
QList<Phonon::EffectParameter> pars = effect->parameters();
// Do some changes with parameters - set frq. bands as you need
effect->setParameterValue(pars.at(0), 600); // Center frequency in Hz
effect->setParameterValue(pars.at(1), 12); // Bandwidth in Hz at -3dB
effect->setParameterValue(pars.at(2), -12); // Gain in dB
// Play audio file effected by the inserted Audio Fx
music->play();
}
return a.exec();
}
如果您不熟悉参数均衡器参数,请查看以下链接: