android振幅
⑴ android錄音 振幅是多少
有這樣的一個例子,測試測試看?希望可以幫到你。 import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.util.Log; public class RecordThread extends Thread { private AudioRecord ar; private int bs; private static int SAMPLE_RATE_IN_HZ = 8000; private boolean isRun = false; public RecordThread() { super(); bs = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); ar = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bs); } public void run() { super.run(); ar.startRecording(); // 用於讀取的 buffer byte[] buffer = new byte[bs]; isRun = true; while (isRun) { int r = ar.read(buffer, 0, bs); int v = 0; // 將 buffer 內容取出,進行平方和運算 for (int i = 0; i < buffer.length; i++) { // 這里沒有做運算的優化,為了更加清晰的展示代碼 v += buffer[i] * buffer[i]; } // 平方和除以數據總長度,得到音量大小。可以獲取白雜訊值,然後對實際采樣進行標准化。 // 如果想利用這個數值進行操作,建議用 sendMessage 將其拋出,在 Handler 里進行處理。 Log.d("spl", String.valueOf(v / (float) r)); } ar.stop(); } public void pause() { // 在調用本線程的 Activity 的 onPause 里調用,以便 Activity 暫停時釋放麥克風 isRun = false; } public void start() { // 在調用本線程的 Activity 的 onResume 里調用,以便 Activity 恢復後繼續獲取麥克風輸入音量 if (!isRun) { super.start(); } } }
⑵ 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音頻採集
最近項目中需要實現手機採集聲音頻率實現設備律動的效果,整理了下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採集的音頻數據後進行快速傅里葉變換得到頻率值
⑷ adb shell am和pm的區別
AM,表示上午;PM,表示下午。 AM(拉丁ante meridiem的縮寫)指的是從零晨到上午時段,PM(拉丁ante meridiem)意為「中午之前」。是指下午13到0點之間。
⑸ Android如何判斷一個人是在開車還是走路
手機上很多感測器都可以作為移動的參考。
陀螺儀+ 重力儀(也有叫六軸感測器)
gps 或者 agps
磁場儀到時很少用,不過也有他的道理,只是不穩定因素比較多。(很少用)
現在市面判斷是不是開車的多數是GPS + AGPS
判斷是否跑步的是 六軸感測器 + AGPS + GPS
具體做法也是計算移動速度和運動振幅。