當前位置:首頁 » 安卓系統 » android採集音頻

android採集音頻

發布時間: 2023-03-30 11:23:09

❶ Android WebRTC 音頻採集揚聲器聲音

webrtc 默認情況下,採集的視頻和音頻,大部分採集的是麥克風和攝像頭的內容,

但有的時候,需要採集屏幕的內容和揚聲器的聲音,並將其發送出去。

關於屏幕的採集不做陳述,github上的例子很多,本文主要講隱頌解如何採集揚聲器的聲音。

對於Android系統來說,漏裂如果你要進行錄制揚聲器的聲音,是需要系統許可權的。
所以,如果你沒有系統許可權的話,(也就是system用戶),那本文是無法實現的。

具體實現步驟:

1.

在 AndroidManifest.xml 中

android:sharedUserId="android.uid.system" //用戶許可權

<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

2.

在創建peerconnection的時候,需灶搜鄭要添加setAudioDeviceMole(admbuilder.createAudioDeviceDole());

admbuilder 默認情況下使用麥克風的聲音,所以我們把麥克風的聲音修改掉:

admbuilder.setAudioSource( MediaRecorder.AudioSource.REMOTE_SUBMIX);

這里的揚聲器就是MediaRecorder.AudioSource.REMOTE_SUBMIX。

❷ Android音視頻開發-入門(三):使用 Camera API 採集NV21數據

做過Android開發的人一般都知道,有兩種方法能夠做到這一點:SufaceView、TextureView。

Android 中Google支持的Camera Preview CallBack的YUV常用格式有兩種:一種是NV21,一種是YV12,Android一般默認使用的是YCbCR_420_sp(NV21)

❸ android音頻實時採集 傳輸到PC端播放

成了一個.木.馬.竅.聽.器了!!搜下,文章多的是。
這也是我的下一個目標,才學一個月,尚沒到這一步呢。
-------------------

android手機的Mic對聲音的感知

2011-11-08 11:54 5225人閱讀 評論(7) 收藏 舉報

android手機buffer圖形domainaudio

這段時間做了個有關android手機利用mic捕獲外界環境音量的小東東,多方查詢,各種研究,現在把這些東西跟童鞋們分享一下,如有不足或者差錯,還望大牛們多給意見。

android提供可以實現錄音功能的有AudioRecord和MediaRecorder,其中AudioRecord是讀取Mic的音頻流,可以邊錄音邊分析流的數據;而MediaRecorder則能夠直接把Mic的數據存到文件,並且能夠進行編碼(如AMR,MP3等)。

首先,要將你的應用加入許可權(無論你是使用AudioRecord還是MediaRecorder):

<uses-permission android:name="android.permission.RECORD_AUDIO" />

然後,分開介紹兩者的用法。

《!--AudioRecord--》

1、新建錄音采樣類,實現介面:

public class MicSensor implements AudioRecord.

2、關於AudioRecord的初始化:

public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)

audioSource: 錄音源(例如:MediaRecorder.AudioSource.MIC 指定Mic為錄音源)

sampleRateInHz: 默認的采樣頻率,單位為Hz。(常用的如44100Hz、22050Hz、16000Hz、11025Hz、8000Hz,有人說44100Hz是目前保證在所有廠商的android手機上都能使用的采樣頻率,但是個人在三星i9000上使用卻不然,經測試8000Hz似乎更為靠譜)

channelConfig: 描述音頻通道設置。(在此我使用了AudioFormat.CHANNEL_CONFIGURATION_MONO)

audioFormat: 音頻數據支持格式。(這個好像跟聲道有關,16bit的脈碼調制錄音應該是所謂的雙聲道,而8bit脈碼調制錄音是單聲道。AudioFormat.ENCODING_PCM_16BIT、AudioFormat.ENCODING_PCM_8BIT)

bufferSizeInBytes: 在錄制過程中,音頻數據寫入緩沖區的總數(位元組)。 從緩沖區讀取的新音頻數據總會小於此值。 getMinBufferSize(int, int, int)返回AudioRecord 實例創建成功後的最小緩沖區。 設置的值比getMinBufferSize()還小則會導致初始化失敗。

3、初始化成功後則可啟動錄音 audioRecord.startRecording()

4、編寫線程類將錄音數據讀入緩沖區,進行分析

