精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android平臺上音頻錄制與播放的關(guān)鍵類及其功能,助你選擇合適方式進行音頻處理任務(wù)

移動開發(fā) Android
MediaPlayer主要用于后臺長時間播放本地音樂文件或在線流媒體文件。提供了一個高層次的封裝,使播放音頻變得相對簡單。MediaPlayer特別適合那些需要連續(xù)播放較長時間音頻的應(yīng)用場景,例如音樂播放器或視頻播放器。

安卓平臺和聲音錄制與播放相關(guān)的主要是4個類:MediaRecorder,MediaPlayer,SoundPool,AudioRecord和AudioTrack。

  1. 「MediaRecorder」 可以錄制視頻和音頻到文件
  2. 「MediaPlayer」 可以播放視頻和音頻文件
  3. 「SoundPool」 用于播放比較短的音頻片段
  4. 「AudioRecord」 可以提供接口讀取音頻流數(shù)據(jù)(byte數(shù)組或者short數(shù)組)
  5. 「AudioTrack」 提供接口用于播放音頻流數(shù)據(jù)。

其中MediaRecorder和AudioRecord用于聲音錄制,SoundPool、MediaPlayer和AudioTrack用于聲音播放。AudioRecord和AudioTrack用于操作音頻流數(shù)據(jù),操作對象是byte數(shù)組(或者short數(shù)組),而MediaRecorder和MediaPlayer提供了經(jīng)過更高層抽象和封裝接口,直接對文件進行操作,而且它倆功能更豐富,同時支持音頻和視頻。

MediaRecorder

MediaRecorder是Android提供的一個用于音視頻錄制的高級類。封裝了底層的音視頻編碼器(通常是MediaCodec)和其他相關(guān)組件。如果不需要對音視頻進行更底層的控制,只是想要方便地進行錄制操作,那么可以選擇使用MediaRecorder。

圖片圖片

MediaRecorder提供了一系列的方法用于配置和控制錄制過程,例如設(shè)置音頻和視頻源、設(shè)置輸出格式和編碼、開始和停止錄制等。還提供了錯誤監(jiān)聽器和信息監(jiān)聽器,以便在錄制過程中處理錯誤事件和獲取錄制信息。

在配置MediaRecorder時,需要先創(chuàng)建一個MediaRecorder實例,設(shè)置音頻和視頻源,以及輸出文件的格式和編碼。例如,可以使用setAudioSource()方法設(shè)置音頻來源,使用setVideoSource()方法設(shè)置視頻來源,使用setOutputFormat()和setVideoEncoder()等方法設(shè)置輸出格式和視頻編碼。

完成配置后,調(diào)用MediaRecorder的prepare()方法準備錄制,調(diào)用start()方法開始錄制。當錄制完成后調(diào)用stop()方法停止錄制,最后調(diào)用release()方法釋放錄制資源。

MediaRecorder主要方法:

setAudioChannels(int numChannels) //設(shè)置錄制的音頻通道數(shù)
setAudioEncoder(int audio_encoder) //設(shè)置audio的編碼格式
setAudioEncodingBitRate(int bitRate) //設(shè)置錄制的音頻編碼比特率
setAudioSamplingRate(int samplingRate) //設(shè)置錄制的音頻采樣率
setAudioSource(int audio_source) //設(shè)置用于錄制的音源
setAuxiliaryOutputFile(String path) //輔助時間的推移視頻文件的路徑傳遞
setAuxiliaryOutputFile(FileDescriptor fd)//在文件描述符傳遞的輔助時間的推移視頻
setCamera(Camera c) //設(shè)置一個recording的攝像頭
setCaptureRate(double fps) //設(shè)置視頻幀的捕獲率
setMaxDuration(int max_duration_ms) //設(shè)置記錄會話的最大持續(xù)時間(毫秒)
setMaxFileSize(long max_filesize_bytes) //設(shè)置記錄會話的最大大?。ㄒ宰止?jié)為單位)
setOutputFile(FileDescriptor fd) //傳遞要寫入的文件的文件描述符
setOutputFile(String path) //設(shè)置輸出文件的路徑
setOutputFormat(int output_format) //設(shè)置在錄制過程中產(chǎn)生的輸出文件的格式
setPreviewDisplay(Surface sv) //表面設(shè)置顯示記錄媒體(視頻)的預(yù)覽
setVideoEncoder(int video_encoder) //設(shè)置視頻編碼器,用于錄制
setVideoEncodingBitRate(int bitRate) //設(shè)置錄制的視頻編碼比特率
setVideoFrameRate(int rate) //設(shè)置要捕獲的視頻幀速率
setVideoSize(int width, int height) //設(shè)置要捕獲的視頻的寬度和高度
setVideoSource(int video_source) //開始捕捉和編碼數(shù)據(jù)到setOutputFile(指定的文件)
setLocation(float latitude, float longitude) //設(shè)置并存儲在輸出文件中的地理數(shù)據(jù)(經(jīng)度和緯度)
setProfile(CamcorderProfile profile) //指定CamcorderProfile對象
setOrientationHint(int degrees) //設(shè)置輸出的視頻播放的方向提示
setOnErrorListener(MediaRecorder.OnErrorListener l) //注冊一個用于記錄錄制時出現(xiàn)的錯誤的監(jiān)聽器
setOnInfoListener(MediaRecorder.OnInfoListener listener) //注冊一個用于記錄錄制時出現(xiàn)的信息事件
getMaxAmplitude() //獲取在前一次調(diào)用此方法之后錄音中出現(xiàn)的最大振幅
prepare() //準備錄制。
release() //釋放資源
reset() //將MediaRecorder設(shè)為空閑狀態(tài)
start() //開始錄制
stop() //停止錄制

