国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

東莞長安網(wǎng)站設(shè)計軟件培訓(xùn)班

東莞長安網(wǎng)站設(shè)計,軟件培訓(xùn)班,怎樣做網(wǎng)站亮照亮標(biāo),南寧網(wǎng)站推廣ALPHA I.MX6U 開發(fā)板支持音頻,板上搭載了音頻編解碼芯片 WM8960,支持播放以及錄音功能!本章我們來學(xué)習(xí) Linux 下的音頻應(yīng)用編程,音頻應(yīng)用編程相比于前面幾個章節(jié)所介紹的內(nèi)容、其難度有所上升,但是筆者僅向大家介紹 Li…

ALPHA I.MX6U 開發(fā)板支持音頻,板上搭載了音頻編解碼芯片 WM8960,支持播放以及錄音功能!本章我們來學(xué)習(xí) Linux 下的音頻應(yīng)用編程,音頻應(yīng)用編程相比于前面幾個章節(jié)所介紹的內(nèi)容、其難度有所上升,但是筆者僅向大家介紹 Linux 音頻應(yīng)用編程中的基礎(chǔ)知識,而更多細(xì)節(jié)、更加深入的內(nèi)容需要大家自己去學(xué)習(xí)。

本章將會討論如下主題內(nèi)容。

? Linux ALSA 框架概述;

? alsa-lib 庫介紹;

? alsa-lib 庫移植;

? alsa-lib 庫的使用;

? 音頻應(yīng)用編程之播放;

? 音頻應(yīng)用編程之錄音。


ALSA 概述

ALSA Advanced Linux Sound Architecture(高級的 Linux 聲音體系)的縮寫,目前已經(jīng)成為了 linux下的主流音頻體系架構(gòu),提供了音頻和 MIDI 的支持,替代了原先舊版本中的 OSS(開發(fā)聲音系統(tǒng));學(xué)習(xí)過 Linux 音頻驅(qū)動開發(fā)的讀者肯定知道這個;事實上,ALSA Linux 系統(tǒng)下一套標(biāo)準(zhǔn)的、先進(jìn)的音頻驅(qū)動框架,那么這套框架的設(shè)計本身是比較復(fù)雜的,采用分離、分層思想設(shè)計而成,具體的細(xì)節(jié)便不給大家介紹了!作為音頻應(yīng)用編程,我們不用去研究這個。

在應(yīng)用層,ALSA 為我們提供了一套標(biāo)準(zhǔn)的 API,應(yīng)用程序只需要調(diào)用這些 API 就可完成對底層音頻硬件設(shè)備的控制,譬如播放、錄音等,這一套 API 稱為 alsa-lib。如下圖所示:


alsa-lib 簡介

如上所述,alsa-lib 是一套 Linux 應(yīng)用層的 C 語言函數(shù)庫,為音頻應(yīng)用程序開發(fā)提供了一套統(tǒng)一、標(biāo)準(zhǔn)的接口,應(yīng)用程序只需調(diào)用這一套 API 即可完成對底層聲卡設(shè)備的操控,譬如播放與錄音。

用戶空間的 alsa-lib 對應(yīng)用程序提供了統(tǒng)一的 API 接口,這樣可以隱藏驅(qū)動層的實現(xiàn)細(xì)節(jié),簡化了應(yīng)用程序的實現(xiàn)難度、無需應(yīng)用程序開發(fā)人員直接去讀寫音頻設(shè)備節(jié)點。所以本章,對于我們來說,學(xué)習(xí)音頻應(yīng)用編程其實就是學(xué)習(xí) alsa-lib 庫函數(shù)的使用、如何基于 alsa-lib 庫函數(shù)開發(fā)音頻應(yīng)用程序。

ALSA 提供了關(guān)于 alsa-lib 的使用說明文檔,其鏈接地址為:https://www.alsa-project.org/alsa-doc/alsa-lib/

進(jìn)入到該鏈接地址后,如下所示:

alsa-lib 庫支持功能比較多,提供了豐富的 API 接口供應(yīng)用程序開發(fā)人員調(diào)用,根據(jù)函數(shù)的功能、作用將這些 API 進(jìn)行了分類,可以點擊上圖中 Modules 按鈕查看其模塊劃分,如下所示:

一個分類就是一個模塊(module),有些模塊下可能該包含了子模塊,譬如上圖中,模塊名稱前面有三角箭頭的表示該模塊包含有子模塊。

? Global defines and functions:包括一些全局的定義,譬如函數(shù)、宏等;

? Constants for Digital Audio Interfaces:數(shù)字音頻接口相關(guān)的常量;

? Input Interface:輸入接口;

? Output Interface:輸出接口;

? Error handling:錯誤處理相關(guān)接口;

? Configuration Interface:配置接口;

? Control Interface:控制接口;

? PCM InterfacePCM 設(shè)備接口;

? RawMidi InterfaceRawMidi 接口;

? Timer Interface:定時器接口;

? Hardware Dependant Interface:硬件相關(guān)接口;

? MIDI SequencerMIDI 音序器;

? External PCM plugin SDK:外部 PCM 插件 SDK

? External Control Plugin SDK:外部控制插件 SDK

? Mixer Interface:混音器接口;

? Use Case Interface:用例接口;

? Topology Interface:拓?fù)浣涌凇?

可以看到,alsa-lib 提供的接口確實非常多、模塊很多,以上所列舉出來的這些模塊,很多模塊筆者也不是很清楚它們的具體功能、作用,但是本章我們僅涉及到三個模塊下的 API 函數(shù),包括:PCM Interface、Error Interface 以及 Mixer Interface。

PCM Interface

PCM Interface,提供了 PCM 設(shè)備相關(guān)的操作接口,譬如打開/關(guān)閉 PCM 設(shè)備、配置 PCM 設(shè)備硬件或軟件參數(shù)、控制 PCM 設(shè)備(啟動、暫停、恢復(fù)、寫入/讀取數(shù)據(jù)),該模塊下還包含了一些子模塊,如下所示:

點擊模塊名稱可以查看到該模塊提供的API接口有哪些以及相應(yīng)的函數(shù)說明,這里就不給大家演示了!

Error Interface

該模塊提供了關(guān)于錯誤處理相關(guān)的接口,譬如函數(shù)調(diào)用發(fā)生錯誤時,可調(diào)用該模塊下提供的函數(shù)打印錯誤描述信息。

Mixer Interface

提供了關(guān)于混音器相關(guān)的一系列操作接口,譬如音量、聲道控制、增益等等。


sound 設(shè)備節(jié)點

Linux 內(nèi)核設(shè)備驅(qū)動層、基于 ALSA 音頻驅(qū)動框架注冊的 sound 設(shè)備會在/dev/snd 目錄下生成相應(yīng)的設(shè)備節(jié)點文件,譬如 ALPHA I.MX6U 開發(fā)板出廠系統(tǒng)/dev/snd 目錄下有如下文件:

Tips:注意,Mini I.MX6U 開發(fā)板出廠系統(tǒng)/dev/snd 目錄下是沒有這些文件的,因為 Mini 板不支持音頻、沒有板載音頻編解碼芯片,所以本章實驗例程無法在 Mini 板上進(jìn)行測試,請悉知!

從上圖可以看到有如下設(shè)備文件:

? controlC0用于聲卡控制的設(shè)備節(jié)點,譬如通道選擇、混音器、麥克風(fēng)的控制等,C0 表示聲卡 0(card0);

? pcmC0D0c用于錄音的 PCM 設(shè)備節(jié)點。其中 C0 表示 card0,也就是聲卡 0;而 D0 表示 device0,也就是設(shè)備 0;最后一個字母 c capture 的縮寫,表示錄音;所以 pcmC0D0c 便是系統(tǒng)的聲卡0 中的錄音設(shè)備 0

? pcmC0D0p用于播放(或叫放音、回放)的 PCM 設(shè)備節(jié)點。其中 C0 表示 card0,也就是聲卡 0;而 D0 表示 device 0,也就是設(shè)備 0;最后一個字母 p playback 的縮寫,表示播放;所以 pcmC0D0p便是系統(tǒng)的聲卡 0 中的播放設(shè)備 0

? pcmC0D1c用于錄音的 PCM 設(shè)備節(jié)點。對應(yīng)系統(tǒng)的聲卡 0 中的錄音設(shè)備 1

