2016-08-12 2 views
0

Ich schreibe einen MOD-Player und versuche, ein Sample mit Allegro5-Rohdaten abzuspielen. Ich kann die genauen Init-Parameter für den Stream nicht herausfinden, um die geladenen Sample-Daten vom Mod abzuspielen Datei.Rohe Audiowiedergabe in Allegro 5

Das ist, was ich habe:

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); 

Zu allererst, Freq param für den Test (8363Hz) fest einprogrammiert ist, aber ich mit der angegebenen Frequenz nicht bekommen, was ich erwarte, dass die Wiedergabe und al_drain_audio_stream() bleibt für immer Müll in einer Schleife stecken ...

Jede Hilfe wäre willkommen.

Antwort

0

Zumindest müssen Sie al_get_audio_stream_fragment anrufen, bevor Sie al_set_audio_stream_fragment anrufen. Normalerweise würden Sie diese Streams in einer While-Schleife einspeisen, während Sie auf das Ereignis ALLEGRO_EVENT_AUDIO_STREAM_FRAGMENT reagieren. Siehe das ex_saw Beispiel in der Allegro-Quelle für einen Beispielcode: https://github.com/liballeg/allegro5/blob/master/examples/ex_saw.c

Verwandte Themen