MediaRecorder主要配置參數(shù):

  1. 「視頻編碼格式」MediaRecorder.VideoEncoder
default,H263,H264,MPEG_4_SP,VP8
  1. 「音頻編碼格式」MediaRecorder.AudioEncoder
default,AAC,HE_AAC,AAC_ELD,AMR_NB,AMR_WB,VORBIS
  1. 「視頻資源獲取方式」MediaRecorder.VideoSource
default,CAMERA,SURFACE
  1. 「音頻資源獲取方式」MediaRecorder.AudioSource
defalut,camcorder,mic,voice_call,voice_communication,voice_downlink,voice_recognition, voice_uplink
  1. 「資源輸出格式」MediaRecorder.OutputFormat
amr_nb,amr_wb,default,mpeg_4,raw_amr,three_gpp,aac_adif, aac_adts, output_format_rtp_avp, output_format_mpeg2ts ,webm

MediaPlayer

MediaPlayer是Android平臺上的一個多媒體框架,支持播放各種常見的媒體類型,如音頻、視頻和圖片,能夠輕松地將這些媒體內(nèi)容集成到應(yīng)用中。

圖片圖片

MediaPlayer提供了豐富的API和功能能夠靈活地控制媒體的播放。通過MediaPlayer的API可以播放存儲在應(yīng)用資源中的媒體文件、文件系統(tǒng)中的獨立文件,或者通過網(wǎng)絡(luò)連接接收到的數(shù)據(jù)流中的音頻或視頻。

在使用MediaPlayer時,需要創(chuàng)建一個MediaPlayer實例,通過調(diào)用setDataSource()方法來指定要播放的媒體文件或流的來源。調(diào)用prepare()或prepareAsync()方法使MediaPlayer對象進入Prepared狀態(tài),準備播放媒體內(nèi)容。在媒體準備好之后調(diào)用start()方法來開始播放。

MediaPlayer還提供了各種控制選項,如暫停、恢復(fù)、停止播放,以及調(diào)整音量和播放速度等??梢允褂肕ediaPlayer來監(jiān)聽媒體播放過程中的事件,如播放完成、播放錯誤等,以便進行相應(yīng)的處理。

MediaPlayer主要方法:

  1. 「實例化方式」
MediaPlayer mp = new MediaPlayer();
//或
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);
  1. 「設(shè)置播放源」
setDataSource(String path)//指定裝載path路徑所代表的文件。
setDataSource(Context context, Uri uri, Map<String, String headers)//指定裝載uri所代表的文件。
setDataSource(Context context, Uri uri)//指定裝載uri所代表的文件。
setDataSource(FileDescriptor fd, long offset, long length)//指定裝載fd所代表的文件中從offset開始長度為length的文件內(nèi)容。
setDataSource(FileDescriptor fd)//指定裝載fd所代表的文件。
  1. 「配置播放參數(shù)」
setAudioStreamType(int streamtype)//設(shè)置音頻流的類型。
setDisplay(SurfaceHolder sh)//設(shè)置顯示方式。
setLooping(boolean looping)//設(shè)置是否循環(huán)播放。
setNextMediaPlayer(MediaPlayer next)//設(shè)置當前流媒體播放完畢,下一個播放的MediaPlayer。
setScreenOnWhilePlaying(boolean screenOn)//設(shè)置是否使用SurfaceHolder來顯示。
setSurface(Surface surface)//設(shè)置Surface。
setVideoScalingMode(int mode)//設(shè)置視頻縮放的模式。
setVolume(float leftVolume, float rightVolume)//設(shè)置播放器的音量。
setWakeMode(Context context, int mode)//為MediaPlayer設(shè)置低級電源管理行為。
  1. 「播放控制函數(shù)」
start()//開始或恢復(fù)播放。
stop()//停止播放。
pause()//暫停播放。
prepare()//準備播放(裝載音頻),調(diào)用此方法會使MediaPlayer進入Prepared狀態(tài)。
prepareAsync()//準備播放異步音頻。
release()//釋放媒體資源
reset()//重置MediaPlayer進入未初始化狀態(tài)。
seekTo(int msec)//指定的時間位置。
  1. 「監(jiān)聽事件函數(shù)」
setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)//注冊一個回調(diào)函數(shù),在網(wǎng)絡(luò)視頻流緩沖變化時調(diào)用。
setOnCompletionListener(MediaPlayer.OnCompletionListener listener)//為Media Player的播放完成事件綁定事件監(jiān)聽器。
setOnErrorListener(MediaPlayer.OnErrorListener listener)//為MediaPlayer的播放錯誤事件綁定事件監(jiān)聽器。
setOnPreparedListener(MediaPlayer.OnPreparedListener listener)//當MediaPlayer調(diào)用prepare()方法時觸發(fā)該監(jiān)聽器。
setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)//當MediaPlayer調(diào)用seek()方法時觸發(fā)該監(jiān)聽器。
setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)//注冊一個用于監(jiān)聽視頻大小改變的監(jiān)聽器。
  1. 「獲取參數(shù)函數(shù)」
getCurrentPosition()//獲取當前播放的位置。
getDuration()//獲取音頻的時長。
getVideoHeight()//獲取視頻的高度。
getVideoWidth()//獲取視頻的寬度。
isLooping()//判斷MediaPlayer是否正在循環(huán)播放。
isPlaying()//判斷MediaPlayer是否正在播放。

SoundPool

SoundPool是Android提供的一個音頻播放工具類,主要用于播放較短的音頻文件,例如音效、提示音等。

SoundPool特點:

  1. 「低延遲」:SoundPool使用較低的延遲來播放音頻,特別適合實時性要求較高的場景。
  2. 「資源管理」:SoundPool能夠管理多個音頻資源,并且可以預(yù)加載音頻文件,從而提高播放的響應(yīng)速度。
  3. 「多次播放」:SoundPool支持多次播放同一個音頻文件,能夠?qū)崿F(xiàn)連續(xù)播放、循環(huán)播放等效果。
  4. 「多聲道支持」:SoundPool支持多聲道播放,可以同時播放多個音頻文件。

使用SoundPool的基本流程:創(chuàng)建一個SoundPool對象->載入要播放的音頻->播放某個音頻->在需要時停止播放某個音頻。每個載入的音頻在SoundPool中都會對應(yīng)一個SoundID,播放時通過SoundID來指定要播放的音頻。

SoundPool的應(yīng)用場景廣泛,包括游戲開發(fā)、多媒體應(yīng)用、音頻提示等。在游戲開發(fā)中,可以使用SoundPool來播放游戲音效、背景音樂等;在多媒體應(yīng)用中,可以使用SoundPool來播放短音頻片段,如按鈕點擊音效、提示音等;在音頻提示方面,可以使用SoundPool來實現(xiàn)鬧鐘、提醒等功能。

SoundPool加載的音頻資源是加載進內(nèi)存,所以要求盡可能的短。每個音頻資源的大小被限制在1M左右(相當于時長5.6s、采樣率在44.1kHz的雙聲道音頻資源)。如果超過這個限制大小,音頻會被裁剪。

SoundPool主要方法:

  1. 「實例化方式」
//參數(shù):
//maxStreams:指定支持多少個聲音,SoundPool對象中允許同時存在的最大流的數(shù)量,該值太大就會報錯AudioFlinger could not create track, status: -12 ,就聽不到聲音
//streamType:指定聲音類型,流類型可以分為STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSIC 和STREAM_ALARM四種類型。在AudioManager中定義。
//srcQuality:指定聲音品質(zhì)(采樣率變換質(zhì)量),一般直接設(shè)置為0

SoundPool(int maxStreams, int streamType, int srcQuality)

在低版本中使用上述構(gòu)造方法,API 21(Android 5.0)后這個構(gòu)造方法過時了,使用SoundPool.Builder實例化SoundPool:

SoundPool.Builder spb = new SoundPool.Builder();
spb.setMaxStreams(10);
spb.setAudioAttributes(null);    //轉(zhuǎn)換音頻格式
SoundPool sp = spb.build();      //創(chuàng)建SoundPool對象
  1. 「加載音頻資源文件」
load(Context context, int resId, int priority) //從res資源載入
load(String path, int priority) //文件路徑,文件的絕對路線,如存放在sd卡中的音頻 priority:沒什么用的一個參數(shù),建議設(shè)置為1,保持和未來的兼容性
load(FileDescriptor fd, long offset, long length, int priority) //文件描述符
load(AssetFileDescriptor afd, int priority) //從asset目錄讀取某個資源文件,context.getAssets().openFd("xxx"),xxx表示文件名

上述方法都會返回一個Integer類型的音頻ID,后續(xù)使用該ID進行播放。

  1. 「播放音頻文件」
//soundID:Load()返回的聲音ID號,以上可以通過map.get(1)獲取
//leftVolume:左聲道音量設(shè)置  一般為0-1,默認填1
//rightVolume:右聲道音量設(shè)置 一般為0-1,默認填1
//priority:指定播放聲音的優(yōu)先級,數(shù)值越高,優(yōu)先級越大。默認填0
//loop:指定是否循環(huán):-1表示無限循環(huán),0表示不循環(huán),其他值表示要重復(fù)播放的次數(shù)
//rate:指定播放速率:1.0的播放率可以使聲音按照其原始頻率,而2.0的播放速率,可以使聲音按照其 原始頻率的兩倍播放。如果為0.5的播放率,則播放速率是原始頻率的一半。播放速率的取值范圍是0.5至2.0。

play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate); //其返回值為一個int類型的數(shù)字

