欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Linux開(kāi)發(fā)板中使用.NET實(shí)現(xiàn)音頻錄制與播放功能

 更新時(shí)間:2025年03月12日 09:12:40   作者:桑榆肖物  
本文將以L(fǎng)inux開(kāi)發(fā)板為基礎(chǔ),使用ALSA音頻框架和C#語(yǔ)言,演示如何實(shí)現(xiàn)基礎(chǔ)的音頻錄制與播放功能,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下

1. 背景

音頻處理是嵌入式開(kāi)發(fā)中常見(jiàn)的需求,無(wú)論是語(yǔ)音交互、環(huán)境監(jiān)測(cè)還是多媒體應(yīng)用都離不開(kāi)音頻模塊的支持。在Linux系統(tǒng)中,ALSA(Advanced Linux Sound Architecture)是一個(gè)成熟的音頻框架,提供了豐富的音頻處理接口,支持音頻的錄制、播放、混音等功能。而C#語(yǔ)言作為一種跨平臺(tái)的高級(jí)語(yǔ)言,也有著廣泛的應(yīng)用場(chǎng)景,通過(guò).NET技術(shù),我們可以在Linux系統(tǒng)中使用C#語(yǔ)言進(jìn)行開(kāi)發(fā)。

解決了.NET IOT 設(shè)備的音頻處理的基礎(chǔ)需求,我們就可以在此基礎(chǔ)上實(shí)現(xiàn)更多的功能,比如關(guān)鍵詞喚醒,接入大模型的語(yǔ)音交互功能等。

2. 環(huán)境準(zhǔn)備

在開(kāi)始之前,我們需要準(zhǔn)備一些基礎(chǔ)的環(huán)境。

  • 搭載Linux系統(tǒng)的開(kāi)發(fā)板(如樹(shù)莓派、Jetson Nano、D-Robotics、OrangePi、Luckfox 等)
  • 支持ALSA驅(qū)動(dòng)的音頻輸入/輸出設(shè)備(板載聲卡或USB聲卡)
  • 一定的存儲(chǔ)空間和內(nèi)存

這里的演示我們以 Luckfox 開(kāi)發(fā)板為例,其他開(kāi)發(fā)板也可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。對(duì)于音頻輸入/輸出設(shè)備,Luckfox Pico Ultra 板載了貼片麥克風(fēng),并有一個(gè)MX1.25 2P 連接器,支持接入 8Ω 1W 喇叭。對(duì)于樹(shù)莓派或 Jetson Nano 可以在微雪官網(wǎng)找到對(duì)應(yīng)的音頻擴(kuò)展板,也可以使用USB聲卡,根據(jù)實(shí)際需求進(jìn)行選擇。

2.2. 軟件依賴(lài)

首先,建議安裝好.NET 環(huán)境,.NET 8 或 .NET 9 都可以。當(dāng)然也可以選擇在本地開(kāi)發(fā)完畢后發(fā)布非框架依賴(lài)的版本到開(kāi)發(fā)板上運(yùn)行。但是,這樣傳輸不便,畢竟文件較大。直接在開(kāi)發(fā)板上開(kāi)發(fā),也是非常不建議的,因?yàn)殚_(kāi)發(fā)板的性能有限,開(kāi)發(fā)效率低下,編譯時(shí)間長(zhǎng)。

其次,需要安裝 ALSA 的開(kāi)發(fā)庫(kù),以便在C#中調(diào)用ALSA的接口。在Ubuntu系統(tǒng)中,可以通過(guò)以下命令安裝:

sudo apt-get install libasound2-dev

同時(shí),為了方便我們使用音頻設(shè)備,需要將當(dāng)前用戶(hù)添加到音頻組中,以便在無(wú)需 sudo 訪(fǎng)問(wèn)音頻設(shè)備??梢酝ㄟ^(guò)以下命令添加:

sudo usermod -a -G audio $USER

加入音頻組后,需要重新登錄或重啟系統(tǒng),使用戶(hù)組生效。

2.3. 音頻配置

在開(kāi)始之前,我們需要確認(rèn)音頻設(shè)備可以正常使用??梢酝ㄟ^(guò)以下命令查看當(dāng)前系統(tǒng)的音頻設(shè)備信息:

arecord -l
aplay -l

同時(shí)我們可以對(duì)音頻設(shè)備進(jìn)行簡(jiǎn)單的測(cè)試:

arecord -f S16_LE -r 16000 -c 2 -d 5 test.wav
aplay test.wav

