音频流例程



音频流函数是用来用来播放大到不能放在常规 SAMPLE 结构里的数字音乐用的, 也因为这些文件太大而你想每次载入需要数据的一部分, 或者是你想做些聪明的活, 比如产生飞行的波形.


AUDIOSTREAM *play_audio_stream(int len, bits, stereo, freq, vol, pan);
这个函数创建一个新的音频流然后开始播放. 长度是每个传输缓冲(采样声音的) 的大小, 它至少要有 2K: 大点的缓冲更经济些, 需要更少的更新, 但是在你提供数据和它实际播放之间,有更多的等待. bits 参数必须是 8 或 16, freq 是数据的采样频率, vol 和 pan 值使用和常规采样声音播放例程相同的 0-255 范围. 如果一但开始播放了,你想调整音调, 音量, 或音频流的 pan 值, 你可以使用常规的 voice_*() 函数, 以 stream->voice 作为参数. 采样声音数据永远是无符号格式, 立体声波形由交替左/右采样组成.


void stop_audio_stream(AUDIOSTREAM *stream);
当一个音频流不再需要时撤销它.

void *get_audio_stream_buffer(AUDIOSTREAM *stream);
当音频流正在播放时, 你必须以有规律的间隙调用这个函数 来提供采样声音数据的下一个缓冲 (缓冲区越小, 它就必须被更频繁的调用). 如果返回 NULL, 音频流还有许多要播放, 因此你不必去做什么. 如果返回了值, 它就是下一个缓冲将被播放的位置, 你应当将合适数量的采样声音 (无论你在创建流时指定了多少) 载入到 那个地址, 比如你使用 fread() 从磁盘文件里载入. 在用数据填充完缓冲区后, 调用 free_audio_stream_buffer() 来只是新的数据已经有效了. 注意这个函数不能在时钟句柄里调用...


void free_audio_stream_buffer(AUDIOSTREAM *stream);
在 get_audio_stream_buffer() 后调用这个函数, 返回一个非 NULL 地址, 来知识你已经载入一块新的采样声音到那个地址, 数据现在准备被播放了.




返回