如果SoundPool剛調(diào)用加載load方法之后,直接調(diào)用SoundPool的play方法可能出現(xiàn)error "sample 1 not READY",建議調(diào)用加載資源函數(shù)load之后,實現(xiàn)資源加載結(jié)束的監(jiān)聽函數(shù),在監(jiān)聽到資源加載結(jié)束之后,再進行播放音頻文件。

soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        soundPool.play(1, 1, 1, 0, 0, 1);
    }
});
  1. 卸載音頻或者停止播放重置資源
//streamID:通過play()返回
soundPool.pause(int streamID)  //暫停指定播放流的音效

//streamID:通過play()返回
soundPool.resume(int streamID)  //繼續(xù)播放指定播放流的音效

//streamID:通過play()返回
soundPool.stop(int streamID) //終止指定播放流的音效

//soundID:load()返回的音頻ID
soundPool.unload(int soundID) //卸載一個指定的音頻資源.

soundPool.release() //釋放SoundPool中的所有音頻資源.

AudioRecord

AudioRecord為Android應(yīng)用提供了一個強大而靈活的音頻錄制工具。AudioRecord都能提供高質(zhì)量的音頻數(shù)據(jù),可用于語音識別、電話錄音和其他音頻處理任務(wù)。

  1. 「音頻源」:AudioRecord支持從多種音頻源中錄制音頻數(shù)據(jù),例如麥克風(fēng)、電話線路、語音識別等。
  2. 「音頻格式」:AudioRecord允許選擇不同的音頻格式來錄制音頻數(shù)據(jù),如PCM(脈沖編碼調(diào)制)、AAC(高級音頻編碼)等。這些格式的選擇可以根據(jù)應(yīng)用場景和編碼需求進行。
  3. 「緩沖區(qū)」:AudioRecord使用一個緩沖區(qū)來存儲錄制的音頻數(shù)據(jù)??梢灾付ň彌_區(qū)的大小,以適應(yīng)不同的錄制需求。
  4. 「配置參數(shù)」:通過AudioRecord的API接口可以設(shè)置錄制設(shè)備的參數(shù),包括采樣率、聲道數(shù)、音頻格式等。
  5. 「工作流程」:使用AudioRecord進行音頻錄制的工作流程包括配置參數(shù)、初始化內(nèi)部音頻緩沖區(qū)、開始采集音頻數(shù)據(jù)、通過線程不斷從緩沖區(qū)讀取數(shù)據(jù),并在需要時停止采集和釋放資源。
  6. 「性能與特點」:由于AudioRecord直接與Android的音頻硬件交互,在性能上具有顯著優(yōu)勢。AudioRecord還具備線程安全、低延遲錄制、多格式支持、實時處理、可擴展性強等特點,使得它在各種音頻錄制場景中都能表現(xiàn)出色。

AudioRecord的工作流程:

(1) 配置參數(shù),初始化內(nèi)部的音頻緩沖區(qū)
(2) 開始采集
(3) 需要一個線程,不斷地從 AudioRecord 的緩沖區(qū)將音頻數(shù)據(jù)“讀”出來,注意,這個過程一定要及時,否則就會出現(xiàn)“overrun”的錯誤,該錯誤在音頻開發(fā)中比較常見,意味著應(yīng)用層沒有及時地“取走”音頻數(shù)據(jù),導(dǎo)致內(nèi)部的音頻緩沖區(qū)溢出。
(4) 停止采集,釋放資源

AudioRecord的參數(shù)配置:

  • 「audioSource」 參數(shù)指的是音頻采集的輸入源,可選的值以常量的形式定義在 MediaRecorder.AudioSource 類中,常用的值包括:DEFAULT(默認),VOICE_RECOGNITION(用于語音識別,等同于DEFAULT),MIC(由手機麥克風(fēng)輸入),VOICE_COMMUNICATION(用于VoIP應(yīng)用)等等。
  • 「sampleRateInHz」 采樣率,注意,目前44100Hz是唯一可以保證兼容所有Android手機的采樣率。
  • 「channelConfig」 通道數(shù)的配置,可選的值以常量的形式定義在 AudioFormat 類中,常用的是 CHANNEL_IN_MONO(單通道),CHANNEL_IN_STEREO(雙通道)。
  • 「audioFormat」 這個參數(shù)是用來配置“數(shù)據(jù)位寬”的,可選的值也是以常量的形式定義在 AudioFormat 類中,常用的是 ENCODING_PCM_16BIT(16bit),ENCODING_PCM_8BIT(8bit),注意,前者是可以保證兼容所有Android手機的。

AudioTrack

