android 音訊簡介
常見的音訊編譯碼的型別:aac opus *** amr ogg pcm
aac: 高階音訊編碼 對應 .m4a(audio/m4a)或者.3pg(audio/3gpp)檔案 heaac:高階aac,使用的比較多。
opus:有損聲音編碼的格式,由網際網路工程任務組
(ietf)進來開發,適用於網路上的實時聲音傳輸,如:語音通話
***: 使用的最廣泛的音訊編解碼器 對應 .***(audio/***) 各種****一般用這種。
amr:自適應多速率音訊編解碼器,一般用於語音呼叫程式。
ogg:開發的無專利的音訊編解碼器,其質量可與商業的和手專利保護的***以及aac編譯碼相媲美。
pcm :原始音訊,在android平台上由audio record直接錄用下來的,未經過編碼的。
android音訊採集(捕獲)
android平台上的音訊採集一般就三種:1.利用android內建的應用程式 2.使用mediarecorder進行音訊捕獲 3.使用audiorecord進行音訊捕獲。此3種方式的靈活性逐漸增大,相應的所需要做的工作也逐漸增多。
一、android 內建的應用程式。
intent intent=new intent(mediastore.audio.media.record_sound_action);
startactivityforresult(intent,0); //通過startactivityforresult獲取音訊錄製的結果的路徑
這種方式靈活度最差,一般就是做著演示下,開發中基本不用這種方案。
二、使用mediarecorder進行音訊的捕獲。
使用步驟:
建立mediarecorder物件,呼叫如下方法(ps:呼叫順序順序對結果的影響是非常的大。)
mediarecorder recorder=new mediarecorder();//建立mediarecoder物件
1.recorder.setaudiosource(mediarecorder.audiosource.mic); //呼叫setaudiosource方法 (呼叫的第乙個方法)
mediarecorder.audiosource.camcorder和mediarecorder.audiosource.voice_recognition當裝置具有。>=2個麥克風的時候就可以使用它們。
<?xml version="1.0" encoding="utf-8"?>
public class mainactivity extends activity implements onclicklistener
//初始化
public void init()
//設定***
public void initlistener()
//錄音
public void recod()
try
audiofile.createnewfile();//建立檔案
} catch (exception e)
recorder.setoutputfile(audiofile.getabsolutepath()); //設定輸出檔案
try catch (illegalstateexception e) catch (ioexception e)
isrecoding=true;
recorder.start(); }
public void onclick(view v)
//停止錄音
case r.id.stoprecording:
break;
}default:
break;
} }}
mediarecoder的其他api方法:
//設定錄製允許的最大時長 單位是毫秒。必須在setoutformat方法之後,prepare方法之前使用。
setmaxduration(int);
//設定檔案錄製的存放檔案的最大值,單位是位元組 。必須在setoutformat方法之後,prepare方法之前使用。
setmaxfilesize(long)
//允許錄製的音訊通道數,通常是乙個通道(單聲道,2個通道雙聲道,立體聲)。必須在呼叫prepare方法之前呼叫。
setaudiochannels(int)
//允許制定捕獲和編碼音訊的取樣率。硬體和使用的編碼器將會決定合適的取樣率。必須在呼叫prepare方法之前呼叫。
setaudiosamplingrate(int)
//允許指定當壓縮音訊時編碼器所使用的每秒位數(位/秒)。必須在呼叫prepare方法之前呼叫。
setaudioencodingbitrate在(int)
三、使用audiorecord 進行音訊捕獲。
這種方法是3種之中最為靈活的,能讓開發者最大限度的處理採集的音訊,同時它捕獲到的音訊是原始音訊pcm格式的!像做變聲處理的需要就必須要用它收集音訊。在實際開發中,它也是最常用來採集音訊的手段。也是本文介紹的重點。
//指定音訊源 這個和mediarecorder是相同的
int audiosource=mediarecorder.audiosource.mic;
//指定取樣率 (mediarecoder 的取樣率通常是8000hz cd的通常是44100hz 不同的android手機硬體將能夠以不同的取樣率進行取樣。其中11025是乙個常見的取樣率)
int samplerateinhz=11025 ;
//指定捕獲音訊的通道數目。在audioformat類中指定用於此的常量
int channelconfig=audioformat.channel_configuration_mono;
//指定音訊量化位數 ,在audioformaat類中指定了以下各種可能的常量。通常我們選擇encoding_pcm_16bit和encoding_pcm_8bit pcm代表的是脈衝編碼調製,它實際上是原始音訊樣本。
//因此可以設定每個樣本的解析度為16位或者8位,16位將占用更多的空間和處理能力,表示的音訊也更加接近真實。
int audioformat=audioformat.encoding_pcm_16bit;
指定緩衝區大小。呼叫audiorecord類的getminbuffersize方法可以獲得。
audiorecord record=new audiorecord(audiosource,samplerateinhz,channelconfig,audioformat,buffersizeinbytes);
布局xml檔案和mediarecorder demo中一樣,2個按鈕而已!就不貼了,下面貼出audiorecord的demo的源**.
public class mainactivity extends activity implements onclicklistener
//初始化
public void init()
//初始化***
public void initlistener()
public void onclick(view v)
//停止錄音
case r.id.stoprecordingbutton:}}
//開始錄音
public void record()
try
catch (ioexception e)
try
r++;
}audiorecord.stop();//停止錄音
dos.close();
} catch (throwable t)
}}).start();
}
//停止錄音
public void stoprecording()
}
注意這幾個demo都要新增以下許可權:
四、備註:
mediarecorder採集音訊的demo原始碼
audiorecord採集音訊的demo原始碼
音訊如何採集
1 在例項化 audiorecord 時需要指定採集源 2 設定為麥克風 3 然後指定取樣率 4 我們公司採用相容性非常強的 44100hz 也就是每秒採集 44100 次,5 接著是配置音訊通道 6 我們團隊採用了 audioformat.channel in mono 代表單通道,當然也是支援雙...
語音傳輸 音訊採集
我想做語音傳輸方面的設計,駐極式咪頭採集語音頻號經lm358放大,用的mcu是stm32,請問該電路輸出是否會超過ad的參考電壓3.3v?謝謝!lm358可以用3.3v吧,它的單電源電壓範圍3 32v 是想著打算c2輸出就接mcu的adc引腳,有什麼問題嗎?1.lm358給3.3v供電下,輸入輸出的...
Android音訊焦點
ad 獲取音訊焦點 可以通過呼叫 requestaudiofocus 來實現,如果請求成功,返回 audiofocus request granted 您必須指定流型別 使用的是哪乙個流 和音訊焦點的型別 短暫的或是持久的 下面的 片斷演示了請求 音訊流的永久音訊焦點。abandon audio f...