? pcmC0D1p用于播放的 PCM 設(shè)備節(jié)點。對應(yīng)系統(tǒng)的聲卡 0 中的播放設(shè)備 1

? timer定時器。

本章我們編寫的應(yīng)用程序,雖然是調(diào)用 alsa-lib 庫函數(shù)去控制底層音頻硬件,但最終也是落實到對 sound設(shè)備節(jié)點的 I/O 操作,只不過 alsa-lib 已經(jīng)幫我們封裝好了。在 Linux 系統(tǒng)的/proc/asound 目錄下,有很多的文件,這些文件記錄了系統(tǒng)中聲卡相關(guān)的信息,如下所示:

cards

通過"cat /proc/asound/cards"命令、查看 cards 文件的內(nèi)容,可列出系統(tǒng)中可用的、注冊的聲卡,如下所示:

cat /proc/asound/cards

我們的阿爾法板子上只有一個聲卡(WM8960 音頻編解碼器),所以它的編號為 0,也就是 card0。系統(tǒng)中注冊的所有聲卡都會在/proc/asound/目錄下存在一個相應(yīng)的目錄,該目錄的命名方式為 cardXX 表示 聲卡的編號),譬如圖 28.3.2 中的 card0card0 目錄下記錄了聲卡 0 相關(guān)的信息,譬如聲卡的名字以及聲卡注冊的 PCM 設(shè)備,如下所示:

devices

列出系統(tǒng)中所有聲卡注冊的設(shè)備,包括 control、pcm、timerseq 等等。如下所示:

cat /proc/asound/devices

pcm

列出系統(tǒng)中的所有 PCM 設(shè)備,包括 playback capture

cat /proc/asound/pcm


alsa-lib 移植

因為 alsa-lib ALSA 提供的一套 Linux 下的 C 語言函數(shù)庫,需要將 alsa-lib 移植到開發(fā)板上,這樣基于 alsa-lib 編寫的應(yīng)用程序才能成功運行,除了移植 alsa-lib 庫之外,通常還需要移植 alsa-utilsalsa-utils 包含了一些用于測試、配置聲卡的工具。

事實上,ALPHA I.MX6U 開發(fā)板出廠系統(tǒng)中已經(jīng)移植了 alsa-lib alsa-utils,本章我們直接使用出廠系統(tǒng)移植好的 alsa-lib alsa-utils 進(jìn)行測試,筆者也就不再介紹移植過程了。其實它們的移植方法也非常簡單,如果你想自己嘗試移植,網(wǎng)上有很多參考,大家可以自己去看看。

alsa-utils 提供了一些用于測試、配置聲卡的工具,譬如 aplayarecord、alsactlalsaloop、alsamixer、amixer 等,在開發(fā)板出廠系統(tǒng)上可以直接使用這些工具,這些應(yīng)用程序也都是基于 alsa-lib 編寫的。

aplay

aplay 是一個用于測試音頻播放功能程序,可以使用 aplay 播放 wav 格式的音頻文件,如下所示:

程序運行之后就會開始播放音樂,因為 ALPHA 開發(fā)板支持喇叭和耳機(jī)自動切換,如果不插耳機(jī)默認(rèn)從喇叭播放音樂,插上耳機(jī)以后喇叭就會停止播放,切換為耳機(jī)播放音樂,這個大家可以自己進(jìn)行測試。

需要注意的是,aplay 工具只能解析 wav 格式音頻文件,不支持 mp3 格式解碼,所以無法使用 aplay 工具播放 mp3 音頻文件。稍后筆者會向大家介紹如何基于 alsa-lib 編寫一個簡單地音樂播放器,實現(xiàn)與 aplay相同的效果。

更多命令參考正電原子應(yīng)用開發(fā)手冊即可。

暫略。


編寫一個簡單的alsa-lib應(yīng)用程序

本小節(jié)開始,我們來學(xué)習(xí)如何基于 alsa-lib 編寫音頻應(yīng)用程序,alsa-lib 提供的庫函數(shù)也別多,筆者肯定不會全部給大家介紹,只介紹基礎(chǔ)的使用方法,關(guān)于更加深入、更加詳細(xì)的使用方法需要大家自己去研究、學(xué)習(xí)。