上面的命令使用的是默認(rèn)的音頻設(shè)備,如果有多個(gè)音頻設(shè)備,可以通過(guò) -D 參數(shù)指定設(shè)備名稱(chēng)。如果能夠正常錄制和播放音頻,則說(shuō)明音頻設(shè)備可以正常使用。

為了提高麥克風(fēng)收音范圍和播放的音量大小,我們可以通過(guò)以下命令調(diào)整麥克風(fēng)增益以及播放音量:

amixer cset name='ADC ALC Left Volume' 26
amixer cset name='ADC ALC Right Volume' 6
amixer cset name='ADC Digital Left Volume' 195
amixer cset name='ADC Digital Right Volume' 195
amixer cset name='ADC MIC Left Gain' 3
amixer cset name='ADC MICBIAS Voltage' 'VREFx0_975'
amixer cset name='ADC Mode' 'SingadcL'
amixer cset name='DAC LINEOUT Volume' 30

不同的設(shè)備可能有不同的音頻控制器,可以通過(guò) amixer scontrols 查看當(dāng)前設(shè)備支持的音頻控制器,然后通過(guò) amixer scontents 查看具體的控制器名稱(chēng)和取值范圍。

需要注意的是,有的 name 可能需要增加一個(gè) Volume 后綴,同時(shí)需要注意取值范圍,不要設(shè)置過(guò)大或過(guò)小,以免損壞設(shè)備。對(duì)于不同的設(shè)備,可能存在不一樣的地方,可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。主要就是調(diào)整麥克風(fēng)的增益和提高偏置電壓,以適應(yīng)不同的環(huán)境。

當(dāng)然,除了指令外,也可以通過(guò) alsamixer 命令進(jìn)入交互式界面進(jìn)行調(diào)整,可以參考 Luckfox 開(kāi)發(fā)板的音頻配置文檔。

3. 編寫(xiě)代碼

首先我們需要進(jìn)行項(xiàng)目的初始化,可以通過(guò)以下命令創(chuàng)建一個(gè)新的控制臺(tái)應(yīng)用程序。同時(shí),我們需要安裝一個(gè)用于操作ALSA的.NET庫(kù) Alsa.Net,這個(gè)庫(kù)實(shí)現(xiàn)了對(duì)ALSA的封裝,方便我們?cè)?NET中調(diào)用ALSA的接口。

dotnet new console -n AudioDemo
cd AudioDemo
dotnet add package Alsa.Net

完整的代碼如下:

using Alsa.Net;

class Program
{
    static void Main(string[] args)
    {
        var settings = new SoundDeviceSettings
        {
            MixerDeviceName = "hw:0",       // 混音設(shè)備
            PlaybackDeviceName = "hw:0",     // 播放設(shè)備
            RecordingDeviceName = "hw:0",    // 錄音設(shè)備
            RecordingSampleRate = 16_000     // 16kHz采樣率
        };

        using var alsaDevice = AlsaDeviceBuilder.Create(settings);
        
        // 錄制10秒音頻
        Console.WriteLine("開(kāi)始錄音...");
        alsaDevice.Record(10, "output.wav");

        // 播放錄制的音頻
        Console.WriteLine("播放音頻...");
        alsaDevice.Play("output.wav");
    }
}

在代碼中,我們首先創(chuàng)建了一個(gè) SoundDeviceSettings 對(duì)象,用于指定音頻設(shè)備的名稱(chēng)和采樣率。然后通過(guò) AlsaDeviceBuilder.Create 方法創(chuàng)建一個(gè) AlsaDevice 對(duì)象,用于操作音頻設(shè)備。在 AlsaDevice 對(duì)象中,我們可以調(diào)用 Record 方法錄制音頻,或者調(diào)用 Play 方法播放音頻。hw:0 表示使用第一個(gè)硬件設(shè)備,可通過(guò)aplay -l查看可用設(shè)備。16kHz適用于語(yǔ)音場(chǎng)景,音樂(lè)場(chǎng)景建議使用44.1kHz或48kHz。

編寫(xiě)好代碼后,我們就可以發(fā)布到開(kāi)發(fā)板上運(yùn)行了,對(duì)于 Luckfox 開(kāi)發(fā)板記得選則 arm 架構(gòu),其他開(kāi)發(fā)板根據(jù)實(shí)際情況進(jìn)行選擇。

4. 總結(jié)