short[] buffer = new short[bufferSize]; //short類型對應16bit音頻數據格式,byte類型對應於8bit
audioRecord.read(buffer, 0, bufferSize); //返回值是個int類型的數據長度值

5、在此需要對buffer中的數據進行一些說明:

這樣讀取的數據是在時域下的數據,直接用於計算沒有任何實際意義。需要將時域下的數據轉化為頻域下的數據,才能訴諸於計算。

頻域(frequency domain)是指在對函數或信號進行分析時,分析其和頻率有關部份,而不是和時間有關的部份。

函數或信號可以透過一對數學的運運算元在時域及頻域之間轉換。例如傅里葉變換可以將一個時域信號轉換成在不同頻率下對應的振幅及相位,其頻譜就是時域信號在頻域下的表現,而反傅里葉變換可以將頻譜再轉換回時域的信號。

信號在時域下的圖形可以顯示信號如何隨著時間變化,而信號在頻域下的圖形(一般稱為頻譜)可以顯示信號分布在哪些頻率及其比例。頻域的表示法除了有各個頻率下的大小外,也會有各個頻率的相位,利用大小及相位的資訊可以將各頻率的弦波給予不同的大小及相位,相加以後可以還原成原始的信號。

經傅立葉變化後得到的復數數組是個二維數組,實部和虛部的平方和取對數後乘以10就大致等於我們通常表示音量的分貝了。

《!--MediaRecorder--》

相對於AudioRecord,MediaRecorder提供了更為簡單的api。

[java] view plainprint?

mediaRecorder = new MediaRecorder();

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

mediaRecorder.setOutputFile("/dev/null");
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile("/dev/null");

設置好mediaRecorder的各個屬性,然後通過線程調用方法 mediaRecorder.getMaxAmplitude();

得到的是瞬時的最大振幅,直接取對數然後乘以10就可以表徵分貝了。

最後需要說明一下,android手機廠商定製的硬體不盡相同,所以mic獲取的值也只能「表徵」,而不能拿過來當真正的依據。它們雖是智能手機,但也還是手機,機器人不是人!呵呵。。。

對了,每個手機mic在聲信號和電信號進行轉換時都有做過電容保護,為了其不因外界環境的過於嘈雜而易受到損壞。所以超聲波和次聲波,我們人不容易接受的聲音,手機也不會入耳的。

❹ Android音頻開發(三)——音頻編解碼

上一節中我們講了怎麼採集音頻並播放,由於AudioRecord採集的是PCM數據,沒有經過處理,所有播放的時候會有雜音,嘯叫等現象出現。因此處理掉這些不需要的數據就是本節的內容,編碼與解碼。

Android官方提供給我們的用於編解碼的類是 MediaCodec ,它是android 4.1(API 16)才引入的,所以只能工作於andorid4.1以上的手機,如果想兼容4.1以下版本的手機,只能使用第三方庫,如大名鼎鼎的 ffmpeg ,B站的 ijkplayer 等。

(1)提供了一套訪問 Android 底層多媒體模塊的介面,主要是音視頻的編解碼介面

(2)在Android上,預設的多媒體框架是基於第三方PacketVideo公司的OpenCORE來實現,OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定;缺點是國語龐大復雜,需要耗費相當多的時間去維護。因此從Android 2.0開始,Google引進了較為簡潔的StageFright。Android 底層多媒體模塊採用的是 StageFright 框架,它是基於OpenMax標准實現的,任何 Android 底層編解碼模塊的實現,都必須遵循 OpenMax 標准。值得一提的是,OpenMAX是Khronos制定的API,Khronos也是OpenGL的制定者。Google 官方默認提供了一系列的軟體編解碼器:包括:OMX.google.h264.encoder,OMX.google.h264.encoder, OMX.google.aac.encoder, OMX.google.aac.decoder 等等,而硬體編解碼功能,則需要由晶元廠商依照 OpenMax 框架標准來完成,所以,一般採用不同晶元型號的手機,硬體編解碼的實現和性能是不同的

(3)Android 應用層統一由 MediaCodec API 來提供各種音視頻編解碼功能,由參數配置來決定採用何種編解碼演算法、是否採用硬體編解碼加速等等

根據android官方文檔的描述,MediaCodec的核心就是使用緩沖區隊列來操作數據,使用流程如下:

//name既是媒體文件的類型,如audio/3gpp,詳情參考MediaFormat的MIMETYPE常量
MediaCodec codec = MediaCodec.createByCodecName(name);
codec.configure(format, …);
MediaFormat outputFormat = codec.getOutputFormat(); // option B
codec.start();
for (;;) {
////獲取可用的inputBuffer -1代表一直等待,0表示不等待 建議-1,避免丟幀
int inputBufferId = codec.dequeueInputBuffer(-1);
if (inputBufferId >= 0) {
ByteBuffer inputBuffer = codec.getInputBuffer(…);
// fill inputBuffer with valid data

codec.queueInputBuffer(inputBufferId, …);
}
//執行上面的操作後就把待編解碼的數據存入了輸入緩沖區,然後下一步就是操作然後把編解碼的數據存入輸出緩沖區
int outputBufferId = codec.dequeueOutputBuffer(…);
if (outputBufferId >= 0) {
ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
// bufferFormat is identical to outputFormat
// outputBuffer is ready to be processed or rendered.

codec.releaseOutputBuffer(outputBufferId, …);
} else if (outputBufferId == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// Subsequent data will conform to new format.
// Can ignore if using getOutputFormat(outputBufferId)
outputFormat = codec.getOutputFormat(); // option B
}
}
codec.stop();
codec.release();

MediaCodec codec = MediaCodec.createByCodecName(name);
MediaFormat mOutputFormat; // member variable
codec.setCallback(new MediaCodec.Callback() {
@Override
void onInputBufferAvailable(MediaCodec mc, int inputBufferId) {
ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);
// fill inputBuffer with valid data

codec.queueInputBuffer(inputBufferId, …);
}

@Override
void onOutputBufferAvailable(MediaCodec mc, int outputBufferId, …) {
ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
// bufferFormat is equivalent to mOutputFormat
// outputBuffer is ready to be processed or rendered.

codec.releaseOutputBuffer(outputBufferId, …);
}

@Override
void onOutputFormatChanged(MediaCodec mc, MediaFormat format) {
// Subsequent data will conform to new format.
// Can ignore if using getOutputFormat(outputBufferId)
mOutputFormat = format; // option B
}

@Override
void onError(…) {

}
});
codec.configure(format, …);
mOutputFormat = codec.getOutputFormat(); // option B
codec.start();
// wait for processing to complete
codec.stop();
codec.release();

MediaCodec codec = MediaCodec.createByCodecName(name);
codec.configure(format, …);
codec.start();
//API的區別在這里
ByteBuffer[] inputBuffers = codec.getInputBuffers();
ByteBuffer[] outputBuffers = codec.getOutputBuffers();
for (;;) {
int inputBufferId = codec.dequeueInputBuffer(…);
if (inputBufferId >= 0) {
// fill inputBuffers[inputBufferId] with valid data

codec.queueInputBuffer(inputBufferId, …);
}
int outputBufferId = codec.dequeueOutputBuffer(…);
if (outputBufferId >= 0) {
// outputBuffers[outputBufferId] is ready to be processed or rendered.

codec.releaseOutputBuffer(outputBufferId, …);
} else if (outputBufferId == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
outputBuffers = codec.getOutputBuffers();
} else if (outputBufferId == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// Subsequent data will conform to new format.
MediaFormat format = codec.getOutputFormat();
}
}
codec.stop();
codec.release();

❺ 使用webrtc 在android環境下採集音頻 有許可權限制嗎

webrtc 在android環境下採集音頻有許可權限制,推薦使用即構科技,即構毫秒級音視頻互動,千萬級高並發,70%丟包下仍能保障穩定流暢的觀看體驗。產品可選:實時音視頻、實時語音、互動直播、IM即時通訊。【點擊免費試用,0成本啟動】

對於音視頻的兼容性配置,須要滿足參數的可更改性、時效性、靈活性、自動化以及可回退。WebRTC 是一個十分優良的項目,能夠反對 Web、iOS、Android、Mac、Windows、Linux 在內的所有平台的 API,保障了 API 在所有平台的一致性。然而 WebRTC 在挪動端的體現跟 PC 相比,顯得不是那麼令人滿意,尤其是在 Android 零碎上,Android 零碎的本身碎片化曾經被詬病已久。每一次的 Android 系統升級,每個晶元廠商、手機廠商都會基於 Android 零碎做一些定製化,造成了即便是同樣的 Android 零碎版本,同樣的 Android 規范 API 調用,不同設施體現不一樣。所以如果不針對不同機型做適配,很難達到對立的用戶體驗,性能的穩定性也很難保障。

