声音初始化例程



int detect_digi_driver(int driver_id);
检测指定的数字声音设备是否可用, 和 install_sound() 使用相同的 ID 值. 返回设备可以提供的最大声音数目, 如果没有这种硬件则返回零. 这个函数 _必须_ 在 install_sound() 前调用.

int detect_midi_driver(int driver_id);
检测指定的 MIDI 设备是否能使用, 使用和 install_sound() 相同的 ID 值. 返回设备可以提供的最大声音数目, 如果没有这种硬件则返回零. 有两种特殊的返回值是需要你特别注意的: 如果函数返回 -1, 则是 note-stealing 驱动设备 (即: DIGMID) 它从当前的数字声音设备中共享声音, 如果返回 0xFFFF 则是一像 MPU-401 那样的扩展设备, 而没有方法 检测到可用的声音数. 这个函数必须在 install_sound() 前调用.


void reserve_voices(int digi_voices, int midi_voices);
调用这个函数以指定数字和 MIDI 声音各自使用的声音数. 这必须在调用 install_sound() 前完成. 如果你保留了太多的声音, 随后的调用 install_sound() 将失败. 有多少声音可以利用取决于驱动设备, 一些情况下你实际得到的声音数比你预定的多 (比如, FM 合成驱动设备总是在 OPL2 上提供 9 声音, 在 OPL3 上提供 18 个, 而 SB 数字驱动设备将这个数字提高到接近 2 的次方数). 传入负数将恢复缺省的设置. 你应该将 SB 和 GUS 都考虑到, 音质和你使用的声音数的关系是反的, 因此不要预定你真正需要还多的声音.

int install_sound(int digi_card, int midi_card, char *cfg_path);
初始化声音组件, 成功则返回零. digi_card 参数应当是下面值中的一个:

      DIGI_AUTODETECT      - 让 Allegro 来选择一个数字声音驱动设备
      DIGI_NONE            - 无数字声音
      DIGI_SB              - Sound Blaster (自动检测类型)
      DIGI_SB10            - SB 1.0 (8 位单声道 单一发射 dma)
      DIGI_SB15            - SB 1.5 (8 位单声道 单一发射 dma)
      DIGI_SB20            - SB 2.0 (8 位单声道 自动初始化 dma)
      DIGI_SBPRO           - SB Pro (8 位立体声)
      DIGI_SB16            - SB16 (16 位立体声)
      DIGI_AUDIODRIVE      - ESS AudioDrive
      DIGI_SOUNDSCAPE      - Ensoniq Soundscape

midi_card 应当是以下值中的一个:

      MIDI_AUTODETECT      - 让 Allegro 挑选一个 MIDI 声音驱动程序
      MIDI_NONE            - 无 MIDI 声音
      MIDI_ADLIB           - Adlib 或 SB FM 混合 (自动检测型号)
      MIDI_OPL2            - OPL2 混合 (单声道, 在 Adlib 和 SB 下使用)
      MIDI_2XOPL2          - 双 OPL2 混合 (立体声, 在 SB-Pro-I 下使用)
      MIDI_OPL3            - OPL3 混合 (立体声, SB Pro-II 及以上)
      MIDI_SB_OUT          - SB MIDI 界面
      MIDI_MPU             - MPU-401 MIDI 界面
      MIDI_DIGMID          - 基于采样的软件波表播放器
      MIDI_AWE32           - AWE32 (EMU8000 chip)

正常的情况你应当给出参数 DIGI_AUTODETECT 和 MIDI_AUTODETECT 于这个函数, 在这种情况下 Allegro 将从当前的设置文件里读入硬件设置. 这允许用户利用 setup 工具来选择不同的值: 见 config 部分的描述.


参数 cfg_path 仅仅为了兼容先前版本的 Allegro 而设, 它对任何东东都不起作用.

如果声音成功的被加载了则返回零, 失败则返回 -1. 如果失败了它将把问题的描述储存在 allegro_error 里.

void remove_sound();
在你完成了声音例程的清除工作. 正常情况下你不必调用它, 因为 allegro_exit() 将为你做这个.

void set_volume(int digi_volume, int midi_volume);
改变全局声音输出音量. 指定数字采样声音和 MIDI 背景音乐的音量, 它是一从 0 到 255 间的整数, 或者传入一复制使其中一设置不改变. 如果有可能这个例程将使用硬件混合来控制音量, 否则它通知样本声音和 MIDI 播放器使用软件模拟的混合器.





返回