我想在某个时候停止我的样本,但它给我带来了一些奇怪的错误。这是我的代码:
ALLEGRO_SAMPLE_ID id;
ALLEGRO_SAMPLE* spl = al_load_sample("sound.ogg");
al_play_sample(spl, 1.0, 0, 1.0, 0, &id);
al_stop_sample(&id);
al_destroy_sample(spl)
正如这里所建议的,在播放对象试图停止和销毁之前,Allegro 很可能运气不好被销毁:
你确定 Allegro 在你销毁所有东西后被取消初始化了吗?通过将关闭代码放入 atexit 回调但让 Allegro 注册自定义 atexit 回调,我遇到了这个问题。在这种情况下,可能会首先运行 Allegro 的 atexit 回调,因此您必须使用 al_install_system(NULL, ALLEGRO_VERSION_INT) 并在自定义 atexit 回调中调用 al_uninstall_system() 而不是 al_init()。
尝试这个
ALLEGRO_SAMPLE_ID *id_sample = NULL;
id_sample = malloc(sizeof(ALLEGRO_SAMPLE_ID));
l_play_sample(sample, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_BIDIR, id_sample);
printf("id_sample %p\n", id_sample);
al_rest(2);
al_stop_sample(id_sample);