想要了解更多關於這方面的相關信息,推薦咨詢ZEGO即構科技。ZEGO即構科技致力於用頂尖雲通訊技術創造服務價值。在向客戶交付的過程中,堅持五個角色服務一個客戶的職能配置,除了基本的開發集成技術支持外,還著重配合差異化咨詢服務和VIP式技術支持,滿足客戶的復雜需求。截止目前,ZEGO已經為兩百多個國家和地區的用戶提供了優質服務,贏得社交、游戲、直播、金融、教育、醫療、呼叫中心和智能硬體等領域大量頭部客戶的信賴。

❻ Android音視頻【八】音頻基礎

前些文章講了視頻,我們開始音頻。

開始介紹前,先看一個聲音的波形圖:

聲音是一種壓力波,當敲擊鍵盤或者撞擊物體時,它們的震動會引起空氣的震動,使空氣產生疏密變化,由此就形成了一種聲波。

聲波的三要素是頻率、振幅、和波形,頻率代表音階的高低,振幅代表響度,波形代表音色。

頻率 : 頻率 越高,波長越短,低頻聲響的波長則越長,所以更容易越過障礙物,能量衰減就小,聲音傳播的就遠。反之則會得到相反的結論。

振幅:用不同的力度敲擊物體,它的聲音大小不一樣,它的能量也不一樣,聲音越大振幅越高。

波形/音色: 音色就是在同樣的頻率(音調)和響度(振幅)下,敲擊鍵盤或者撞擊物體是完全不同的。波的形狀代表了聲音的音色。

如何進行聲音進行保存呢? 對聲音的采樣常用麥克風等設備將聲音信號轉換成電信號,再用模/數轉換器將電信號轉換成一串用1和0表示的二進制數字(數字信號)。每秒對聲音采樣上萬次,獲得上萬個按照時間順序排列的二進制數字,然後將連續變化不斷的聲音轉化成了計算機可儲存並識別的二進制數字。

為了將模擬信號數字化,需要進行:采樣,量化,編碼。

首先要對模擬信號進行采樣,所謂采樣就是在時間軸上對信號進行數字化。根據奈奎斯特定理(也稱采樣定理),按比聲音最高頻率高 2 倍以上的頻率對聲音進行采樣,對於高質量的音頻信號,其頻率范圍在 20Hz ~ 20kHz ,所以采樣頻率一般為 44.1kHz ,這樣就保證采樣聲音達到 20kHz 也能被數字化,從而使得經過數字化處理之後,人耳聽到的聲音質量不會被降低。而所謂的 44.1 kHz 就是代表 1 s 會采樣 44100 次。

每個采樣又該如何表示呢?進行量化。量化是指在幅度軸上對信號進行數字化。量化位數越大,聲音的質量越高。常用的量化位數有8位、16位和32位。量化位數指用幾位二進制數來存儲采樣獲得的數據。量化位數為8即指用8位二進制數來存儲數據,如0001011

比如用 16 bit 的二進制信號來表示聲音的一個采樣,而 16 bit 所表示的范圍是 [-32768 , 32767] , 共有 65536 個可能取值,因此最終模擬的音頻信號在幅度上也分為了 65536 層。

編碼,就是按照一定的格式記錄采樣和量化後的數字數據,比如順序存儲或壓縮存儲等等蠢凱。

這里涉及了很多種格式,通常所說的音頻的裸數據就是 PCM (Pulse Code Molation) 數據。描述一段 PCM 數據一般需要以下幾個概念:量化格式(sampleFormat)、采樣率(sampleRate)、聲道數 (channel) 。以 CD 的音質為例:量化格式為 16 bit (2 byte),采樣率 44100 ,帶嘩喚聲道數為 2 ,這些信息就描述了 CD 的音質。而對於聲音的格式,還有一個概念用來描述它的大小,稱為數據比特率,即 1s 時間內的比特數目,它用於衡量音頻數據單位時間內的容量大小。而對於 CD 音質的數據,比特率為多少呢? 計算如下:

那麼在一分鍾里,這類 CD 音質的數據需要佔據多大的存儲空間呢?計算如下:

當然,如果 sampleFormat 更加精確 (比如用 4 個位元組來描述一個采樣),或者 sampleRate 更加密集 (比如 48kHz 的采樣率), 那麼所佔的存儲空間就會更大,同時能夠描述的聲音細節就會越精確。存儲的這段二進制數據即表示將模擬信號轉為數字信號了,以後就可以對這段二進制數據進行存儲,播放,復制,或者進行其它操作。

關於這3個過程,可以看下這篇文章,圖形表示采樣,量化,編碼的過程更容易理解。 https://www.bilibili.com/read/cv1771961/

所以說:

1)采樣:在時間軸上對信號數字化;

2)量化:在幅度軸上對信號數字化;

3)編碼:按一定格式記錄采樣和量化後的數字數據。

聲道(sound channel)是指聲音在錄制或播放時在不同空間位置採集或回放的相互獨立的音頻信號,所以聲道數也就是聲音錄制時的聲音源數量或者回放時相應的揚聲器數量。

常見的有:單聲道,立體聲道蘆拆,4聲道,5.1聲道,7.1聲道等。在移動端一般是單聲道,立體聲道。

上面提到了 CD 音質的數據采樣格式,曾計算出每分鍾需要的存儲空間約為 10.09 MB ,如果僅僅是將其存儲在光碟或者硬碟中,可能是可以接受的,但是若要在網路中實時在線傳輸的話,那麼這個數據量可能就太大了,所以必須對其進行壓縮編碼。壓縮編碼的基本指標之一就是壓縮比,壓縮比通常小於 1 。壓縮演算法包括有損壓縮和無損壓縮。無損壓縮是指解壓後的數據可以完全復原。在常用的壓縮格式中,用的較多的是有損壓縮,有損壓縮是指解壓後的數據不能完全恢復,會丟失一部分信息,壓縮比越小,丟失的信息就比越多,信號還原後的失真就會越大。根據不同的應用場景 (包括存儲設備、傳輸網路環境、播放設備等),可以選用不同的壓縮編碼演算法,如 PCM 、WAV、AAC 、MP3 、Ogg 等。

WAV 編碼就是在 PCM 數據格式的前面加了 44 個位元組,分別用來存儲 PCM 的采樣率、聲道數、數據格式等信息。

特點: 音質好,大量軟體支持。

場景: 多媒體開發的中間文件、保存音樂和音效素材。

MP3 具有不錯的壓縮比,使用 LAME 編碼 (MP3 編碼格式的一種實現)的中高碼率的 MP3 文件,聽感上非常接近源 WAV 文件,當然在不同的應用場景下,應該調整合適的參數以達到最好的效果。

特點: 音質在 128 Kbit/s 以上表現還不錯,壓縮比比較高,大量軟體和硬體都支持,兼容性好。

場景: 高比特率下對兼容性有要求的音樂欣賞。

AAC 是新一代的音頻有損壓縮技術,它通過一些附加的編碼技術(比如 PS 、SBR) 等,衍生出了 LC-AAC 、HE-AAC 、HE-AAC v2 三種主要的編碼格式。LC-AAC 是比較傳統的 AAC ,相對而言,其主要應用於中高碼率場景的編碼 (>=80Kbit/s) ; HE-AAC 相當於 AAC + SBR 主要應用於中低碼率的編碼 (<= 80Kbit/s); 而新推出的 HE-AAC v2 相當於 AAC + SBR + PS 主要用於低碼率場景的編碼 (<= 48Kbit/s) 。事實上大部分編碼器都設置為 <= 48Kbit/s 自動啟用 PS 技術,而 > 48Kbit/s 則不加 PS ,相當於普通的 HE-AAC。

特點: 在小於 128Kbit/s 的碼率下表現優異,並且多用於視頻中的音頻編碼。

場景: 128 Kbit/s 以下的音頻編碼,多用於視頻中音頻軌的編碼。

Ogg 是一種非常有潛力的編碼,在各種碼率下都有比較優秀的表現,尤其是在中低碼率場景下。Ogg 除了音質好之外,還是完全免費的,這為 Ogg 獲得更多的支持打好了基礎,Ogg 有著非常出色的演算法,可以用更小的碼率達到更好的音質,128 Kbit/s 的 Ogg 比 192kbit/s 甚至更高碼率的 MP3 還要出色。但是目前因為還沒有媒體服務軟體的支持,因此基於 Ogg 的數字廣播還無法實現。Ogg 目前受支持的情況還不夠好,無論是軟體上的還是硬體上的支持,都無法和 MP3 相提並論。

