(番外)情懷篇之一 PC音頻硬件簡介
- [導讀]
- Intel MSC-51也能做PC聲卡?!
21ic打算攜手資(tu)深(ding)直男癌晚期工程師zhanzr21,來給大家講一講嵌入式系統(tǒng)與音頻處理的故事。
關(guān)于zhanzr21:
曾經(jīng)混跡于兩岸三地,摸爬滾打在前端后端,搞過學術(shù)上過班,F(xiàn)在創(chuàng)業(yè)中,歡迎各種撩
點擊鏈接加入群【嵌入式音頻信號處理】:https://jq.qq.com/?_wv=1027&k=45wk8Ks
嵌入式音頻專用資料代碼分享:https://pan.baidu.com/s/1dFh5pWd
在IBM PC流行之前的時代,一般的個人電腦都沒有聲卡.某些主機,比如NES,Atari之類的注重于游戲應用的,都有專門設計的聲音設備.比如NES主機在CPU(定制的6502)中專門設計了一個APU的外設來播放聲音.說起來這個APU還是5通道呢:兩路方波,一路三角波,一路噪音,一路采樣. 注意這個5通道不是現(xiàn)在說的5聲道這種概念,而是5通道信號進行疊加實現(xiàn)類聲卡的功能.關(guān)于NES的音頻硬件軟件的內(nèi)容將在今后的連載中介紹,這里還是回到PC音頻硬件上來.
說聲卡之前先講一講PC揚聲器(實際上現(xiàn)代嵌入式系統(tǒng)中這個稱作蜂鳴器更合適,但是所有文獻都稱作Speaker,這里也隨俗.有這個設備的主板有焊接蜂鳴器的,也有焊接揚聲器的,只是起的作用跟嵌入式系統(tǒng)中的無源蜂鳴器類似.).作為音頻設備,揚聲器早于真正意義上的聲卡出現(xiàn)在PC上.因此聲卡與揚聲器是分開的兩個設備,揚聲器是直接焊接在主板南橋的定時器(8253/8254兼容定時器)引腳上面. 有一定年齡的讀者可能還記得那種老電腦出了故障的時候,滴滴滴滴的報警聲. 有經(jīng)驗的老司機們還可以通過揚聲器不同響聲模式來判斷電腦故障的原因.比如: 短短短-內(nèi)存沒有插好, 短長短-硬盤沒有插好, 長-風扇散熱不夠等等.
[因為這個揚聲器只能輸出高和低的方波,本質(zhì)上就不是用來播放PCM的.但是本系列文章介紹過一種D類放大器,可以通過PWM+濾波器實現(xiàn)一種簡單DAC. 事實上確實有人做過這樣的實驗. 只是考慮到現(xiàn)代電腦上揚聲器已經(jīng)與聲卡合并了, 本文就不進行這個方向的闡敘了.]
時過境遷, 大多數(shù)電腦上早就沒有專門的揚聲器了. 現(xiàn)在的操作系統(tǒng)中一般把揚聲器的調(diào)用轉(zhuǎn)到聲卡上執(zhí)行, 當然用戶可以設置是否使能這種轉(zhuǎn)向.
圖 揚聲器的聲音轉(zhuǎn)移到聲卡上播放
Windows操作系統(tǒng)API中還遺留著這個揚聲器的控制接口. WinXP與Vista中曾經(jīng)去除這個API,但是Win7又恢復了. 這個調(diào)用的函數(shù)就是:
BOOL WINAPI Beep(
_In_ DWORD dwFreq,
_In_ DWORD dwDuration
);
我想, 這個函數(shù)的命名也是沒有出乎任何人的意料吧.
第一個參數(shù)為頻率,范圍為:37Hz到32767Hz. 那么這個范圍怎么來的呢.先說37Hz,這是由于早期PC運行的主頻而來的. 當年所有的PC兼容機給板子上的定時器8254提供的頻率為: 1.19318 MHz(14.31818 MHz除以12). 這個頻率除以65536(8254為16位定時器, 65536是最大的分頻系數(shù))得到18.2Hz的最小分辨率, 而方波是50%占空比, 需要兩次翻轉(zhuǎn)輸出口,所以驅(qū)動揚聲器最低頻率為36.4Hz, 取整得37Hz. 其實如果真正做到bug級別兼容的PC主機, 所謂的37Hz揚聲器聲音就是36.4Hz. 只是后來主板上增加了更精準的定時器, 37Hz也能精確的實現(xiàn). 那么32767怎么來的, 這個簡單一些, 因為早期的操作系統(tǒng)大多是16位的, 16位有符號整數(shù)的最大值是32767. 因為人耳的頻率響應范圍是20Hz-20KHz,這兩個極限也不怎么影響這個API的目的.下面做個實驗,聽一聽實際的揚聲器的嘀嘀聲.
#!/bin/python
#Example source code for 21ic
#Default runs in Python 3.5 Environment
#Author: zhanzr21
#Description: This Example plays different beep using the windows API(Beep). So it will only run on Windows(After Version 7) Machine
#
import winsound
import time
for freq in range(37,32767, 100):
winsound.Beep(freq, 500)
time.sleep(0.5)
根據(jù)作者的實踐,100Hz以下的聲音很難感覺到, 15KHz之后也幾乎聽不到, 反倒是25KHz之后到32KHz慢慢的有點聽得見. 這并非作者有特異功能, 而是屬于一般的音頻硬件的濾波器的副作用, 25KHz到32KHz這個范圍的音頻在通過濾波器時產(chǎn)生了一些低頻的剩余能量.
事實上除了Beep這個函數(shù),還有一個Windows API也是產(chǎn)生簡單聲音. 只是這個函數(shù)優(yōu)先通過聲卡來播放, 如果沒有聲卡就播放給揚聲器. 這個調(diào)用叫做:
BOOL WINAPI MessageBeep(
_In_ UINT uType
);
相比于上面說的Beep函數(shù), 這個函數(shù)僅能播放系統(tǒng)默認的幾種聲音.下面是實驗代碼:
#!/bin/python
#Example source code for 21ic
#Default runs in Python 3.5 Environment
#Author: zhanzr21
#Description: This Example plays different beeps using the windows API(MessageBeep). So it will only run on Windows(After Version 7) Machine
#
import winsound
import time
winsound.MessageBeep(winsound.MB_OK)
time.sleep(0.4)
winsound.MessageBeep(winsound.MB_ICONASTERISK)
time.sleep(0.4)
winsound.MessageBeep(winsound.MB_ICONEXCLAMATION)
time.sleep(0.4)
winsound.MessageBeep(winsound.MB_ICONHAND)
time.sleep(0.4)
winsound.MessageBeep(winsound.MB_ICONQUESTION)
time.sleep(0.4)
winsound.MessageBeep(-1)
time.sleep(0.4)
說完了揚聲器就輪到該說真正的聲卡了.真正的聲卡出現(xiàn)之前還有幾個過渡產(chǎn)品.比如這個使用PC的并口連一個8位的DAC, 效果比起揚聲器來是很大的進步了.
圖 并口接DAC的Speech Thing
硬件上到了總線時代, 才陸續(xù)有聲卡這一類的擴展音頻硬件(不需CPU來做實際的音頻控制)出現(xiàn).
圖 Adlib出產(chǎn)的早期類聲卡(AdLib公司是早期類聲卡的先驅(qū)者)
注意到那個藍色的器件嗎,那是個電位器, 用來調(diào)整音量的. 早期音頻硬件不是標配的時候,操作系統(tǒng)是沒有調(diào)整音量的軟件接口的, 要調(diào)整音量請把手伸到機箱后面找旋鈕.
從技術(shù)的角度來看其實這個也不能算聲卡,只能算類聲卡, 因為輸出的聲音還是多通道的方波之類信號合成的. 這種卡有很多種, 復雜度也有很大的差別. 技術(shù)角度來講, 更類似今天所說的MIDI合成器. 集成了很多效果(鼓聲,鋼琴,手風琴等樂器).
真正和現(xiàn)代計算機的聲卡相提并論的產(chǎn)品為Creative公司的Sound Blaster系列. 在這個系列的1.0版本上使用了一個DSP(其實是個單片機), 可以播放22.05KHz, 8bit單聲道的PCM, 采樣方面支持單聲道的13bit(與后面要講的A-law格式兼容).
圖 早期聲卡Sound Blaster 1.5
下圖是該公司向客戶送測的一個樣品.
圖 Sound Blaster的樣品版本(據(jù)知情人介紹, 上面那個遮住的DIP40片子正是Intel MCS-8051)
從SoundBlaster 16系列開始, 聲卡開始跟我們今天使用的聲卡差別只是在參數(shù), 標準與集成度上了.
圖 SoundBlaster 16 現(xiàn)代聲卡的始祖鳥
現(xiàn)代電腦上的聲卡一般就集成到主板上, 除非有專業(yè)工作室級別的需求. 關(guān)于聲卡的話題,后面的章節(jié)如果有篇幅的話還會講到. 包括如何利用聲卡制作信號發(fā)生器, 示波器等等主題.
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標準編制 2024-08-29
- NRF52810藍牙數(shù)字耳機找人定制
預算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設計
預算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預算:¥5000023小時前
- PLC項目調(diào)試修改
預算:¥100001天前
- 起動電機控制器開發(fā)
預算:¥1100001天前