Allegro声音不起作用(播放wav文件)

时间:2017-01-06 04:08:44

标签: audio allegro

我正在为一个学校项目制作游戏,并且我有一个声音效果,应该在激光器发射时播放。有一段很短的时间它工作正常,但它已经停止了。停止后,我将代码更改了一段,因为我想将文件存储在数据文件中。

在Allegro中初始化声音

install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);

这是加载和播放声音的代码

//Loading sound file from datafile
DATAFILE *laserShot = NULL;
laserShot = load_datafile_object("asteroids.dat", "laser_Shot");

//Error checking
if (laserShot->dat == NULL) {
    allegro_message("Error loading laser_Shot.wav");
}
else {
    //Playing sound for shot
    play_sample((SAMPLE*) laserShot->dat, 255, 127, 1000, 0);
}

//Freeing memory
unload_datafile_object(laserShot);

声音本身非常短,如果它是重要的,不到一秒钟。 声音也会试图快速连续播放多次,但现在实际上比起最初的工作更多,所以我不认为这会产生影响。

我有什么明显的错误吗?

2 个答案:

答案 0 :(得分:0)

首先,确保设置了所有参数,如果只调用install_sound则不会。你也应该这样称呼:

 set_config_int("sound", "quality", 1);

第三个参数是指使用的声音质量。这应该意味着最高质量,如果你想要另一种类型,你应该搜索allegro libs参考。

其次,您应该分配语音。语音基本上是用于播放样本的内存空间。默认情况下,allegro 4可以分配255种不同的声音,但由于硬件原因,实数可能会少得多。你这样做:

int laser_voice = allocate_voice("sample.wav");

现在您可以设置参数,如音量,声像,扫描和播放模式。例如,如果你想像源一样以相同的频率和音量播放循环样本,你应该这样做:

voice_set_volume(   laser_voice, 200);
voice_set_pan(      laser_voice, 127);
voice_set_playmode( laser_voice, PLAYMODE_LOOP);

对于其他选项,您应该访问参考文献。

现在,要播放示例,只需调用

即可
voice_start(laser_voice);

然后您可以通过reallocate_voice停止,重播,更改参数或更改样本。就这样。在代码结束时,您可以通过

解除分配
deallocate_voice(laser_voice);

答案 1 :(得分:0)

原来我只是犯了一个愚蠢的错误,我在播放声音文件的同一个函数中调用了卸载功能;在卸载文件之前没有足够的时间播放声音文件,因此从技术上讲,编译器没有错误或者导致崩溃,代码试图播放它已经忘记的声音。删除要卸载的呼叫可以播放声音。