2017-01-06 2 views
0

Я делаю игру для школьного проекта, и у меня есть звуковой эффект, который должен играть каждый раз, когда лазер уволен. Был короткий период времени, когда он работал нормально, но с тех пор он прекратился. После этого я немного изменил код, так как хотел сохранить файл в файле данных.Allegro sound not working (play wav file)

Initializing звук в 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); 

Сам звук очень короткий, если это имеет какое-либо значение, менее чем за одну секунду. Звук также будет пытаться играть несколько раз подряд, но теперь на самом деле больше времени, чем когда он работал, поэтому я не думаю, что это имеет значение.

Есть ли что-то, что я вопию неправильно?

ответ

0

Оказывается, я был просто сделать глупую ошибку, я звоню функцию разгрузки в одной и той же функции, что я играл звуковой файл; не было достаточного времени для воспроизведения звукового файла до того, как файл был выгружен, так что при техническом отсутствии ошибки, которую должен получить компилятор или вызвать сбои, код пытался воспроизвести звук, который он уже забыл. Удаление вызова для разгрузки позволяет воспроизводить звук.

0

Сначала убедитесь, что установлены все параметры, а не если вы вызываете только install_sound. Вы также должны называть это:

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

Третий параметр относится к используемому качеству звука. Это должно означать наивысшее качество, если вы хотите другой тип, вы должны искать в ссылке allro 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);