『壹』 語音編解碼的ADPCM(自適應差分PCM)
類型:Audio
制定者:ITU-T
所需頻寬:32Kbps
特性:ADPCM(adaptive difference pulse code molation)綜合了APCM的自適應特性和DPCM系統的差分特性,是一種性能比較好的波形編碼。它的核心想法是:
①利用自適應的思想改變數化階的大小,即使用小的量化階(step-size)去編碼小的差值,使用大的量化階去編碼大的差值;
②使用過去的樣本值估算下一個輸入樣本的預測值,使實際樣本值和預測值之間的差值總是最小。
缺點:聲音質量一般
應用領域:voip
版稅方式:Free
備註:ADPCM (ADPCM Adaptive Differential Pulse Code Molation), 是一種針對16bit (或者更高?) 聲音波形數據的一種有損壓縮演算法, 它將聲音流中每次采樣的 16bit 數據以 4bit 存儲, 所以壓縮比1:4. 而壓縮/解壓縮演算法非常的簡單, 所以是一種低空間消耗,高質量聲音獲得的好途徑。LPC(Linear Predictive Coding,線性預測編碼)類型:Audio
制定者:
所需頻寬:2Kbps-4.8Kbps
特性:壓縮比大,計算量大,音質不高,廉價
優點:壓縮比大,廉價
缺點:計算量大,語音質量不是很好,自然度較低
應用領域:voip
版稅方式:Free
備註:參數編碼又稱為聲源編碼,是將信源信號在頻率域或其它正交變換域提取特徵參數,並將其變換成數字代碼進行傳輸。解碼為其反過程,將收到的數字序列經變換恢復特徵參量,再根據特徵參量重建語音信號。具體說,參數編碼是通過對語音信號特徵參數的提取和編碼,力圖使重建語音信號具有盡可能高的准確性,但重建信號的波形同原語音信號的波形可能會有相當大的差別。如:線性預測編碼(LPC)及其它各種改進型都屬於參數編碼。該編碼比特率可壓縮到2Kbit/s-4.8Kbit/s,甚至更低,但語音質量只能達到中等,特別是自然度較低。CELP(Code Excited Linear Prediction,碼激勵線性預測編碼)類型:Audio
制定者:歐洲通信標准協會(ETSI)
所需頻寬:4~16Kbps的速率
特性:改善語音的質量:
① 對誤差信號進行感覺加權,利用人類聽覺的掩蔽特性來提高語音的主觀質量;
②用分數延遲改進基音預測,使濁音的表達更為准確,尤其改善了女性語音的質量;
③ 使用修正的MSPE准則來尋找 「最佳」的延遲,使得基音周期延遲的外形更為平滑;
④根據長時預測的效率,調整隨機激勵矢量的大小,提高語音的主觀質量; ⑤ 使用基於信道錯誤率估計的自適應平滑器,在信道誤碼率較高的情況下也能合成自然度較高的語音。
結論:
① CELP演算法在低速率編碼環境下可以得到令人滿意的壓縮效果;
②使用快速演算法,可以有效地降低CELP演算法的復雜度,使它完全可以實時地實現;
③CELP可以成功地對各種不同類型的語音信號進行編碼,這種適應性對於真實環境,尤其是背景雜訊存在時更為重要。
優點:用很低的帶寬提供了較清晰的語音
缺點:
應用領域:voip
版稅方式:Free
備註:1999年歐洲通信標准協會(ETSI)推出了基於碼激勵線性預測編碼(CELP)的第三代移動通信語音編碼標准自適應多速率語音編碼器(AMR),其中最低速率為4.75kb/s,達到通信質量。CELP 碼激勵線性預測編碼是Code Excited LinearPrediction的縮寫。CELP是近10年來最成功的語音編碼演算法。
CELP語音編碼演算法用線性預測提取聲道參數,用一個包含許多典型的激勵矢量的碼本作為激勵參數,每次編碼時都在這個碼本中搜索一個最佳的激勵矢量,這個激勵矢量的編碼值就是這個序列的碼本中的序號。
CELP已經被許多語音編碼標准所採用,美國聯邦標准FS1016就是採用CELP的編碼方法,主要用於高質量的窄帶語音保密通信。CELP(Code-Excited Linear Prediction) 這是一個簡化的 LPC 演算法,以其低比特率著稱(4800-9600Kbps),具有很清晰的語音品質和很高的背景噪音免疫性。CELP是一種在中低速率上廣泛使用的語音壓縮編碼方案。
『貳』 android音視頻系列(七):PCM音頻單聲道與雙聲道的相互轉換
上一篇我們已經學習了PCM音頻的保存格式,這一篇我們通過掌握的知識,完成PCM音頻的單聲道和雙聲道的互相轉換。
首先我們把上一篇的最核心部分貼出來:
我們首先完成單聲道轉雙聲道的操作。
單聲道轉雙聲道的基本原理:
首先我錄制了一個音頻保存到ArrayList中:
錄制的是16位的數據,所以我們每一個采樣的數據會占據兩位,所以在拷貝的過程橋慶中,我們也要每兩位拷貝一次敏慶握:
單聲道轉聲道的操作就完成了。
雙聲道轉單聲道的原理:
我們可以按照單聲道雙聲道的做法,每四位取前兩位或後兩位的數據即可。但是這里我們換一種做法。
這里我們使用了ByteBuffer幫助我們把Byte轉成Short。其中有一個很重要的坑,就是設置Byte轉Short的規則:
所以我們一定要確保高低位的順序,否則得到的Short一定是錯的,經過測試,錄制的音頻是低位在前,所以我們修改ByteBuffer默認的高位在前的配置:
相同的原理,我們需要Byte轉Int都可以藉助對應的Buffer進行讀取,非常的方便。
基本流程和第一種方法一樣,如果是你用的java,你還可以通過位運算進行Short和Byte的轉換,但是kotlin的對應的運算符卻無法正確轉換,具體原因還不清楚,這也是為什差梁么我使用了Buffer進行轉換的原因。
只要我們掌握了PCM的保存格式,單聲道和雙聲道的互相轉換還是非常輕松的,下一篇我們來了解一下新的音頻格式:WAV。
『叄』 Android音視頻系列(六):PCM音頻的存儲格式
我們已經了解了如何使用AudioRecord錄制pcm音頻,所以我們要了解pcm數據的存儲格式,才能對其進行鏈者轉換。
首先看一下圖片:
以上圖為例,在初始化AudioRecord的時候可以設置錄制的格式:
其中最常用的是ENCODING_PCM_16BIT,在網上查看一下很多的資料,ENCODING_PCM_8BIT已經處於半廢棄狀態,隨著科技的櫻豎進步,就連小孩子的玩具播放的音頻都是16位的。
另外一個參數是聲道數:
雙聲道會以LRLRLR的格式保存左右聲道的內容,組合成一個完成的樣本。
從上圖我們可以總結:8個比特的位置,8位單聲道可以存儲8個樣本,8位雙聲道能存儲個樣本,16位雙聲道能存儲4個,16位雙聲道只能存儲2個。
今天的內容非常的簡單,主要是為了下一篇做准備,下一篇我們會實際操作:pcm單聲道和雙聲道的轉換。脊喚大
『肆』 Android 多媒體音頻開發中怎麼將PCM轉成ADPCM
Adensoft Audio MP3 Converter
Adensoft.Audio.MP3.Converter是一款強大的音頻轉換工具,能將當前主流的音頻格式如WAV PCM, WAV ,GSM, ADPCM, DSP ,MP2,WMA ( win Media Audio ),Ogg Vorbis,VOX ( Dialogic ADPCM ),RAW ( PCM, A-LAW, U-LAW ),MPC (MusicPack),AVI (audio track),G.721,G.723,G.726,AIFF ,AU (UNIX audio format)無損的轉換成mp3(支持批量轉換)。軟體同時提供良好的人機界面和完整的tag編輯功能。
『伍』 android開發中怎樣實現混音
android開發中怎樣實現混音,實例代碼如下:
[mw_shl_code=java,true]public class MixRunnable implements Runnable {
private MixRecorder context;
/**
* AudioRecord創建參數類
*
* @author christ
*/
private static class RecorderParameter {
// 音頻獲取源
private static int audioSource = MediaRecorder.AudioSource.MIC;
// 設置音頻采樣率,44100是目前的標准,但是某些設備仍然支持22050,16000,11025
private static final int sampleRateInHz = 44100;
// 設置音頻的錄制的聲道CHANNEL_IN_STEREO為雙聲道,CHANNEL_CONFIGURATION_MONO為單聲道
private static final int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
// 音頻數據格式:PCM 16位每個樣本。保證設備支持。PCM 8位每個樣本。不一定能得到設備支持。
private static final int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
// 緩沖區位元組大小
private static int bufferSizeInBytes;
}
// 設置運行狀態
private boolean isRunning = true;
// AudioRecord對象
private static AudioRecord recorder;
// 設置MediaPlayer對象
private static MediaPlayer mediaPlayer;
// 伴奏文件
private FileInputStream accompany;
// 原唱文件
private FileInputStream original;
// 得分
private int score;
private boolean isFirst = true;
/**
* 混音評分線程的構造方法
*
* @param accompany
* :伴奏文件路徑
* @param original
* :原唱文件路徑
* @throws FileNotFoundException
*/
public MixRunnable(MixRecorder context, String accompany, String original) throws FileNotFoundException {
this.context = context;
this.accompany = new FileInputStream(accompany);
this.original = new FileInputStream(original);
creatAudioRecord();
mediaPlayer = new MediaPlayer();
}
@Override
public void run() {
try {
// MediaPlayer准備
mediaPlayer.reset();
mediaPlayer.setDataSource("/sdcard/111.wav");
// mediaPlayer.setDataSource(accompany.getFD());
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isRunning = false;
}
});
mediaPlayer.prepare();
// 跳過頭
accompany.read(new byte[44]);
original.read(new byte[44]);
FileOutputStream fos = new FileOutputStream(new File("/sdcard/love.raw"));
// 開始讀
byte[] sourceReader = new byte[RecorderParameter.bufferSizeInBytes * 2];
short[] sourceShortArray;
short[] audioReader = new short[sourceReader.length / 4];
mediaPlayer.start();
recorder.startRecording();
while (isRunning) {
int sourceReadSize = accompany.read(sourceReader, 0, sourceReader.length);
if (sourceReadSize < 0) {
isRunning = false;
continue;
}
sourceShortArray = byteToShortArray(sourceReader, sourceReadSize / 2);
recorder.read(audioReader, 0, audioReader.length);
short[] oneSecond = mixVoice(sourceShortArray, audioReader, sourceReadSize / 2);
byte[] outStream = new byte[oneSecond.length * 2];
for (int i = 0; i < oneSecond.length; i++) {
byte[] b = shortToByteArray(oneSecond<i>);
outStream[2 * i] = b[0];
outStream[2 * i + 1] = b[1];
}
『陸』 android如何使用fdk-aac編碼庫來把aac轉成pcm
線性PCM就是WAV。
AAC-LC是AAC的一個規格,你下載到或者轉換的這些高碼率的AAC都是AAC-LC的。
擴展名是.m4a。
.aac 是aac的音頻數據流,m4a是aac的一個封裝方式。其內容本身是一樣的。
我用s754,和e453功能是一樣的。m4a和wav的我都放了,沒問題,只是.aac的我還沒試過。
但我相信lz沒有.aac的。。因為這年頭你下載到的或者轉換出來的都是m4a的
『柒』 Android中使用FFmpeg得到視頻中的PCM和YUV數據
使用FFmpeg獲取PCM和YUV數據的流程基本上一樣的,下面就以獲取YUV數據的流程為例,說明這個過程:
『捌』 求PCM音頻文件!測試用!急急急急急!我所有的分了! 注意格式必須是.pcm的音頻文件
對補充的回答:RVMB格式是網上很流行的視頻格式,是經過壓縮的.它的標准播放軟體是Realplayer,不過如果你不想再安裝軟體,直接用windows自帶的Mediaplayer播放的話,那就在網上搜一個名叫"阿飛的解碼器"裝上,就可滿足當前的大多數音視頻的解碼問題了.你所提的這些格式都不是純音頻格式,WMV,MPG,AVI,VOB這些是屬於視頻類的,不是純音頻.按你說的這些文件的來源,那差別就大頌檔唯了.wmv是微軟公司為滿足網路視頻速度快、文件小的需要開發出的一種視頻格式,壓縮比很大,文件的個頭在你提的這幾種里是最小的,不過這也要看視頻的原始尺寸.MPG格式也是一種壓縮格式,分VCD的MPEG1(在光碟的文件顯示為.DAT)和DVD的MPEG2(在光碟里顯示為.VOB)兩種格式,清晰度你也應該知道的。對於野培AVI這種格式嘛,就不一定了,如果說是從DV帶或是一些高清攝像機採集而來的視頻AVI,那就應該是最清晰的,不過嘛文件也是最大的,不過現在的視頻格式,比如MP4播放器播放的視頻也是AVI的,它是經過壓縮的,文件大小和清晰度也就受到了蠢虧限制.音頻文件如mp3,wma,ape,wav,midi等等這些格式才是純音頻,而你說的那些格式是音頻和視頻合成的文件.對於我所說的這些音頻格式:mp3和wma都屬於壓縮比例較大的格式,只有wav文件是沒有經過壓縮的原聲文件,ape是屬於一種保真度很高的壓縮音頻文件,而midi是由混音器合成或是轉換得來的音頻.這幾種音頻格式相比之下,當然是wav這種格式的音質最好了(不過也要看錄制的環境和設備),也就是CD光碟上保存的音頻的原始文件格式.不過最大的缺點是文件佔用的空間相對其他格式音頻文件最大;ape格式文件是壓縮得比較小的格式,基本上保持了WAV的原音質,損失不大,文件個頭只佔WAV的三分之一左右;mp3\wma格式應該是網上最流行的音頻格式了,相對於WAV壓縮得就相當多了.不過如果不是音樂發燒友的也可以滿足聽覺了,因為被壓縮的部分人耳是分辨不出來的.