對于 alsa-lib 庫的使用,ALSA 提供了一些參考資料來幫助應(yīng)用程序開發(fā)人員快速上手 alsa-lib、基于alsa-lib 進(jìn)行應(yīng)用編程,以下筆者給出了鏈接:

https://users.suse.com/~mana/alsa090_howto.html

https://www.alsa-project.org/alsa-doc/alsa-lib/examples.html

第一份文檔向用戶介紹了如何使用 alsa-lib 編寫簡單的音頻應(yīng)用程序,包括 PCM 播放音頻、PCM 錄音等,筆者也是參考了這份文檔來編寫本章教程,對應(yīng)初學(xué)者,建議大家看一看。

第二個鏈接地址是 ALSA 提供的一些示例代碼,如下所示:

點擊對應(yīng)源文件即可查看源代碼。

以上便是 ALSA 提供的幫助文檔以及參考代碼,鏈接地址已經(jīng)給出了,大家有興趣可以看一下。

本小節(jié)筆者將向大家介紹如何基于 alsa-lib 編寫一個簡單地音頻應(yīng)用程序,譬如播放音樂、錄音等;但在此之前,首先我們需要先來了解一些基本的概念,為后面的學(xué)習(xí)打下一個堅實的基礎(chǔ)!

一些基本概念

主要是與音頻相關(guān)的基本概念,因為在 alsa-lib 應(yīng)用編程中會涉及到這些概念,所以先給大家進(jìn)行一個簡單地介紹。

樣本長度(Sample

樣本是記錄音頻數(shù)據(jù)最基本的單元,樣本長度就是采樣位數(shù),也稱為位深度(Bit Depth、Sample Size、Sample Width)。是指計算機(jī)在采集和播放聲音文件時,所使用數(shù)字聲音信號的二進(jìn)制位數(shù),或者說每個采樣樣本所包含的位數(shù)(計算機(jī)對每個通道采樣量化時數(shù)字比特位數(shù)),通常有 8bit、16bit、24bit 等。

聲道數(shù)(channel

分為單聲道(Mono)和雙聲道/立體聲(Stereo)。1 表示單聲道、2 表示立體聲。

幀(frame

幀記錄了一個聲音單元,其長度為樣本長度與聲道數(shù)的乘積,一段音頻數(shù)據(jù)就是由苦干幀組成的。

把所有聲道中的數(shù)據(jù)加在一起叫做一幀,對于單聲道:一幀 = 樣本長度 * 1;雙聲道:一幀 = 樣本長度 * 2。譬如對于樣本長度為 16bit 的雙聲道來說,一幀的大小等于:16 * 2 / 8 = 4 個字節(jié)。

更多命令參考正電原子應(yīng)用開發(fā)手冊即可。

暫略。

關(guān)于音頻,先了解吧。

后面如果要接觸,再來深入學(xué)習(xí)。


補(bǔ)充

什么是PCM設(shè)備?

脈沖編碼調(diào)制(Pulse Code Modulation,簡稱PCM)是一種將模擬信號轉(zhuǎn)換為數(shù)字信號的技術(shù)。這種轉(zhuǎn)換過程是通過測量模擬信號的特征點(例如電壓或電流)并將其編碼為二進(jìn)制數(shù)字?jǐn)?shù)據(jù)來實現(xiàn)的。

在通信系統(tǒng)中,PCM設(shè)備的作用主要體現(xiàn)在以下幾個方面:

  • 低速業(yè)務(wù)轉(zhuǎn)換:PCM設(shè)備可以將各種低速業(yè)務(wù)轉(zhuǎn)換成數(shù)字信號,并裝入64kbit/s通道。這些低速業(yè)務(wù)包括但不限于語音電話、熱線電話、磁石電話等,以及2W/4W模擬音頻、RS-232、RS-422、RS-485、V.35、G.703同向64kbit/s以太網(wǎng)等。

  • 多路復(fù)用:PCM設(shè)備具有將30路64kbit/s通道復(fù)接成2Mbit/s的能力,從而實現(xiàn)了多路復(fù)用的功能。這意味著在同一條物理線路上可以同時傳輸多路信號,提高了線路的利用率和通信效率。

  • 信號傳輸:在光纖通信系統(tǒng)中,PCM設(shè)備發(fā)揮著重要作用。光纖中傳輸?shù)亩M(jìn)制光脈沖“0”碼和“1”碼,就是由二進(jìn)制數(shù)字信號對光源進(jìn)行通斷調(diào)制產(chǎn)生的,而數(shù)字信號正是通過對連續(xù)變化的模擬信號進(jìn)行抽樣、量化和編碼得到的,這就是PCM的過程。

  • 接口類型多樣:PCM設(shè)備的接口類型豐富多樣,包括環(huán)路中繼接口、用戶線接口、二線音頻接口、四線音頻接口、異步RS232/V.24接口、同步RS232、RS422接口、RS485接口、V.35接口、G.703 64Kb/s同向數(shù)據(jù)接口等。

