聲音的本質是一種能量波,由振動而產生的能量波,通過傳輸介質傳輸出去。聲音有三個屬性:
波長是決定音調高低;振幅是決定音量高低;波紋是決定音色。
pcm(pulse code modulation,脈衝編碼調製)音訊資料是未經壓縮的音訊取樣資料裸流,它是由模擬訊號經過取樣、量化、編碼轉換成的標準數字音訊資料。
描述pcm資料主要有以下6個引數:
sample rate : 取樣頻率。8khz(**)、44.1khz(cd)、48khz(***)。
sample size : 量化位數,描述數碼訊號所使用的位數。8位(8bit)代表2的8次方=256,16 位(16bit)則代表2的16次方=65536;取樣位數越高,精度越高。
number of channels : 通道個數。常見的音訊有立體聲(stereo)和單聲道(mono)兩種型別,立體聲包含左聲道和右聲道。另外還有環繞立體聲等其它不太常用的型別。
sign : 表示樣本資料是否是有符號位,比如用一位元組表示的樣本資料,有符號的話表示範圍為-128 ~ 127,無符號是0 ~ 255。
byte ordering : 位元組序。位元組序是little-endian還是big-endian。通常均為little-endian。
integer or floating point : 整形或浮點型。大多數格式的pcm樣本資料使用整形表示,而在一些對精度要求高的應用方面,使用浮點型別表示pcm樣本資料。
對於16位,單聲道
的音訊,取樣點幅值為2^15-1
和-2^15
,即32767
和-32768
,當乘以放大倍數後,需要對超出此範圍的資料進行溢位處理,但是如果乙個音訊幀中溢位資料過多,就會造成音訊失真,故要合理的動態的選擇放大倍數。
下面是兩種對16位,單聲道
的音訊調節音量演算法
/*
*samples 音訊資料
*numsamples 音訊資料長度
*factor 振幅的係數 比如1.2
*/static int adjustmentvolume(short *samples,int numsamples,float factor)
else if(1.0 == factor)
for (int i = 0; i32767)
samples[i] = tmpvalue;
}return numsamples;
}
/*
*samples 音訊資料
*numsamples 音訊資料長度
*factor 振幅的係數 比如1.2
*/int adjustmentvolume(short *samples ,int numsamples, int factor)
//根據獲取到的最大值和最小值分別計算出在不失真的情況下,允許的放大倍數`maxfactor`和`minfactor`
short maxfactor = maxdata != 0 ? maxd/maxdata : 1;
short minfactor = mindata != 0 ? mind/mindata : 1;
//取其最小值為允許的放大倍數`allowfactor`
short allowfactor = maxfactor > minfactor ? minfactor : maxfactor;
//選擇合適的振幅的係數
factor = factor > allowfactor ? allowfactor : factor;
if (factor == 1)
else if(0 == factor)
//對pcm資料放大
long newdata = 0;
for (int i = 0; i < numsamples; i++) else if (newdata > maxd)
data = newdata&0xffff;
samples[i] = data;
}return numsamples;
}
C 調節PCM音量
在用 解碼器 具體的實現函式如下 void raisevolume char buf,uint32 size,uint32 urepeat,double vol buf為需要調節音量的音訊資料塊首位址指標,size為長度,urepeat為重複次數,通常設為1,vol為增益倍數,可以小於1 for i...
菜鳥修煉筆記 alsa 調節音訊音量大小
二。方法二 在linux終端直接設定alsa的引數。但實際上,我只成功使用了第二種方法,下面將簡單介紹一下第一種方法的原理,和我的嘗試,然後將重點放在第二種方法的介紹上。由於我沒有成功通過這個方法來放大音量,所以不詳細介紹具體的過程。下面主要是簡單介紹一下這個方法的原理和我做過的相關嘗試。具體的過程...
音量調節流程
在分析 android音訊系統時,習慣將其實現分為兩個部分 資料流和策略。資料流描述了音訊資料從資料來源流向目的地的過程。而策略則是管理及控制資料流的路徑與呈現的過程.audiotrack audiorecord 和audioflinger 可以被劃歸到資料流的範疇去討論。而 audiopolicy...