AudioTrack是Android平臺下用于管理和播放單一音頻資源的類,特別適合低延遲的播放和流媒體的播放,提供了強大的控制能力。

  1. 「音頻播放」:AudioTrack主要用于播放已經(jīng)解碼的PCM流。通過配置AudioTrack實例,調(diào)用其play方法,將AudioTrack切換到播放狀態(tài),并啟動播放線程循環(huán)向AudioTrack的緩沖區(qū)寫入數(shù)據(jù),可以實現(xiàn)音頻的播放。
  2. 「數(shù)據(jù)加載模式」:AudioTrack提供了兩種數(shù)據(jù)加載模式:MODE_STREAM和MODE_STATIC。MODE_STREAM模式下,音頻數(shù)據(jù)通過write操作一次次寫入AudioTrack中,在一定程度上會引入延時。而MODE_STATIC模式下,所有數(shù)據(jù)在play之前一次性寫入AudioTrack的內(nèi)部緩沖區(qū),后續(xù)無需再傳遞數(shù)據(jù),需注意一次性寫入的數(shù)據(jù)量不能過多,以免系統(tǒng)無法分配足夠內(nèi)存。
  3. 「音頻流類型」:在配置AudioTrack時,需要指定音頻流類型,如系統(tǒng)聲音的音頻流、音樂播放的音頻流、用于通話的音頻流、用于通知的音頻流等。有助于系統(tǒng)正確管理音頻資源。
  4. 「實時處理」:AudioTrack可用于播放本地保存的音頻文件,還適用于實時音頻處理和播放。例如,可以實現(xiàn)音頻錄制和回放功能,將采集到的音頻數(shù)據(jù)寫入AudioTrack對象并播放出來。

AudioTrack的工作流程:

(1) 配置參數(shù),初始化內(nèi)部的音頻播放緩沖區(qū)
(2) 開始播放
(3) 需要一個線程,不斷地向AudioTrack的緩沖區(qū)“寫入”音頻數(shù)據(jù),注意,這個過程一定要及時,否則就會出現(xiàn)“underrun”的錯誤,該錯誤在音頻開發(fā)中比較常見,意味著應(yīng)用層沒有及時地“送入”音頻數(shù)據(jù),導(dǎo)致內(nèi)部的音頻播放緩沖區(qū)為空。
(4) 停止播放,釋放資源

AudioTrack的參數(shù)配置:

  • 「streamType」 這個參數(shù)代表著當前應(yīng)用使用的哪一種音頻管理策略,當系統(tǒng)有多個進程需要播放音頻時,這個管理策略會決定最終的展現(xiàn)效果,該參數(shù)的可選的值以常量的形式定義在 AudioManager 類中,主要包括:
STREAM_VOCIE_CALL:電話聲音
STREAM_SYSTEM:系統(tǒng)聲音
STREAM_RING:鈴聲
STREAM_MUSCI:音樂聲
STREAM_ALARM:警告聲
STREAM_NOTIFICATION:通知聲
  • 「sampleRateInHz」 采樣率,從AudioTrack源碼的“audioParamCheck”函數(shù)可以看到,這個采樣率的取值范圍必須在4000Hz~192000Hz之間。
  • 「mode」 AudioTrack提供了兩種播放模式,一種是static方式,一種是streaming方式,前者需要一次性將所有的數(shù)據(jù)都寫入播放緩沖區(qū),簡單高效,通常用于播放鈴聲、系統(tǒng)提醒的音頻片段; 后者則是按照一定的時間間隔不間斷地寫入音頻數(shù)據(jù),理論上它可用于任何音頻播放的場景??蛇x的值以常量的形式定義在AudioTrack類中,一個是MODE_STATIC,另一個是MODE_STREAM,根據(jù)具體的應(yīng)用傳入對應(yīng)的值即可。

音頻錄制選擇

MediaRecorder是一個高級別的音頻/視頻錄制工具,集成了錄音、編碼、封裝復(fù)用等功能,操作起來相對簡單。錄制的音頻文件經(jīng)過壓縮處理,并可以直接使用系統(tǒng)自帶的播放器進行播放。MediaRecorder的簡單易用性使其適用于對音頻處理要求不高的場景。由于它更多地是系統(tǒng)音頻API的封裝,對于需要實時處理音頻、進行網(wǎng)絡(luò)傳輸或直播等高級應(yīng)用場景,可能并不適用。

AudioRecord則更加接近底層,提供了更加靈活和自由的音頻采集和處理能力。支持多種音頻編碼格式,如PCM、WAV、MP3等,可以滿足不同場景下的需求。AudioRecord還設(shè)計了靈活的數(shù)據(jù)處理接口,可以方便地添加自定義的音頻處理模塊,實現(xiàn)如混響、均衡器等效果。這使得AudioRecord在需要對音頻進行進一步算法處理、采用第三方編碼庫進行壓縮、進行網(wǎng)絡(luò)傳輸和直播等高級應(yīng)用場景中表現(xiàn)出色。AudioRecord還具有線程安全、性能優(yōu)異、可擴展性強等特點,保證了其在多線程環(huán)境中的穩(wěn)定運行,并預(yù)留了豐富的接口供拓展定制。

對于音頻處理要求不高的場景,可以選擇使用MediaRecorder,簡單易用,能夠直接錄制并播放壓縮后的音頻文件。對于需要對音頻進行進一步算法處理、采用第三方編碼庫進行壓縮、進行網(wǎng)絡(luò)傳輸和直播等高級應(yīng)用場景,推薦使用AudioRecord,提供了更加靈活和自由的音頻采集和處理能力。

音頻播放選擇

