?? oss--跨平臺的音頻接口簡介.htm
字號:
<html xmlns:fo="http://www.w3.org/1999/XSL/Format"><head><title>OSS--跨平臺的音頻接口簡介</title><meta name="TITLE" content="OSS--跨平臺的音頻接口簡介" /><meta name="zone" content="Linux" /><!-- Linux--><meta name="KEYWORDS" content="Linux, OSS, interface, audio, 音頻, 接口"/><meta name="ABSTRACT" content="OSS(Open Sound System)是 unix 平臺上一個統一的音頻接口, 即只要音頻處理應用程序按照OSS的API來編寫,那么在移植到另外一個平臺時,只需要重新編譯即可。"/><meta name="DESCRIPTION" content="OSS(Open Sound System)是 unix 平臺上一個統一的音頻接口, 即只要音頻處理應用程序按照OSS的API來編寫,那么在移植到另外一個平臺時,只需要重新編譯即可。"/><meta name="DC.DATE" scheme="iso8601" content="2003-3-26"/><meta name="LASTUPDATE" content="2003-3-26"/><!--- common meta part for all zones --><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /><meta name="dWCategory" content="papers_html" /><meta name="OWNER" content="/developerWorks/cn/cncontent.nsf/cn_dW_feedback"/><meta name="source" content="V11"/><meta name="charset" content="GB2312"/><meta name="DC.LANGUAGE" scheme="rfc1766" content="zh-cn"/><meta name="IBM.COUNTRY" content="cn"/><meta name="SECURITY" content="Public"/><meta name="FORMAT" content="text/xhtml"/><meta name="COPYRIGHT" content="Copyright (c) 2002 by IBM Corporation"/><meta name="ROBOTS" content="index,follow"/><meta name="DOCUMENTCOUNTRYCODE" value="cn" /><meta name="DOCUMENTLANGUAGECODE" value="zh" /><meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" by "webmaster@mail.software.ibm.com" for "http://www.ibm.com/software" on "1997.08.13T17:59-0800" r (n 0 s 0 v 0 l 0))' /><meta http-equiv="Expires" content="0" /><script language="JavaScript" src="/developerWorks/cn/js/style.js" type="text/javascript"></script><script language="JavaScript" src="/developerWorks/cn/js/spinbox.js" type="text/javascript"></script></head><body bgcolor="#ffffff" leftmargin="2" marginheight="2" marginwidth="2" topmargin="2"><!-- MASTHEAD--><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td width="160" class="tbgc"><a href="/developerWorks/cn/cgi-bin/click.cgi?url=www.ibm.com/cn/&origin=dwheader"><img src="/developerWorks/cn/i/ibm-logo.gif" border="0" alt="IBM" width="160" height="47"/></a></td><td width="70" class="tbg"><font size="2" color="#99ccff"><b>China</b></font><a href="#main"><img src="/developerWorks/cn/i/c.gif" border="0" width="70"
height="1" alt="Skip to main content"/></a></td><td width="100%" class="tbgc"
align="right" valign="top">
<table border="0" cellpadding="0" cellspacing="0">
<form method="get" action="http://www-128.ibm.com/developerworks/search/searchResults.jsp" id="form1" name="form1">
<tr><td colspan="7"><img src="/developerWorks/cn/i/c.gif"
border="0" width="390" height="4" alt="" /></td></tr>
<tr valign="middle">
<td class="dwsearch"><nobr><font color="#ffffff"><b>搜索:</b></font></nobr> </td>
<td><input type="text" class="dwsearch" name="query" size="23" maxlength="100"/></td>
<td valign="middle" class="dwsearch"> <font color="#ffffff"><b>在</b></font> </td>
<td class="dwsearch"><select class="dwsearch2" name="searchScope">
<OPTION value=dW selected>dW 全部內容</OPTION> <OPTION
value=javaZ> Java 技術</OPTION> <OPTION
value=linuxZ> Linux</OPTION> <OPTION
value=opensrcZ> 開放源碼</OPTION> <OPTION
value=securityZ> 安全</OPTION> <OPTION
value=webservZ> Web 服務</OPTION>
<OPTION value=xmlZ> XML</OPTION> <OPTION
value=dW>.................</OPTION>
<OPTION value=dmdd> DB2</OPTION>
<OPTION value=wsdd> WebSphere</OPTION>
<OPTION value=lotusdd> Lotus 專題</OPTION>
<OPTION value=tivolidd> Tivoli 專題</OPTION>
<OPTION value=dW>.................</OPTION>
<OPTION value=all>IBM 全部內容</OPTION></select></td>
<td><img src="/developerWorks/cn/i/c.gif" border="0" width="5" height="1" alt="" /></td>
<td><input type="image" src="/developerWorks/cn/i/search.gif" width="64" height="23" border="0" value="Search" name="Search" alt="Search button"/></td>
<td valign="top"><img src="/developerWorks/cn/i/c.gif" border="0" width="30" height="1" alt="" /></td>
</tr>
<tr valign="top"><td> </td><td class="dwsearch"> <font color="#ffffff">只用 + - " " ( )</font><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<INPUT type="hidden" name="searchType" value="1">
<INPUT type="hidden" name="searchSite" value="dWChina">
<INPUT type="hidden" name="pageLang" value="zh">
<INPUT type="hidden" name="langEncoding" value="gb2312">
</form></table></td></tr><a id="main" name="main"/>
<tr><td width="160" height="21" class="hbg"> </td>
<td colspan="2" height="21" valign="top" class="bbg">
<a class="mainlink" href="/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/&origin=dwhead">IBM 主頁</a>
<span class="divider"> | </span>
<a class="mainlink" href="/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/products/index.shtml&origin=dwhead">產品與服務</a>
<span class="divider"> | </span>
<a class="mainlink" href="/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/support/index.shtml&origin=dwhead">支持與下載</a>
<span class="divider"> | </span>
<a class="mainlink" href="/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/account/index.shtml&origin=dwhead">個性化服務</a></td></tr></table><!-- Color Bar -->
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr class="hil"><td width="100%" height="1"><img src="/developerWorks/cn/i/c.gif" width="592" height="1" alt=""/></td></tr>
<tr class="dwr1"><td width="100%" height="2"><img src="/developerWorks/cn/i/c.gif" width="592" height="2" alt=""/></td></tr>
<tr class="dwg3"><td width="100%" height="1"><img src="/developerWorks/cn/i/c.gif" width="592" height="1" alt=""/></td></tr>
<tr class="bbg"><td width="100%" height="1"><img src="/developerWorks/cn/i/c.gif" width="592" height="1" alt=""/></td></tr>
<tr class="hil"><td width="100%" height="1"><img src="/developerWorks/cn/i/c.gif" width="592" height="1" alt=""/></td></tr>
</table>
<!-- Breadcrumb Trail -->
<table width="100%" cellspacing="0" cellpadding="0" border="0"><tr valign="top">
<!-- RIGHT GUTTER -->
<td width="5"><img src="/developerWorks/cn/i/c.gif" width="5" height="1" border="0" alt=""/></td>
<td width="100%">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr valign="top">
<td width="100%"><img src="/developerWorks/cn/i/c.gif" width="2" height="4" border="0" alt=""/><br /><b>
<a href="/developerWorks/cn/index.shtml">developerWorks 中國網站</a> :
<a href="/developerWorks/cn/linux/index.shtml">Linux</a> :
<a href="/developerWorks/cn/cnpapers.nsf/linux-papers-bynewest?OpenView&Count=500"> 所有的文章 </a> </b></td>
<td width="136" align="right"><a href="/developerWorks/cn/index.shtml"><img src="/developerWorks/cn/i/dwlogo-small.gif" width="136" height="24" border="0" alt="developerWorks 中國網站"></a></td>
<td width="5"><img src="/developerWorks/cn/i/c.gif" width="5" height="1" border="0" alt=""/></td>
</tr></table>
</tr></table>
<!-- End Breadcrumb Trail --><!-- Title Area--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr valign="top"><td colspan="5"><img alt="" border="0" height="15" src="/developerWorks/cn/i/c.gif" width="5" /></td></tr><tr valign="top"><!-- Title--><td width="2"><img alt="" border="0" height="1" src="/developerWorks/cn/i/c.gif" width="2" /></td><td><!-- <span class="astitle">[Series title]: </span>--><span class="atitle">OSS--跨平臺的音頻接口簡介</span></td><td width="8"></td><td width="6"><img alt="" border="0" height="1" src="/developerWorks/cn/i/c.gif" width="6" /></td></tr><!-- Black line separator--><tr valign="top"><td bgcolor="#000000" colspan="5"><img alt="" border="0" height="1" src="/developerWorks/cn/i/c.gif" width="100" /></td></tr><tr valign="top"><td bgcolor="#FFFFFF" colspan="5"><img alt="" border="0" height="8" src="/developerWorks/cn/i/c.gif" width="100" /></td></tr></table><!-- END HEADER AREA and START BODY AREA--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr valign="top"><!-- LEFT GUTTER--><td width="5"><img alt="" border="0" height="1" src="/developerWorks/cn/i/c.gif" width="5" /></td><!-- START CENTER COLUMN--><td width="100%"><table align="right" border="0" cellpadding="0" cellspacing="0" width="168"><tr><!-- Sidebar Gutter--><td width="8"><img alt="" height="21" src="/developerWorks/cn/i/c.gif" width="5" /></td><td width="160"><!-- Start TOC--><table border="0" cellpadding="0" cellspacing="0" width="160"><tr><td bgcolor="#000000" height="1" width="160"><img alt="" height="1" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><tr><td align="center" background="/developerWorks/cn/i/bg-gold.gif" height="5"><b>內容:</b></td></tr><tr><td bgcolor="#666666" height="1" width="160"><img alt="" height="1" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><tr><td align="right"><table border="0" cellpadding="3" cellspacing="0" width="98%"><tr><td><a href="#section1">基礎知識</a></td></tr><tr><td><a href="#section2">音頻編程</a></td></tr><tr><td><a href="#section3">Mixer編程</a></td></tr><tr><td><a href="#section4">結束語</a></td></tr><tr><td><a href="#resources">參考資料</a></td></tr><!--<tr><td><a href="#author1">關于作者</a></td></tr>--></table></td></tr></table><!-- End TOC--><!-- Start Related Content Area--><table border="0" cellpadding="0" cellspacing="0" width="160"><tr><td bgcolor="#000000" height="1" width="160"><img alt="" height="1" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><!--<tr><td align="center" background="/developerWorks/cn/i/bg-gold.gif" height="5"><b>相關內容:</b></td></tr><tr><td bgcolor="#666666" height="1" width="160"><img alt="" height="1" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><tr><td align="right"><table border="0" cellpadding="3" cellspacing="0" width="98%"><tr><td><a href="#1">介紹</a></td></tr><tr><td><a href="#1">介紹</a></td></tr></table></td></tr>--></table><!-- End TOC--><!-- Start Related Content Area--><table border="0" cellpadding="0" cellspacing="0" width="160"><tr><td bgcolor="#000000" height="1" width="160"><img alt="" height="1" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><tr><td align="center" background="/developerWorks/cn/i/bg-gold.gif" height="5"><a class="nav" href="/developerWorks/cn/linux/index.shtml"><b>在 Linux 專區還有:</b></a></td></tr><tr><td bgcolor="#666666" height="1" width="160"><img alt="" height="1" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><tr><td align="right"><table border="0" cellpadding="3" cellspacing="0" width="98%"><tr><td><a href="/developerWorks/cn/cnedu.nsf/linux-onlinecourse-bytitle?OpenView&Count=500">教程</a></td></tr><tr><td><a href="/developerWorks/cn/cntools.nsf/dw/linux-codelib-byname?OpenDocument&Count=500">工具與產品</a></td></tr><tr><td><a href="/developerWorks/cn/cntools.nsf/dw/linux-projects-byname?OpenDocument&Count=500">代碼與組件</a></td></tr><tr><td><a href="/developerWorks/cn/cnpapers.nsf/linux-papers-bynewest?OpenView&Count=500">文章</a></td></tr></table></td></tr></table><!-- End Related dW Content Area--><table border="0" cellpadding="0" cellspacing="0" width="160"><tr><td bgcolor="#000000" colspan="2" height="2" width="150"><img alt="" height="2" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr><tr><td bgcolor="#FFFFFF" colspan="2" height="2" width="150"><img alt="" height="2" src="/developerWorks/cn/i/c.gif" width="160" /></td></tr></table><!-- END STANDARD SIDEBAR AREA--></td></tr></table><!-- START SUBTITLE AND CONTENT--><p><a href="#author1">湯凱</a> (<a href="mailto:tangk73@hotmail.com">tangk73@hotmail.com</a>)<br /><br /> 2003 年 03 月</p><!--<blockquote>[put your paper abstract here]</blockquote>--><p>OSS(Open Sound System)是unix平臺上一個統一的音頻接口。以前,每個Unix廠商都會提供一個自己專有的API,用來處理音頻。這就意味著為一種Unix平臺編寫的音頻處理應用程序,在移植到另外一種Unix平臺上時,必須要重寫。不僅如此,在一種平臺上具備的功能,可能在另外一個平臺上無法實現。但是,OSS出現以后情況就大不一樣了,只要音頻處理應用程序按照OSS的API來編寫,那么在移植到另外一個平臺時,只需要重新編譯即可。因此,OSS提供了源代碼級的可移植性。</p><p>同時,很多的Unix工作站中,只能提供錄音與放音的功能。有了OSS后,給這些工作站帶來了MIDI功能,加上音頻流、語音識別/生成、計算機電話(CT)、JAVA以及其它的多媒體技術,在Unix工作站中,同樣可以享受到同Windows、Macintosh環境一樣的音頻世界。另外,OSS還提供了與視頻和動畫播放同步的音頻能力,這對在Unix中實現動畫、游戲提供了幫助。</p><p>本文首先解釋在音頻編程時經常遇到的名詞、設備文件的含義,然后分別在錄音、播放、Mixer方面對OSS接口的使用方法進行介紹。由于OSS API十分豐富,因此在本文中只介紹那些最為常用的接口。對于OSS API的一個完整描述,可以參考[1]。</p><p><a name="section1"><span class="atitle2">一、基礎知識</span></a></p><p>數字音頻設備(有時也稱codec,PCM,DSP,ADC/DAC設備):播放或錄制數字化的聲音。它的指標主要有:采樣速率(電話為8K,DVD為96K)、channel數目(單聲道,立體聲)、采樣分辨率(8-bit,16-bit)。</p><p>mixer(混頻器):用來控制多個輸入、輸出的音量,也控制輸入(microphone,line-in,CD)之間的切換。</p><p>synthesizer(合成器):通過一些預先定義好的波形來合成聲音,有時用在游戲中聲音效果的產生。</p><p>MIDI 接口:MIDI接口是為了連接舞臺上的synthesizer、鍵盤、道具、燈光控制器的一種串行接口。</p><p>在Unix系統中,所有的設備都被統一成文件,通過對文件的訪問方式(首先open,然后read/write,同時可以使用ioctl讀取/設置參數,最后close)來訪問設備。在OSS中,主要有以下的幾種設備文件:</p><ul><li>/dev/mixer:訪問聲卡中內置的mixer,調整音量大小,選擇音源。</li><li>/dev/sndstat:測試聲卡,執行cat /dev/sndstat會顯示聲卡驅動的信息。</li><li>/dev/dsp 、/dev/dspW、/dev/audio:讀這個設備就相當于錄音,寫這個設備就相當于放音。/dev/dsp與/dev/audio之間的區別在于采樣的編碼不同,/dev/audio使用μ律編碼,/dev/dsp使用8-bit(無符號)線性編碼,/dev/dspW使用16-bit(有符號)線形編碼。/dev/audio主要是為了與SunOS兼容,所以盡量不要使用。</li><li>l /dev/sequencer:訪問聲卡內置的,或者連接在MIDI接口的synthesizer。</li></ul><p>這些設備文件的設備編號見[1]。</p><p><a name="section2"><span class="atitle2">二、音頻編程</span></a></p><p>OSS為音頻編程提供三種設備,分別是/dev/dsp,/dev/dspW和/dev/audio,前面已經提到了它們之間的區別。</p><p>用戶可以直接使用Unix的命令來放音和錄音,命令cat /dev/dsp >xyz可用來錄音,錄音的結果放在xyz文件中;命令cat xyz >/dev/dsp播放聲音文件xyz。</p><p>如果通過編程的方式來使用這些設備,那么Unix平臺通過文件系統提供了統一的訪問接口。程序員可以通過文件的操作函數直接控制這些設備,這些操作函數包括:open、close、read、write、ioctl等。下面我們就分別討論打開音頻設備、放音、錄音和參數調整。</p><p><span class="atitle3">1. 打開音頻設備</span><br /></p><p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -