Html5 接入Fmod 2.02版本播放MP3文件失败。

我使用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接口是有效的。

你好,

非常感谢你分享的代码和信息。

可以麻烦你分享一下具体的报错信息吗?

如果在使用 System::setFileSystem 后,open_callback 还是没有调用的话,听起来像是由于文件路径不正确或文件未成功加载,导致传递给 System::createSound 的路径无效或无法访问。

不知是否能麻烦你分享一下日志让我们进行调查呢?