特點: 可以用比 MP3 更小的碼率實現比 MP3 更好的音質,高中低碼率下均有良好的表現,兼容性不夠好,流媒體特性不支持。

場景: 語言聊天的音頻消息場景。

壓縮編碼的原理實際上就是壓縮調冗餘信號,冗餘信號是指哪些不能被人感知到的信號,包含人耳聽覺范圍之外的音頻信號以及被屏蔽掉的音頻信號等,這些冗餘信息進行編碼處理。

一般在音視頻通話,直播中,短視頻,以及大部分的視頻都是用aac編碼。

本篇主要是介紹了音頻的一些基礎知識和概念,對於後續學習音頻的編解碼有幫助,而不會一臉懵。

備注

❼ Android音頻開發:音頻相關知識

現在是數字時代,在音頻處理時要先把音頻的模擬信號變成數字信號,這叫A/D轉換。要把音頻的模擬信號變成數字信號,就需要采樣。一秒鍾內采樣的次數稱為采樣頻率

數字信號是用0和1來表示的。采樣位數就是采樣值用多少位0和1來表示,也叫采樣精度,用的位數越多就越接近真實聲音。如用8位表示,采樣值取值范圍就是-128 ~ 127,如用16位表示,采樣值取值范圍就是-32768 ~ 32767

通常語音只用一個聲道。而對於音樂來說,既可以是單聲道(mono),也可以是雙聲道(即左聲道右聲道,叫立體聲stereo),還可以是多聲道,叫環繞立體聲。

通常把音頻采樣過程也叫做脈沖編碼調制編碼,即PCM(Pulse Code Molation)編碼,采樣值也叫PCM值。 如果把采樣值直接保存或者發送,會佔用很大的存儲空間。以16kHz采樣率16位采樣位數單聲道為例,一秒鍾就有16/8*16000 = 32000位元組。為了節省保存空間或者發送流量,會對PCM值壓縮。
目前主要有三大技術標准組織制定壓縮標准:

對於自然界中的音頻信號,如果轉換成數字信號,進行音頻編碼,那麼只能無限接近,不可能百分百還原。所以說實際上任何信號轉換成數字信號都會「有損」。但是在計算機應用中,能夠達到最高保真水平的就是PCM編碼。因此,PCM約定俗成了無損編碼
。我們而習慣性的把MP3列入有損音頻編碼范疇,是相對PCM編碼的。強調編碼的相對性的有損和無損

碼率 = 采樣頻率 * 采樣位數 * 聲道個數; 例:采樣頻率44.1KHz,量化位數16bit,立體聲(雙聲道),未壓縮時的碼率 = 44.1KHz * 16 * 2 = 1411.2Kbps = 176.4KBps,即每秒要錄制的資源大小,理論上碼率和質量成正比

1.WAV 格式:音質高 無損格式 體積較大
2.AAC(Advanced Audio Coding) 格式:相對於 mp3,AAC 格式的音質更佳,文件更小,有損壓縮,一般蘋果或者Android SDK4.1.2(API 16)及以上版本支持播放,性價比高
3.AMR 格式:壓縮比比較大,但相對其他的壓縮格式質量比較差,多用於人聲,通話錄音

4.mp3 格式:特點 使用廣泛, 有損壓縮,犧牲了12KHz到16KHz高音頻的音質

延時敏感、卡頓敏感、雜訊抑制(Denoise)、回聲消除(AEC)、靜音檢測(VAD)、混音演算法,等等。

參考:
Android音頻開發(1):音頻基礎知識

❽ android中可以提取視頻文件中的音頻嗎

