,nP nH1vb 翻译:shepherd(
zqw100@163.com)
0QrRG$<4X 原作信息:
;G"!y<F 题目:Programming the SoundBlaster 16
DSP O~x{p,s
U 作者:by Ethan Brodsky (Version 3.1)
p}wysVB 联系方式:
ericbrodsky@psl.wisc.edu c5O8,sT 写作日期:2/10/95
F*Yx1vj 免责声明
Ju;^^ 本免责声明正文如下:
Ep')@7^n 笔者声明,由于利用或误用本
资料,最终导致的任何经济损失,或必然的/偶然的/其他形式的损失,笔者将不承担任何责任。本文可以被免费发放,但是在发放时请完整地保留本免责声明。
Zc&pJP+M'U SB16简介
?G]yU 16位声霸卡(Sound Blaster 16,本文简写为SB16)可以处理FM(Frequency Modulation:频率调幅)和数字声音信号。其中数字信号的处理范围是:从8位5000HZ单声道,到16位44000HZ立体声(译者注:另外一种说法是到48000HZ)。这份常见问题文档,是关于SB16 DSP CT1341芯片数字音频信号的录制和回放的。理所当然的,有关更早声霸卡的编程知识必不可少。
NxK.q)tj6 译者补充的背景知识:
?hIDyM FM合成
技术 9Q\B1Q 它是运用特定的算法来简单
模拟真实乐器声音。 其主要特点是
电路简单、生产成本低,不需要大容量存储器支持即可模拟出多种声音。由于 FM是靠算法来合成某个声音,因此实现方法过于生硬、效果单一,所生成的声音与真实乐器产生的声音距离很大。很容易让人听出来是“
电子音乐”。
N#R8ez` DSP
1 un! DSP(Digital Signal Processor,数字信号处理器)是一种内含微处理器的专用芯片,它为当时的高档16位声卡实现180°环绕立体声再现立下了汗马功劳。
'9<8<d7? SB16的I/O端口
CR#-!_=4 SB16的DSP芯片的可编程I/O服务端口地址,其基址是由主板跳线决定的(译者注:现在一般通过BIOS或者应用程序实现)。在SB16芯片中,有16个I/O端口被用作FM合成音乐,音响混合,DSP编程和CD-ROM访问。而下面列出的五个端口被用做DSP编程:
uOKdb6]r6 2x6h - DSP 复位
$I ,Np)i 2xAh - DSP 读
LHA:frC 2xCh - DSP 写(命令/数据),DSP 写缓冲区状态字(第7位)
#Wb4* 2xEh - DSP 读缓冲区状态字(第7位), DSP
中断应答
BI!E mA 2xFh - DSP 16位中断应答
07ppq?,y 译者补充背景资料:
s(L!]d.S$y 端口中的X为基址,可以取1-6,通常情况下取2,即基址是220h。该基址可以由用户在相关配置文件中指定,也可以在程序中自己检测。
g0;6}n DSP复位
&Fk|"f+ 在进行DSP编程之前你必须将DSP复位。复位DSP需要按照以下步骤进行:
:inVwc 1,在复位端口(2X6)写入1
tBsvi%F 2,等待3毫秒
EgzdRB\Cf 3,在复位端口(2X6)写入0
B LZ<"npn 4,检测读缓冲区端口(2XE)状态,直到第7位为1。
Lo}/k}3Sx 5,检测读数据端口(2XA)状态,直到接受到AA。
QNXS.!\P DSP自身初始化通常需要大约100毫秒。经过这段时间以后如果返回的值仍然不是AA,或者没有任何数据返回,说明SB16卡未被安装,或者I/O地址不正确。
/&c>*4) 译者补充知识:
X>]<rEh 这里所说的第7位,是从第0位开始算的。整个复位过程,C语言的参考代码如下:
.&>3nu int RestDSP(int Test)
1h)K3cC {
hOdU% /* 重置DSP */
$"0`2C outportb(Test + 0x6, 1);
YXdo&'Q<qX delay(3);
>.XXB
5a outportb(Test + 0x6, 0);
?TmVLny delay(80); /* 延时时间可以酌情调整 */
{q;_Dd /* 如果重置成功则检查 */
5fmQ+2AC1 if ((inportb(Test + 0xE) & 0x80 == 0x80)
87+u`~ && (inportb(Test + 0xA) == 0xAA))
KyqP@
{ {
<