通過(guò)ALSA框架與C#的結(jié)合,開(kāi)發(fā)者可以快速在Linux嵌入式設(shè)備上實(shí)現(xiàn)音頻功能。本文展示了基礎(chǔ)的錄音/播放實(shí)現(xiàn),實(shí)際項(xiàng)目中還需要考慮更多的優(yōu)化和使用方式,具體的可以前往 Alsa.Net 項(xiàng)目倉(cāng)庫(kù)查看更多的使用方法。需要注意的是,因?yàn)樵O(shè)備和系統(tǒng)的差異,以及項(xiàng)目更新的問(wèn)題,可能會(huì)出現(xiàn)一些部分接口不支持的情況,需要根據(jù)實(shí)際情況進(jìn)行調(diào)整。

以上就是在Linux開(kāi)發(fā)板中使用.NET實(shí)現(xiàn)音頻錄制與播放功能的詳細(xì)內(nèi)容,更多關(guān)于Linux .NET音頻錄制與播放的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • CentOs下手動(dòng)升級(jí)node版本的方法

    CentOs下手動(dòng)升級(jí)node版本的方法

    這篇文章主要介紹了CentOs下手動(dòng)升級(jí)node版本的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • rsync如何實(shí)現(xiàn)斷點(diǎn)續(xù)傳

    rsync如何實(shí)現(xiàn)斷點(diǎn)續(xù)傳

    rsync命令是一種高效的文件傳輸工具,相較于scp命令,它具有支持?jǐn)帱c(diǎn)續(xù)傳和僅拷貝修改過(guò)的文件等優(yōu)勢(shì),大大提高了文件傳輸?shù)男?特別適用于傳輸大文件和定期同步文件夾,通過(guò)參數(shù)配置,rsync能夠?qū)崿F(xiàn)多種高級(jí)功能
    2024-10-10
  • linux之防火墻firewall解讀

    linux之防火墻firewall解讀

    本文介紹了如何使用`firewall-cmd`命令管理防火墻,配置Docker0服務(wù)到受信任連接,并詳細(xì)解釋了防火墻區(qū)域選項(xiàng)、IP集選項(xiàng)、ICMP類(lèi)型選項(xiàng)、服務(wù)選項(xiàng)等
    2025-01-01
  • 如何設(shè)置linux centos7連接網(wǎng)絡(luò)

    如何設(shè)置linux centos7連接網(wǎng)絡(luò)

    這篇文章主要介紹了如何設(shè)置linux centos7連接網(wǎng)絡(luò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Centos中TCPWrappers訪(fǎng)問(wèn)控制實(shí)現(xiàn)

    Centos中TCPWrappers訪(fǎng)問(wèn)控制實(shí)現(xiàn)

    這篇文章主要介紹了Centos中TCPWrappers訪(fǎng)問(wèn)控制實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • linux中各種鎖機(jī)制的使用與區(qū)別詳解

    linux中各種鎖機(jī)制的使用與區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于linux中各種鎖機(jī)制的使用與區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Apache默認(rèn)是不支持SSI如何給Apache增加SSI支持

    Apache默認(rèn)是不支持SSI如何給Apache增加SSI支持

    SSI翻譯成中文就是服務(wù)器端包含的意思,從技術(shù)角度上說(shuō),SSI就是在HTML文件中,可以通過(guò)注釋行調(diào)用的命令或指針,下面給大家介紹下如何給Apache增加SSI支持
    2014-05-05
  • Linux修改pip臨時(shí)目錄方法的詳解

    Linux修改pip臨時(shí)目錄方法的詳解

    在Linux系統(tǒng)中,pip 在安裝 Python 包時(shí)會(huì)使用臨時(shí)目錄(TMPDIR),但默認(rèn)的臨時(shí)目錄可能會(huì)受到存儲(chǔ)空間不足或權(quán)限問(wèn)題的影響,所以本文將詳細(xì)介紹如何修改 pip 的臨時(shí)目錄,并提供相關(guān)的背景知識(shí)和實(shí)用建議,需要的朋友可以參考下
    2025-03-03
  • Linux 中如何切換相同程序的不同版本

    Linux 中如何切換相同程序的不同版本

    這篇文章主要介紹了 Linux 中如何切換相同程序的不同版本,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Linux使用shell腳本定時(shí)刪除歷史日志文件

    Linux使用shell腳本定時(shí)刪除歷史日志文件

    這篇文章主要介紹了Linux使用shell腳本定時(shí)刪除歷史日志文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論