extern “C”
JNIEXPORT void JNICALL
Java_com_youyangbo_fmod_FmodUtils_play(JNIEnv *env, jclass type, jstring path_) {
const char *path = env->GetStringUTFChars(path_, 0);
//创建对象
System *system;
System_Create(&system);
//初始化
void *extradriverdata;
system->init(32, FMOD_INIT_NORMAL, extradriverdata);
//創建一個聲音
Sound *sound;
system->createSound(path, FMOD_DEFAULT, 0, &sound);
//播放声音
Channel *channel = 0;
system->playSound(sound, 0, false, &channel);
system->update();
//是否播放
bool isplaying = true;
//阻塞线程
while (isplaying) {
channel->isPlaying(&isplaying);
usleep(1000*1000);
}
//释放资源
sound->release();
system->close();
system->release();
env->ReleaseStringUTFChars(path_, path);
}
}
到这里我们就可以简单的播放一个声音啦。system->playSound(sound, 0, false, &channel);
可以看到我们在播放声音时传了一个Channel这里并没有进行赋值, 在playSound()
函数里面会给选择一个闲置的Channel
用来播放声音。我们保存Channel
就是为了后面对声音的操作。怎样利用Fmod
进行变声,Fmod
提供了很多DSP
(数字信号处理的一个单元)类型,我们根据不同的类型创建不同的DSP,然后把我们创建好的DSP添加到Channel
(音轨)中达到对声音的改变。
MainActivity.java
:
public class MainActivity extends AppCompatActivity implements View.OnClickLis