在選擇時需要考慮以下因素:

  • 「音頻文件的類型」:如果需要播放長時間的音樂或視頻文件,MediaPlayer可能是更好的選擇;如果需要播放短音頻片段,可以考慮使用SoundPool。
  • 「播放需求」:如果需要同時播放多個音頻,SoundPool是一個很好的選擇;如果需要對音頻進行更精細的控制,例如調(diào)整音量、播放速率等,那么AudioTrack可能更適合。
  • 「性能需求」:SoundPool通常具有較低的CPU占用率和反應(yīng)延遲,適合性能要求較高的應(yīng)用;而AudioTrack由于更底層,可能需要更多的開發(fā)工作,但可以實現(xiàn)更高級別的音頻處理和控制。

MediaPlayer主要用于后臺長時間播放本地音樂文件或在線流媒體文件。提供了一個高層次的封裝,使播放音頻變得相對簡單。MediaPlayer特別適合那些需要連續(xù)播放較長時間音頻的應(yīng)用場景,例如音樂播放器或視頻播放器。

SoundPool更適合播放較短的音頻片段,如游戲聲音、按鍵聲音、鈴聲片段等。SoundPool可以同時播放多個音頻,并且具有較低的CPU占用率和反應(yīng)延遲。在需要頻繁播放短音頻的應(yīng)用中表現(xiàn)出色,例如游戲或通知提示音。

AudioTrack是更加底層的API,主要用于管理和播放單一音頻資源。提供了非常強大的控制能力,適合流媒體播放等場景。AudioTrack需要結(jié)合解碼器來使用,對于需要進行底層音頻處理的開發(fā)者來說更為適用。


責(zé)任編輯:武曉燕 來源: 沐雨花飛蝶
相關(guān)推薦

2021-07-09 09:24:41

鴻蒙HarmonyOS應(yīng)用

2021-04-12 17:59:39

WindowsYouTube谷歌

2022-08-15 19:25:56

Android音頻PCM

2015-06-16 10:27:13

iOSAndroid音頻

2023-08-16 08:00:39

API網(wǎng)頁端音頻錄制

2024-02-06 10:04:21

微軟視頻編輯工具

2011-12-20 20:40:07

Android

2016-09-12 14:42:24

LinuxOctave音頻文件

2023-01-05 16:51:04

機器學(xué)習(xí)人工智能

2016-10-31 19:41:50

LinuxOctave音頻文件

2018-06-06 15:49:06

FPGA音頻處理器

2010-01-27 15:15:13

Android多媒體錄

2022-12-25 17:49:55

Ubuntu媒體音頻Linux

2009-06-12 08:57:56

Unix字符串處理

2013-08-07 14:04:22

MySQL備份

2011-08-01 14:42:47

iPhone 應(yīng)用程序 聲音

2011-07-27 09:50:31

iPhone AVAudioPla 音頻

2011-08-02 16:58:15

iPhone AVAudioPla 音頻播放

2011-08-08 18:19:09

iPhone音頻播放

2011-09-05 18:08:01

MTK音頻播放器
點贊
收藏

51CTO技術(shù)棧公眾號

