我使用wasm的c++开发接入2.02版本接入w32 lib,播放音频文件报没有支持回调函数。
audio_sound_sptr fmod_service::do_create_sound(
const char* path, uint32_t flag, int32_t group_id) {
FMOD::ChannelGroup* group = get_sound_group(group_id);
if (group == nullptr) {
return nullptr;
}
FMOD::Sound* fmod_snd = nullptr;
raw_sound_sptr raw_snd = nullptr;
fmod_sound_vec* data = nullptr;
char path_ex[MAX_PATH_LEN + 16];
::sprintf(path_ex, "%s<%d>", path, flag);
raw_snd = _sound_cache->get(path_ex);
if (raw_snd) {
if (!(flag & sound_flag::SYNC_LOAD)) {
fmod_snd = raw_snd->_snd;
fmod_snd->getUserData(&(void*&)data);
}
} else {
FMOD_MODE mode = FMOD_LOOP_NORMAL;
mode |= (flag & sound_flag::IS_3D) ? FMOD_3D | FMOD_3D_LINEARROLLOFF : FMOD_2D;
mode |= (flag & sound_flag::STREAM) ? FMOD_CREATESTREAM : FMOD_CREATESAMPLE;
FMOD_CREATESOUNDEXINFO* exi_ptr = nullptr;
FMOD_CREATESOUNDEXINFO exinfo;
if (!(flag & sound_flag::SYNC_LOAD)) {
static int thread_id = 0;
if (thread_id > 4) {
thread_id = 0;
}
data = new fmod_sound_vec();
memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));
exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
exinfo.nonblockcallback = load_callback;
exinfo.nonblockthreadid = thread_id++;
exinfo.userdata = (void*)data; // 异步加载中不能使用setUserData,只能由此处传递
exi_ptr = &exinfo;
mode |= FMOD_NONBLOCKING;
}
FMOD_RESULT result = _system->createSound(path, mode, exi_ptr, &fmod_snd);
if (FMOD_CHECK_ERROR(result) || !fmod_snd) {
if (data) {
delete data;
}
LOGE("FMOD", "Failed to load sound: %s!", path);
return nullptr;
}
bool stream = (flag & sound_flag::STREAM) != 0;
raw_snd = rx_make_shared<raw_sound>(fmod_snd, stream);
_sound_cache->set(path_ex, raw_snd);
if (!(mode & FMOD_NONBLOCKING)) {
on_fmod_loaded(fmod_snd, stream, path);
}
}
fmod_sound_sptr sound = rx_make_shared<fmod_sound>(path, raw_snd, group, flag);
if (data != nullptr) {
sound->_loading = true;
data->push_back(sound);
}
return sound;
}
文件系统也设置过
result = _system->setFileSystem(open_callback, close_callback,
read_callback, seek_callback, nullptr, nullptr, -1);
if (FMOD_CHECK_ERROR(result)) {
break;
}
但是通过日志看没有进入open_callback回调函数。
请问是哪里使用错误吗?播放event接口是有效的。