音频流函数是用来用来播放大到不能放在常规 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 地址,
来知识你已经载入一块新的采样声音到那个地址,
数据现在准备被播放了.