FMODIOS
FMODIOS copied to clipboard
如何输出变声后的音频文件
如题
我先研究下~,这个Demo是帮朋友写的,网上iOS的资料很少,我也没有去深入研究。如果找到方案再通知你
那就非常感谢了。我研究了你这个代码很久没研究啥出来(技术菜)😂,有劳兄台了。
客气,这跟技术无关的,因为这是c++写的,技术再牛不会c++看文档也官方demo也很费劲。我周末看了下,保存应该没多大问题,周末出去玩了,没时间写,晚上或者明天push上去
我仿照 https://www.jianshu.com/p/2e1fd3035ae1 去处理变声后输出的音频文件, 我传的音频文件地址mp3格式的,但是去播放输出文件的时候只能听到一个杂音。
代码如下
FMOD_SYSTEM *mSystem; FMOD_SOUND *sound; FMOD_DSP *dsp; FMOD_CHANNEL *channel; bool playing;
char* fmod_set_audio_effect(int flag, const char *path_str, const char *save_str){
FMOD_System_Create(&mSystem);
playing = true;
char *error = (char *)"nil";
int err = 0;
err = FMOD_System_SetSoftwareFormat(mSystem,8000,FMOD_SPEAKERMODE_MONO,0);//设置采样率为8000,channel为1
if(err!=0)return error;
char cDest[2000];
strcpy(cDest, save_str);
FMOD_System_SetOutput(mSystem, FMOD_OUTPUTTYPE_WAVWRITER);//保存文件格式为WAV
FMOD_System_Init(mSystem, 32, FMOD_INIT_NORMAL | FMOD_INIT_PROFILE_ENABLE, cDest);
try {
//创建声音
FMOD_System_CreateSound(mSystem, path_str, FMOD_DEFAULT, NULL, &sound);
FMOD_System_PlaySound(mSystem, sound, 0, false, &channel);
switch (flag) {
case 0:
//原生
break;
case 1:
//萝莉
//创建音频处理DSP 类型 为音频提高
FMOD_System_CreateDSPByType(mSystem, FMOD_DSP_TYPE_PITCHSHIFT, &dsp);
//设置dsp大小
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_PITCHSHIFT_PITCH, 2.0);
//添加一个处理单元到通道
FMOD_Channel_AddDSP(channel, 0, dsp);
break;
case 2:
//惊悚
//创建音频处理DSP 类型 为颤抖
FMOD_System_CreateDSPByType(mSystem, FMOD_DSP_TYPE_TREMOLO, &dsp);
//设置低频频率
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_TREMOLO_FREQUENCY, 20);
//设置声音歪斜
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_TREMOLO_SKEW, 0.5);
//添加一个处理单元到通道
FMOD_Channel_AddDSP(channel, 0, dsp);
break;
case 3:
//大叔
//创建音频处理DSP 类型 为音频提高
FMOD_System_CreateDSPByType(mSystem, FMOD_DSP_TYPE_PITCHSHIFT, &dsp);
//设置dsp大小
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_PITCHSHIFT_PITCH, 0.5);
//添加一个处理单元到通道
FMOD_Channel_AddDSP(channel, 0, dsp);
break;
case 4:
{
//搞怪
float mfrequency = 0;
//得到频率
FMOD_Channel_GetFrequency(channel, &mfrequency);
FMOD_Channel_SetFrequency(channel, mfrequency * 2);
break;
}
case 5 :{
//空灵
//创建音频处理DSP 类型 为音频提高
FMOD_System_CreateDSPByType(mSystem, FMOD_DSP_TYPE_ECHO, &dsp);
//设置dsp大小 延迟声
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_ECHO_DELAY, 300);
//回音音量
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_ECHO_FEEDBACK, 20);
//添加一个处理单元到通道
FMOD_Channel_AddDSP(channel, 0, dsp);
break;
}
case 6: {
//机器人
FMOD_System_CreateDSPByType(mSystem, FMOD_DSP_TYPE_ECHO, &dsp);
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_ECHO_DELAY, 50);
FMOD_DSP_SetParameterFloat(dsp, FMOD_DSP_ECHO_FEEDBACK, 60);
FMOD_Channel_AddDSP(channel, 0, dsp);
}
default:
break;
}
} catch (...) {
FMOD_DSP_Release(dsp);
FMOD_Sound_Release(sound);
FMOD_System_Close(mSystem);
FMOD_System_Release(mSystem);
return error;
}
FMOD_System_Update(mSystem);
int unitplaying = 0;
while (unitplaying) {
usleep(1000);
FMOD_Channel_IsPlaying(channel, &unitplaying);
}
goto end;
end:
FMOD_DSP_Release(dsp);
FMOD_Sound_Release(sound);
FMOD_System_Close(mSystem);
FMOD_System_Release(mSystem);
char* pc = new char[2000];//足够长
return strcpy(pc,save_str);
}
FMOD_System_SetOutput(mSystem, FMOD_OUTPUTTYPE_WAVWRITER);//保存文件格式为WAV 这样设置播放器就没有声音了,有没有传进去文件路径,然后变音处理后保存起来的方法?
同求啊,变声之后的文件怎么获取到啊
Any updates on this one? How to save a voice with effect?
I still haven't been able to save file. Can anyone suggest a solution on the current project?
怎么获取变声后的文件呀?
大佬 现在有获取变声后的文件的资料了么
大佬 现在有获取变声后的文件的资料变
How ????