static const int EFFECTS_NORMAL = 0; // 原声
static const int EFFECTS_LUOLI = 1; // 萝莉
static const int EFFECTS_DASHU = 2; // 大叔
static const int EFFECTS_JINGSONG = 3; // 惊悚
static const int EFFECTS_GAOGUAI = 4; // 搞怪
static const int EFFECTS_KONGLING = 5; // 空灵
int main(int argc, char *argv[])
System * system = 0;
Sound * sound = 0;
Channel * channel = 0;
DSP * dsp = 0; // digital signal process 数字信号处理
bool isPlaying = true;
float frequency = 0;
System_Create(&system); // 创建 System
system->init(32, FMOD_INIT_NORMAL, 0); // 初始化,参数:通道数(每一个声音占一个通道,然后通过混音将各通道的声音混合在一起播放)、FMOD_INIT_NORMAL、额外的数据
system->createSound("/home/lili/test.mp3", FMOD_DEFAULT, 0, &sound);// 创建声音,参数:音频路径、模式、额外信息、创建的声音的对象
system->playSound(sound, 0, false, &channel); // 播放声音,声音占用 channel
int type_ = atoi(argv[1]);
switch (type_) {
case EFFECTS_NORMAL: // 原声
break;
case EFFECTS_LUOLI: // 萝莉 音调高
system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp); // 创建DSP,FMOD_DSP_TYPE_PITCHSHIFT 表示提高或降低音调,声音波由振幅(响度)与频率(音调)组成
dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 1.5); // 设置音调,FMOD_DSP_PITCHSHIFT_PITCH 2.0 表示音调升高一个8度
channel->addDSP(0, dsp); // 将音效添加到声音,同一个声音(channel)上可以添加多个音效,参数:音效下标,音效
break;
case EFFECTS_DASHU: // 大叔 音调低
system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp);
dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 0.8); // 萝莉的音调较高,大叔的音调低沉
channel->addDSP(0, dsp);
break;
case EFFECTS_JINGSONG: // 惊悚 紧张,声音会颤抖
system->createDSPByType(FMOD_DSP_TYPE_TREMOLO, &dsp); // FMOD_DSP_TYPE_TREMOLO 表示颤抖
dsp->setParameterFloat(FMOD_DSP_TREMOLO_SKEW, 0.5); // FMOD_DSP_TREMOLO_SKEW 表示扭曲 ,更多的这些参数,或者DSP的type 可参看源码注释
channel->addDSP(0, dsp);
break;
case EFFECTS_GAOGUAI: // 搞怪 提高语速
channel->getFrequency(&frequency); // 获取音频播放速度
frequency *= 1.8;
channel->setFrequency(frequency); // 设置音频播放速度
break;
case EFFECTS_KONGLING: // 空灵 有回音
system->createDSPByType(FMOD_DSP_TYPE_ECHO, &dsp); // FMOD_DSP_TYPE_ECHO 表示回音
dsp->setParameterFloat(FMOD_DSP_ECHO_DELAY, 300); // FMOD_DSP_ECHO_DELAY 为 FMOD_DSP_TYPE_ECHO 的参数,表示延时(回音的时间?) 单位毫秒?
dsp->setParameterFloat(FMOD_DSP_ECHO_FEEDBACK, 20); // FMOD_DSP_ECHO_FEEDBACK 表示回音的次数
channel->addDSP(0, dsp);
break;
system->update(); // 更新,不更新无法播放
while (isPlaying)
channel->isPlaying(&isPlaying);
usleep(1*1000*1000); // linux线程休眠函数,参数单位微秒 unistd.h 中
sound->release(); // 释放声音资源
system->close(); // 关闭system
system->release(); // 释放system资源
g++ fmodtest.cpp -I /home/lili/Downloads/fmodstudio20109ue4.26linux/FMODStudio/Source/FMODStudio/Public/FMOD -L /home/lili/Downloads/fmodstudio20109ue4.26linux/FMODStudio/Binaries/Linux/x86_64/ -lfmod -Wl,-rpath=/home/lili/Downloads/fmodstudio20109ue4.26linux/FMODStudio/Binaries/Linux/x86_64/ -o main
./main 1
#include <stdlib.h>#include <unistd.h>#include <iostream>#include "fmod.h"#include "fmod.hpp"using namespace std;using namespace FMOD;static const int EFFECTS_NORMAL = 0; // 原声static const int EFFECTS_LUOLI = 1; // 萝莉static co.
我随便截了几张图,有兴趣的可以到
Fmod
官网去具体了解。
怎么样有没有兴趣搞个小游戏玩玩,音频引擎已经有了。
我这边在调音编辑器里玩了一会,但是调音水平有限,不过多介绍了,有兴趣的自己down下来玩儿。
废话不多说,准备干活
第一步 先下载Android平台的引擎
第二步 下载后需要的文件:
新建项目并部署C/C++库步骤
第一步 新建Native Project
然后一路next
FMOD
是一个强大的声音引擎框架,QQ、魔兽世界及其他很多游戏都是使用的这套框架,框架内包含几十种声音类型,还可以修改声音的频率、速度等等。
1.进入
FMOD
download,下载Android端引擎库。
2.将下载下来的FOMD引擎库中的Jar包,so库和jni c++文件,复制到项目中。
3.编辑配置CMakeLists.txt
-------------------------------------
implementation files(‘libs/
fmod
.jar’)
fmod
使用前调用 org.
fmod
.
FMOD
.init(this);进行
FMOD
的初始化
extern “C”
需求很奇葩……
参考的几个网址:
https://qa.
fmod
.com/t/changing-speed-of-audio-without-altering-pitch/13903
https://qa.
fmod
.com/t/adding-a-dsp/12211
http://blackchy.com/2018/12/10/2018-12-10-
Fmod
-Voice-Change/
下面是尝试了
fmod
中两个播放声音的方法,
将声音播放率更改为n个百分点(n = -95.0 .. +5000.0%)
-bpm = n
检测声音的每分钟节拍(BPM)速率,并调整速度以满足“ n”个BPM。当应用此开关时,将忽略“ -tempo”开关。如果省略“ = n”,即单独使用开关“ -bpm”,则将估算并显示BPM速率,但速度不会根据BPM值进行调整。
FMOD
修改音频参数
webRtc
移植webRtc模块
#include "hjcommon.hpp"
#include "./inc/
fmod
.hpp"
#include "examples/common.h"
#include &lt;unistd.h&gt;
using namespace
FMOD
;
static const int EFFECTS_NORMAL = 0; // 原声
static