录音例程



int install_sound_input(int digi_card, int midi_card);
初始化声音录制组件, 成功返回零. 你必须在调用这个例程前加载正常的声音回放系统. 两个 card 参数应当使用和 install_sound() 相同的, 包括 使用 DIGI_NONE 和 MIDI_NONE 关掉组件的这个部分, 或使用 DIGI_AUTODETECT 和 MIDI_AUTODETECT 来猜测硬件.

void remove_sound_input();
在你完成的声音输入例程和清除干净. 你通常不用调用这个, 因为 remove_sound() 和/或 allegro_exit() 将为你调用.


int get_sound_input_cap_bits();
检查当前音频输入驱动程序支持哪种采样声音模式, 返回位域值中的一个:

0 = 不支持音频输入
8 = 支持 8 位音频输入
16 = 支持 16 位音频输入
24 = 8 位和 16 位音频输入都支持

int get_sound_input_cap_stereo();
检查当前的音频输入驱动程序能否立体声录音.


int get_sound_input_cap_rate(int bits, int stereo);
返回对指定格式的能录制最大的频率, 如果这些设置不支持则返回 0.

int get_sound_input_cap_parm(int rate, int bits, int stereo);
检查指定录制频率, 位数, 单声道/立体声 模式是否被当前的音频驱动程序支持, 返回下列值中的一个:


0 = 不可能以这个格式录制
1 = 可以录制, 但是声音输出将被推迟
2 = 可以在录制时同时播放其它的声音
-n = 采样频率不支持, 但是频率 'n' 可以代替工作

int set_sound_input_source(int source);
选择声音输入源, 成功返回零或 当硬件没有提供一个输入选择寄存器时返回 -1. 参数应当是下列中的一个:

SOUND_INPUT_MIC
SOUND_INPUT_LINE
SOUND_INPUT_CD

int start_sound_input(int rate, int bits, int stereo);
开始以指定的格式录制, 如果需要推迟音频播放 (这将总是发生在当前的驱动程序中). 如果成功返回缓冲的大小, 错误返回零.

void stop_sound_input();
停止音频录制, 将声卡切回到正常的播放模式.


int read_sound_input(void *buffer);
取回最近录制的音频缓冲到指定的位置, 如果缓冲已经被复制了返回非零或是没有新的数据可以利用就返回零. 缓冲大小可以检查 start_sound_input() 的返回值得到. 你必须确信能在录制时以有规律的间隙调用这个函数 (一般是每秒 100 次左右), 否则回丢失一些数据. 如果你不能在主线代码中足够频繁的做这些, 使用 digi_recorder() 回叫来储存波形到一个你自己的大些的缓冲里. 注意: 许多声卡在切换录制和播放模式时制造出一声滴答声, 因此通常在你开始录制前放弃掉第一个缓冲是个好主意. 波形总是以无符号形式储存, 立体声数据由交替左/右采样声音的形式构成.

extern void (*digi_recorder)();
如果设置了, 无论何时新的采样缓冲变的可利用这个函数都将被输入驱动程序调用, 一般你可以用 read_sound_input() 来复制数据到一个更持久的位置. 这个例程在一个中断中运行, 因此必须执行的非常迅速, 它接触的所有内存和代码必须被锁住, 且你不能调用任何操作系统例程 或控制磁盘文件.

extern void (*midi_recorder)(unsigned char data);
如果设置, 无论何时当一个新的 MIDI 数据字节变的可利用时,这个函数都将被 MIDI 输入驱动程序调用. 它在中断中运行, 因此必须执行的非常迅速, 而且所有的代码/数据必须被锁住.




返回