欧美日韩视频免费观看| 少妇激情av一区二区| 欧美hd在线| 日韩欧美卡一卡二| av免费观看网| seseavlu视频在线| 国产福利电影一区二区三区| 久久久久久久久久久av| 五月婷六月丁香| 亚洲日本va| 色噜噜夜夜夜综合网| 国产盗摄视频在线观看| 日韩大胆视频| 国产精品一区二区果冻传媒| 欧美亚洲国产精品| 国产激情无码一区二区三区| 亚洲欧洲免费| 欧美岛国在线观看| 人人干人人干人人| 91豆花视频在线播放| 国产精品毛片久久久久久| 国产精品日韩一区二区| 自拍偷拍色综合| 亚洲伦伦在线| 欧美成人精品一区二区三区| 亚洲色成人网站www永久四虎| 秋霞影院一区| 欧美综合欧美视频| 内射国产内射夫妻免费频道| 视频在线观看入口黄最新永久免费国产| 久久欧美一区二区| 国产精品高清一区二区三区| 国产免费高清视频| 日本va欧美va精品发布| 欧美一级电影在线| 精品在线免费观看视频| 68国产成人综合久久精品| 亚洲丝袜av一区| 国产又黄又粗又猛又爽的视频| 免费观看亚洲视频大全| 3d动漫精品啪啪一区二区竹菊| 国产又黄又猛视频| 厕沟全景美女厕沟精品| 精品久久久久久久久久久久| 中文精品无码中文字幕无码专区| 欧美尤物美女在线| 中文字幕第一区二区| 久久综合久久综合这里只有精品| 日批视频免费播放| 成人综合在线观看| 国产精品久久波多野结衣| 国产高清精品软件丝瓜软件| 国产一区欧美二区| 91免费看片网站| 国产露脸无套对白在线播放| 精品一区二区三区在线观看国产| 国产日韩在线播放| 国产一区二区波多野结衣| 久久99国产精品尤物| 国产精品一区二区三| 中文字幕一区二区三区四区免费看| 日韩精品成人一区二区在线| 国产精品久久久久久久天堂| 免费看av在线| 久久91精品久久久久久秒播| 成人a级免费视频| 国产人妻精品一区二区三| 国产一区二区三区在线观看精品| 成人www视频在线观看| 国产精品一级二级| 国产高清在线观看免费不卡| 国产区一区二区三区| 亚州精品国产精品乱码不99按摩| 2020国产成人综合网| 欧美久久久久久| 3p视频在线观看| 亚洲男人的天堂一区二区| www.69av| 筱崎爱全乳无删减在线观看| 91成人网在线| 日韩av影视大全| 激情亚洲另类图片区小说区| 亚洲欧洲国产一区| 一本在线免费视频| 在线观看国产精品入口| 欧美激情一区二区三区久久久 | 成人高清电影网站| 日韩在线视频二区| 久久中文字幕在线观看| 久久久精品午夜少妇| 成人乱色短篇合集| 欧美熟妇乱码在线一区| 国产女主播视频一区二区| 裸体裸乳免费看| 国产美女高潮在线观看| 精品视频一区二区不卡| 又大又长粗又爽又黄少妇视频| 亚州国产精品| 久久精品久久久久| 日本一级一片免费视频| 久久av资源网| 久久精品女人的天堂av| 色综合久久影院| 亚洲va欧美va人人爽午夜| www.日日操| 亚洲超碰在线观看| 中文字幕国产亚洲2019| 国产一级在线视频| 久久精品国内一区二区三区| 精品人伦一区二区三区| 久久77777| 色婷婷亚洲精品| xxxx国产视频| 日韩激情图片| 2019亚洲男人天堂| www.成人精品| 中文字幕一区av| 日韩中文字幕组| 国内精品麻豆美女在线播放视频 | 日本中文字幕中出在线| 欧美在线一二三| 999精品免费视频| 91精品在线观看国产| 国产精品香蕉国产| 国产精品久久久久一区二区国产| 亚洲国产成人av网| 天天干天天曰天天操| 日韩中文字幕高清在线观看| 日本亚洲欧美三级| 五月婷婷丁香花| 亚洲第一综合色| 国产又粗又猛又爽又黄| 欧美mv日韩| 国产精品青草久久久久福利99| 色鬼7777久久| 狠狠综合久久av一区二区小说| 亚洲少妇一区二区| 欧美一区二区三区久久精品| 成人淫片在线看| 久cao在线| 欧美久久久久久久久中文字幕| 中文字幕第20页| 久久免费高清| 日本视频一区二区不卡| 欧美艳星kaydenkross| 日韩精品在线视频| 青青草免费观看视频| 99久久精品免费看国产| 国产真人做爰毛片视频直播 | 青娱乐精品视频在线| 欧美日本韩国国产| 欧美日韩大片| 国产亚洲欧洲在线| 国产成人精品一区二区色戒| 国产欧美精品区一区二区三区| 日本新janpanese乱熟| 精品freesex老太交| 国产成人在线一区| 在线免费观看黄| 欧美久久久久久久久久| 可以直接看的黄色网址| 国产很黄免费观看久久| 日韩欧美国产综合在线| 日韩高清成人在线| 国产精品7m视频| av中文资源在线| 制服丝袜中文字幕一区| 久久久久久久久久久97| 99久久综合国产精品| 久草青青在线观看| 欧美裸体在线版观看完整版| 成人看片人aa| wwww在线观看免费视频| 亚洲精选在线观看| 成人黄色免费网| 亚洲三级小视频| 男男一级淫片免费播放| 性xx色xx综合久久久xx| 亚洲国产一区二区在线| 国产一区二区三区黄网站| 国内免费久久久久久久久久久| 欧美孕妇孕交xxⅹ孕妇交| 欧美日韩在线播放三区| 久久99久久98精品免观看软件| 91丨九色丨黑人外教| 日韩一区二区三区久久| 欧美体内she精视频在线观看| 久久久7777| 日本免费成人| 91av福利视频| 久久99精品久久久久久野外| 日韩高清不卡av| 中文字幕日韩经典| 亚洲国产一区视频| 五月天精品视频| 成人免费毛片a| 免费看污黄网站| 尤物在线精品| 亚洲三区在线| 奇米777国产一区国产二区| 91精品久久久久久久久中文字幕 | 狠狠躁夜夜躁久久躁别揉| 永久免费未视频| 91毛片在线观看| 三日本三级少妇三级99| 亚洲一区二区动漫| 伊人网在线免费| 久久97视频| 国产精品免费一区二区三区四区 | 一区二区国产精品| 黄色www在线观看| 国产毛片一区二区三区 | 亚洲国产精品久久人人爱潘金莲| 91福利在线导航| 日韩av片在线播放| 亚洲黄色小视频| 成人精品一二三区| wwwwww.欧美系列| 国产艳妇疯狂做爰视频| 国模娜娜一区二区三区| 欧美性猛交久久久乱大交小说 | 亚洲欧美日本伦理| 国产乱码精品一区二区三区中文 | 日本一区二区在线视频观看| 白白在线精品| 91免费版网站入口| 天堂久久一区| 国产美女被下药99| 亚洲www啪成人一区二区| 97精品在线视频| 日韩伦理电影网站| 欧美国产精品日韩| av在线免费观看网址| www.精品av.com| 成黄免费在线| 一级做a爰片久久毛片美女图片| 天堂av一区二区三区| 精品少妇一区二区三区视频免付费| 国产一区二区三区三州| 欧美日本国产视频| 亚洲综合五月天婷婷丁香| 欧美亚日韩国产aⅴ精品中极品| 亚洲自拍一区在线观看| 精品国产电影一区| 西西44rtwww国产精品| 天天色天天爱天天射综合| 精品一区免费观看| 亚洲福利视频三区| 国产精品第九页| 污片在线观看一区二区| 日本道在线观看| 天天色天天爱天天射综合| 超碰中文字幕在线| 日韩欧美有码在线| 中文字幕+乱码+中文乱码www | 精品人妻少妇嫩草av无码专区| 51精品国自产在线| 国产黄色av网站| 亚洲成人黄色网址| 午夜成人免费影院| 国产偷国产偷亚洲清高网站| 久蕉依人在线视频| 伊人久久久久久久久久| 欧美69xxxx| 九色精品美女在线| 岛国在线视频网站| 国产成人精品在线| 欧美xxxx性| 91视频免费进入| 狼人天天伊人久久| 日本一区二区三区www| 999精品在线| 4444亚洲人成无码网在线观看| 日韩网站在线| 中文字幕永久视频| 国产精品资源在线看| 中文字幕 日本| 国产日韩欧美不卡| caoporn91| 欧美日韩在线视频一区| 成人免费一区二区三区| 精品少妇一区二区三区免费观看| 天堂a中文在线| 日韩在线观看精品| www.色在线| 国产在线观看精品| 久久精品亚洲成在人线av网址| 日韩电影免费观看高清完整| 永久亚洲成a人片777777| 激情伊人五月天| 久久精品国产第一区二区三区| 国产伦理在线观看| 久久久久久久电影| 极品颜值美女露脸啪啪| 疯狂做受xxxx高潮欧美日本| 一级片视频免费| 亚洲国产天堂久久综合网| av黄色在线观看| 欧美国产中文字幕| 99久久综合国产精品二区| 国产欧美日韩综合一区在线观看| 日韩理论片av| 北条麻妃69av| 国产成人免费av在线| 色综合99久久久无码国产精品| 亚洲综合在线免费观看| 久草视频在线免费| 亚洲福利在线看| 久操视频在线播放| 国产精品你懂得| 欧美一性一交| 中文字幕在线中文| 老司机午夜精品99久久| 免费中文字幕av| 亚洲欧美成人一区二区三区| 中文字幕精品视频在线观看| 亚洲福利视频免费观看| 最新av在线播放| 国产三级精品网站| 色综合综合色| 国产91美女视频| 成人18视频在线播放| 欧美做爰爽爽爽爽爽爽| 欧美日韩精品一区二区天天拍小说| 四虎精品成人免费网站| 欧美疯狂性受xxxxx另类| 97精品资源在线观看| 日韩中文一区| 视频一区欧美日韩| 中文字幕5566| 精品国产999| 丝袜+亚洲+另类+欧美+变态| 久久久在线观看| 99re8这里有精品热视频免费 | 精品国产电影| 亚洲精品社区| 亚洲精品国产成人av在线| 亚洲精品视频在线| 国产99久久九九精品无码免费| 久久精品人人爽| 国产一区一区| 肉大捧一出免费观看网站在线播放| 精品一区二区在线观看| 一级片一级片一级片| 欧美欧美午夜aⅴ在线观看| 91精彩视频在线播放| 国产日本欧美一区二区三区| 色综合久久网| 免费网站在线观看黄| 一区二区在线免费观看| 亚洲精品第五页| 久久久久久美女| 亚洲免费福利一区| 91视频免费版污| 中文字幕欧美一区| 精品国产18久久久久久| 欧美日韩成人网| 黄色免费大全亚洲| 大陆极品少妇内射aaaaa| 久久奇米777| 在线观看免费视频a| 久久中文久久字幕| av日韩精品| 日日摸日日碰夜夜爽av| 国产视频一区在线观看 | 亚洲成人av资源网| 伊人久久国产| 伊人久久大香线蕉综合75| 国产一区二区视频在线播放| 久久久全国免费视频| 日韩电影中文字幕在线| 一区在线影院| 超薄肉色丝袜足j调教99| 91亚洲精品久久久蜜桃网站| 免费视频网站在线观看入口| 久久黄色av网站| 卡通动漫精品一区二区三区| 国产免费999| 亚洲精品日韩专区silk| 五月婷婷六月丁香| 国产欧美最新羞羞视频在线观看| 欧美日一区二区在线观看 | 农村少妇久久久久久久| 国产999精品| 亚欧美无遮挡hd高清在线视频| youjizz.com日本| 欧美在线一二三四区| 青草影视电视剧免费播放在线观看| 久久精品丝袜高跟鞋| 精品一区二区三区久久久| 久久久久亚洲AV| 国产一区二区三区在线| 超碰成人免费| 亚洲36d大奶网| 午夜激情久久久| 国产婷婷视频在线| 热re99久久精品国产99热| 国产成人高清在线| 成人一二三四区| 97视频在线观看视频免费视频 |