原始音频播放5

问题描述:

我正在写一个MOD玩家,试图回放用Allegro5原料流功能的样本,我想不出确切的初始化参数流从MOD播放加载样本数据文件。原始音频播放5

这是我有:

xf::ModLoader ml; 
ml.loadFromFile("C:\\Users\\bubu\\Downloads\\agress.mod"); 
// getSampleLength() returns # of data words 
int sample_length = ml.getSampleLength(1) * 2; 
const int8_t* sample_data = ml.getSampleData(1); 

ALLEGRO_MIXER* mixer = al_get_default_mixer(); 
ALLEGRO_AUDIO_STREAM* stream = al_create_audio_stream(1, sample_length, 8363, ALLEGRO_AUDIO_DEPTH_INT8, ALLEGRO_CHANNEL_CONF_1); 

al_attach_audio_stream_to_mixer(stream, mixer); 
al_set_audio_stream_gain(stream, 0.7f); 
al_set_audio_stream_playmode(stream, ALLEGRO_PLAYMODE_ONCE); 
al_set_audio_stream_playing(stream, true); 
al_set_audio_stream_fragment(stream, (void*)sample_data); 
al_drain_audio_stream(stream); 

首先,频率参数是硬编码的测试(8363Hz),但是,在指定的频率播放我没有得到我的期望,以及al_drain_audio_stream()卡永远扮演垃圾循环...

任何帮助,将不胜感激。

最起码,你需要调用al_get_audio_stream_fragment你打电话之前al_set_audio_stream_fragment。通常情况下,您会在回复ALLEGRO_EVENT_AUDIO_STREAM_FRAGMENT事件的同时在while循环中提供这些流。参见ex_saw例中的Allegro的源一些示例代码:https://github.com/liballeg/allegro5/blob/master/examples/ex_saw.c