我正在阅读一本关于使用名为Allegro的游戏库在C编程语言中编程的书。如果您使用谷歌“Allegro”,如果您目前没有,那么您将确切知道这是什么。 Allegro基本上使编写视频游戏变得更容易。我已经对这个问题的方式感到沮丧。
好吧,无论如何我从一本书中跟踪了一个示例程序并且代码类型工作,打开一个窗口并显示一些数据,但没有播放Midi文件,.mid。有谁知道会出现什么问题?运行此程序时没有抛出任何错误。此外,allegro表示midi文件已成功加载并且Midi正在播放。虽然我没有听到任何声音,但没有看到GUI中计算的MIDI文件的进度。有一些代码可以计算Midi文件的时间,长度和位置。但是,该计划根本没有任何重要性。我还尝试了Allegro安装的示例文件夹下的exmidi
程序,但这也没有用。 Allegro能够毫无问题地播放.wav文件。此外,我能够使用名为“胆怯”的程序播放有问题的Mid文件。所以我知道我可以在Ubuntu笔记本电脑上播放一些Midi文件。我只是不确定为什么我不能用Allegro 4播放Mid文件.0_o
感谢任何帮助。感谢您阅读本文。
以下是代码:
#include <allegro.h>
#define MODE GFX_AUTODETECT_WINDOWED
#define WIDTH 640
#define HEIGHT 480
#define WHITE makecol(255, 255, 255)
int main(void)
{
MIDI *music
int pos, length;
//initialize the program
allegro_init();
install_keyboard();
install_timer();
set_gfx_mode(MODE, WIDTH, HEIGHT, 0, 0);
textout_ex(screen, font, "PlayMidi Program (Hit ESC to quit)", 0, 0, WHITE, 0);
//install the sound driver
if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0)
{
allegro_message("Error initializing sound system\n%s\n", allegro_error);
return 1;
}
//load the midi file
music = load_midi("pinkpanther.mid");
if(!music) {
allegro_message("Error loading Midi file.");
return 1;
} else {
allegro_message("Music loaded");
}
//play the music
if (play_mid(music, 0) != 0) {
allegro_message("Error playing Midi\n%s", allegro_error);
return 1;
} else {
allegro_message("No errors playing the Midi.");
}
//display status information
length = get_midi_length(music);
textprintf_ex(screen, font, 0, 20, WHITE, 0, "Length: %d:%02d", length/60, length % 60);
do {
pos = midi_time;
textprintf_ex(screen, font, 0, 30, WHITE, 0, "Position: %d:%02d", pos/60, pos % 60);
rest(100);
} while((pos <= length) && (!key[KEY_ESC]));
stop_midi();
destroy_midi(music);
remove_sound();
allegro_exit();
return 0;
}
END_OF_MAIN()