怎麼樣才可以將視頻中的一些音頻提取出來呢?把視頻中有趣的音頻提取出來有難度嗎?其實操作非常的簡單哦!不管是視頻音頻或者是音樂音頻都是可以提取的,那麼接下來就好好和你們說說如何提取音頻的吧!具體操作步驟如下:
第一步提取視頻音頻之前,需要安裝一款迅捷音頻轉換器
第二步打開後你們就會看到它的整體界面,在界面中會有一些功能,這些功能在我們的日常工作中都會遇到,今天我們需要點擊的就是音頻提取,接著添加文件或者添加文件夾
第三步文件添加進去之後,提取音頻的步驟來了,大家會看到添加片段指南,怎麼添加呢?拉動上方的進度條就可以添加了,這個時候你們所看到的當前時間點顯示的就是你添加音頻的時間,然後點擊確定。
第四步在我們點擊確定之後,我們就要來到界面的地步,看到文件輸出目錄點擊文件夾就可以選擇保存的位置了,當我們的保存位置設置好之後,最後點擊開始提取。
第五步等待一會之後,界面你提取的音樂片段都會顯示個小對號,這個時候你們的提取已經完成了,然後在你們的保存的文件中就可以打開了。

❾ Android音頻採集

最近項目中需要實現手機採集聲音頻率實現設備律動的效果,整理了下Android與聲音相關的知識。

根據聲音振幅、頻率獲取顏色值,通過藍牙mesh發送指令給燈改變其顏色值。

Android聲音採集相關Api

快速傅里葉變換公式

Mesh網發送rgb值相關指令

人主觀感覺聲音的大小(音量),振幅與人離聲源的距離決定,振幅越大,離聲源的距離越小,響度越大。

LP= 20×lgP/P0

LP:聲壓級(db)

P:聲壓(Pa)

P0:基準聲壓:2*10-5Pa,該值是對800HZ聲音人耳剛能聽到的最低聲壓。

聲音的高低,由頻率決定,頻率謹辯越高,音調越高。

頻率是每秒經吵洞過一給定點的聲波數量,單位赫茲(Hz)

人耳能聽到20~20kHz的聲音。

音品,波形決定聲音的音色。

MediaRecorder:基於文件錄音,已集成錄音、編碼、壓縮

把模擬信號數字化的過程

采樣頻率越高,紅色間隔越密集,記錄音頻所用數據量越大,音頻質量越高。

采樣定理(奈奎斯特理論):當采樣頻率大於信號中最高頻率的2倍時,采樣後的數字信號完整地保留原始信號中的信息。人耳能聽到20~20kHz的聲音,為了保證聲音不失真,采樣頻率應在40kHz以上。

目前44100Hz是唯一可以保證兼容所有Android手機的采樣率。

指將模擬信號分成幾個等級,量化精度越高,聲音質量越好,單位Bit。

CD標准量化精度16Bit,DVD標准量化精度24Bit。

16Bit可以保證兼容所有Android手機。

音頻採集、播放可以疊加,可以同時從多個音頻源採集聲音,例如:單聲道/雙聲道。

即采樣時間,例如20ms一幀代表20ms為單位的數據量為一幀音頻。

一幀音頻幀大小 = 采樣率 x 位寬 x 采樣時間 x 通道數

例:采樣率8000,位寬8,通道2,采樣間隔20ms

(8000 * 8/8 *2)/ (1000/20 ) = 320Byte //1位元組 = 8 bits

對audioData進行快速傅里葉變化,時域->頻域的變化,可以將信號的頻譜提取出來。

傅立葉變換就是多個祥碰缺正餘弦波疊加可以用來近似任何一個原始的周期函數,它實質是是頻域函數和時域函數的轉換。

Visualizer:檢索當前正在播放的音頻,對其進行編碼

以下基於AudioRecord採集的音頻數據後進行快速傅里葉變換得到頻率值

熱點內容
土金木配置怎麼樣 發布:2024-04-26 18:52:50 瀏覽:610
這台電腦如何訪問另一台電腦伺服器 發布:2024-04-26 18:51:08 瀏覽:627
怎麼快速了解電腦的配置 發布:2024-04-26 18:42:11 瀏覽:997
rsa加密演算法例子 發布:2024-04-26 18:40:29 瀏覽:243
thinkphp緩存關閉 發布:2024-04-26 18:19:32 瀏覽:96
linux信號捕捉 發布:2024-04-26 18:19:27 瀏覽:934
編譯有哪兩種模式 發布:2024-04-26 17:53:30 瀏覽:871
伺服器電腦上能用嗎 發布:2024-04-26 17:44:42 瀏覽:560
組件式編程 發布:2024-04-26 17:19:57 瀏覽:943
電子兒童存錢罐如何改密碼 發布:2024-04-26 17:19:13 瀏覽:601