總的來說,PCM設(shè)備在現(xiàn)代通信系統(tǒng)中扮演著重要角色,它不僅能夠?qū)崿F(xiàn)模擬信號到數(shù)字信號的轉(zhuǎn)換,還能夠通過多路復(fù)用技術(shù)提高通信效率,滿足不同用戶對數(shù)據(jù)傳輸速率的需求。

http://m.aloenet.com.cn/news/44284.html

相關(guān)文章:

  • 無錫 網(wǎng)站建設(shè)公司北京做網(wǎng)站公司哪家好
  • 網(wǎng)站菜單素材湖北seo
  • 網(wǎng)頁游戲網(wǎng)站斗地主青島seo關(guān)鍵詞優(yōu)化公司
  • 新媒體營銷案例有哪些百度seo如何優(yōu)化關(guān)鍵詞
  • 網(wǎng)站設(shè)為主頁功能怎么做下載谷歌瀏覽器并安裝
  • 網(wǎng)絡(luò)規(guī)劃的內(nèi)容廣東網(wǎng)站營銷seo費用
  • 惠州建設(shè)網(wǎng)站搜索引擎營銷案例分析
  • wordpress 關(guān)閉自動保存功能seo自動排名軟件
  • 浙江高端網(wǎng)站熱點新聞
  • 設(shè)計公司 網(wǎng)站個人網(wǎng)頁設(shè)計作品模板
  • 公司做影視網(wǎng)站侵權(quán)全國疫情防控最新數(shù)據(jù)
  • 網(wǎng)站系統(tǒng)與網(wǎng)站源碼的關(guān)系上海今天發(fā)生的重大新聞
  • 湖南衡陽網(wǎng)站建設(shè)開發(fā)網(wǎng)站的流程是
  • 湖北華亞建設(shè)工程有限公司網(wǎng)站超級優(yōu)化
  • 蘇州市相城區(qū)住房和城鄉(xiāng)建設(shè)局網(wǎng)站網(wǎng)絡(luò)媒體推廣方案
  • 鄭州網(wǎng)站制作怎么樣江蘇seo平臺
  • app界面模板免費下載百度網(wǎng)站排名優(yōu)化
  • 網(wǎng)上發(fā)布信息的網(wǎng)站怎么做的百度廣告競價
  • 提供佛山順德網(wǎng)站建設(shè)網(wǎng)站seo優(yōu)化軟件
  • 專業(yè)廣州網(wǎng)站建設(shè)臨沂網(wǎng)站建設(shè)方案服務(wù)
  • 做網(wǎng)站必須要購買空間嗎谷歌瀏覽器 免費下載
  • 網(wǎng)頁編輯軟件中文版seo英文全稱
  • 外貿(mào)怎么做網(wǎng)站外鏈seo網(wǎng)站結(jié)構(gòu)優(yōu)化的方法
  • 做調(diào)查賺錢網(wǎng)站有哪些網(wǎng)站推廣
  • 怎么讓網(wǎng)站能被百度到互聯(lián)網(wǎng)營銷師考試
  • 網(wǎng)站建設(shè)經(jīng)驗分享google adsense
  • 搜狗新聞源網(wǎng)站怎么做云南seo公司
  • 江寧網(wǎng)站建設(shè)要多少錢新聞小學(xué)生摘抄
  • wordpress 圖片在哪威海百度seo
  • 如何用魔方網(wǎng)表做門戶網(wǎng)站真正免費的建站