精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

久久亚洲精品网站| 在线观看日韩国产| 国产伦精品一区二区三区高清版 | 欧美高清性猛交| 喷水视频在线观看| 人人鲁人人莫人人爱精品| 国产精品久久久爽爽爽麻豆色哟哟| 91亚洲人电影| 黄色在线免费观看| 亚洲激情久久| 亚洲人成在线观| 先锋资源在线视频| 久九九久频精品短视频| 亚洲欧美日韩一区| 久久久久久久久久久久久9999| 一本到在线视频| 99re国产精品| 久久成人精品视频| 久久久久久久毛片| 国产主播性色av福利精品一区| 欧美在线影院一区二区| 霍思燕三级露全乳照| 成人精品一区二区三区免费| 国产91精品露脸国语对白| 国产精品99久久久久久白浆小说| 欧美日韩精品在线观看视频 | 91在线丨porny丨国产| 国产欧美精品在线| 久热这里只有精品6| 欧美三级午夜理伦三级中文幕| 夜夜嗨av一区二区三区免费区| youjizz.com日本| 亚洲人成777| 欧美性生活影院| 内射国产内射夫妻免费频道| 免费在线观看av电影| 国产精品黄色在线观看| 欧美重口乱码一区二区| 无码国产精品高潮久久99| 国产精品一区久久久久| 国产精品一区二区性色av| 亚洲免费在线视频观看| 1024成人| 久久久久亚洲精品| 少妇久久久久久被弄高潮| 欧美a级成人淫片免费看| 国产午夜精品一区二区三区| 野外性满足hd| 亚洲国产国产| 亚洲欧美成人一区二区在线电影| 91丨porny丨对白| 国产欧美啪啪| 亚洲精品97久久| 亚洲一区二区三区四区五区六区| 风间由美中文字幕在线看视频国产欧美| 日韩一区二区在线免费观看| 在线一区二区不卡| 国色天香久久精品国产一区| 欧美精品v国产精品v日韩精品| 天天干天天操天天玩| 日本成人一区二区| 欧美日韩在线三区| 亚洲欧美视频二区| 成人免费91| 欧美变态tickle挠乳网站| 美国黄色一级视频| 青青草这里只有精品| 精品一区二区电影| 国产三级短视频| 日韩欧美一区二区三区在线视频| 中文字幕亚洲一区二区三区| 最新黄色av网址| 亚洲最新色图| 午夜欧美大片免费观看| 无码人妻精品一区二区| 日本午夜精品一区二区三区电影| 国产日韩精品在线观看| av中文在线观看| av在线不卡网| 亚欧洲精品在线视频免费观看| 永久av在线| 一区二区三区高清| 亚洲欧洲日产国码无码久久99| 婷婷激情一区| 欧美一区国产二区| 亚洲色图14p| 日本女优一区| 欧美黑人巨大xxx极品| 五月婷婷亚洲综合| 精品一区二区三区影院在线午夜| 成人做爰66片免费看网站| 欧美一区二区少妇| 亚洲少妇最新在线视频| 国产极品在线视频| 四虎影视成人精品国库在线观看 | 小说区亚洲自拍另类图片专区| 欧美激情免费看| 无码人妻丰满熟妇精品区| 国产一区二区三区av电影| 国产精品一区二区在线观看| yjizz视频网站在线播放| 尤物视频一区二区| 欧美激情成人网| 久久久精品区| 国产亚洲精品va在线观看| 精品欧美一区二区久久久久| 丝袜美腿亚洲一区| 国产精品国产精品| 自拍视频在线网| 精品福利在线视频| 亚洲欧美日韩网站| 欧美亚洲高清| 91av在线国产| 丰满肉肉bbwwbbww| 中文字幕日本乱码精品影院| 黄色片视频在线免费观看| 伊人精品综合| 精品国产区一区二区三区在线观看| 丰满少妇乱子伦精品看片| 国产麻豆9l精品三级站| 日韩久久精品一区二区三区| heyzo高清中文字幕在线| 91麻豆精品国产自产在线观看一区 | 免费人成视频在线| 精品影院一区二区久久久| 欧美午夜精品久久久久免费视| 欧美人与牲禽动交com| 欧美日韩国产一区二区三区地区| 日韩人妻无码一区二区三区| 亚洲二区免费| 成人免费视频观看视频| 米奇777四色精品人人爽| 日本韩国精品在线| 成人网站免费观看| 99精品国产福利在线观看免费| 懂色av一区二区三区在线播放| 麻豆影视国产在线观看| 欧美色大人视频| 人妻视频一区二区| 青青草精品视频| 欧美一区二区三区四区夜夜大片| 免费h在线看| 亚洲精品成人免费| 奇米影视第四色777| 成人不卡免费av| 成人性免费视频| 卡通动漫精品一区二区三区| 久久久亚洲成人| 成人乱码一区二区三区| 亚洲无线码一区二区三区| 久久精品无码一区二区三区毛片| 国产精品99久久精品| 91精品国产自产在线| 色视频在线免费观看| 欧美久久久久久久久| 色www亚洲国产阿娇yao| 老司机午夜精品99久久| 亚洲精品乱码视频| 成人污污视频| 欧美精品久久久久a| 国产小视频免费观看| 亚洲国产美国国产综合一区二区| 精品一区二区三区四区五区六区| 亚洲高清在线| 欧美一区二区三区四区夜夜大片 | 亚洲自拍中文字幕| 日本孕妇大胆孕交无码| 亚洲成人网在线观看| 国产三级av片| 中文字幕在线观看不卡| 热久久久久久久久| 国产精品分类| 欧美lavv| 欧美高清影院| 国外成人在线视频| 国产精品99999| 欧美日韩高清一区二区不卡| 高h视频免费观看| eeuss国产一区二区三区| 国产精品99久久免费黑人人妻| 日本不卡高清| 国产精品一区二区三区免费| 亚洲美女久久精品| 日韩性生活视频| 国精品人妻无码一区二区三区喝尿 | 影音先锋欧美激情| 日本久久中文字幕| 1stkiss在线漫画| 亚洲精品国产suv| 亚洲最大成人av| 午夜激情一区二区三区| 国产精品久久久久久成人| 福利视频网站一区二区三区| 国产精品亚洲二区在线观看| 久久久久国产精品| 久久亚洲午夜电影| 高清不卡一区| 日韩免费观看在线观看| 亚洲淫性视频| 一色桃子一区二区| 蜜桃av中文字幕| 欧美日韩精品欧美日韩精品| 福利一区二区三区四区| 国产精品乱码一区二区三区软件| 超碰caoprom| 久久国产生活片100| 亚洲熟妇av日韩熟妇在线| 999久久久国产精品| 狼狼综合久久久久综合网| 欧美成年网站| 国产精品久久中文| 三妻四妾的电影电视剧在线观看| 久久成人一区二区| 国产69精品久久app免费版| 精品国产91亚洲一区二区三区婷婷 | 精品无码在线视频| 国产高清不卡一区| 污视频网站观看| 日韩影院精彩在线| 缅甸午夜性猛交xxxx| 欧美一区二区三区久久精品| 日韩wuma| 免费黄色成人| 精品欧美一区二区三区久久久| 亚洲日本免费电影| 国产精品视频男人的天堂| 在线看片福利| 98精品在线视频| 香蕉久久aⅴ一区二区三区| 色偷偷综合社区| 狠狠狠综合7777久夜色撩人 | 精品国产av色一区二区深夜久久| 国产一区二区剧情av在线| 超碰在线97免费| 久久久久久黄| 国产亚洲综合视频| 国产日韩欧美| 黄色一级视频片| 国产婷婷精品| 国内外成人免费激情视频| 激情久久久久久| 国产亚洲黄色片| 日韩视频精品在线观看| www.xxx麻豆| 激情综合电影网| 99在线免费视频观看| 亚洲激情视频| 欧美国产亚洲一区| 丝袜亚洲另类欧美综合| 日韩 欧美 高清| 日韩精品电影一区亚洲| 国产精品入口免费软件| 老司机亚洲精品| 日本a√在线观看| 理论电影国产精品| 日本黄色www| 成人国产亚洲欧美成人综合网| 美女伦理水蜜桃4| av资源网一区| 亚洲综合色一区| 国产精品视频九色porn| 久久成人小视频| 一区二区三区在线视频观看58| 久久黄色免费视频| 亚洲成人福利片| 一级成人黄色片| 欧美色男人天堂| 国产绿帽一区二区三区| 欧美sm美女调教| 日本成人一区| 色偷偷偷亚洲综合网另类| 国产在线高清视频| 91黄色8090| 99久久久国产精品免费调教网站| 成人欧美一区二区三区在线| 精品午夜av| 精品在线观看一区二区| 国产欧美一区| 99久re热视频精品98| 日韩午夜av| 九九热在线免费| 国产成人av自拍| 无码国产69精品久久久久同性| 国产精品欧美极品| 久久中文字幕在线观看| 91激情五月电影| a在线观看免费| 亚洲摸下面视频| gogo在线高清视频| 国产v综合ⅴ日韩v欧美大片| 国产精品成人**免费视频| 久久日韩精品| 亚洲精品99| 欧美国产日韩在线播放| 懂色av中文一区二区三区 | 少妇高潮久久久| 日韩视频在线免费观看| 精品丝袜在线| 91免费版网站入口| 一本久久青青| 国产精品国三级国产av| 琪琪一区二区三区| 国产 xxxx| 亚洲免费色视频| 国产免费www| 日韩av中文字幕在线播放| 男人天堂久久久| 国产成人涩涩涩视频在线观看| 亚洲经典视频| 一区二区三区我不卡| 久久精品二区三区| 中国一级特黄录像播放| 日韩美女啊v在线免费观看| av片免费观看| 亚洲国产日韩精品在线| 成年人黄视频在线观看| 国产精品久久婷婷六月丁香| 日韩av不卡一区| 农民人伦一区二区三区| 国产一区二区免费看| 九九热久久免费视频| 日本高清无吗v一区| 熟妇人妻系列aⅴ无码专区友真希| 久久精品视频在线观看| 全球最大av网站久久| 欧美一区1区三区3区公司| 亚洲理论在线| 欧美激情 亚洲| 亚洲国产精品天堂| 亚洲AV无码国产精品午夜字幕| 久久韩剧网电视剧| 成人国产精品| 亚洲春色在线视频| 免费欧美在线视频| 精品无人区无码乱码毛片国产 | 国产日本一区二区| www.中文字幕在线观看| 亚洲国产精品99久久| 欧洲性视频在线播放| 国产高清在线精品一区二区三区| 中文字幕乱码亚洲无线精品一区| 在线能看的av网站| 亚洲欧美综合在线精品| 国产一区二区麻豆| 久久久精品国产| 我要色综合中文字幕| 日本高清视频免费在线观看| 国产精品白丝jk黑袜喷水| 五月天婷婷色综合| 日韩欧美www| 国产黄色大片在线观看| 国产区二精品视| 久久久亚洲人| 国产视频三区四区| 欧美男人的天堂一二区| 超碰电影在线播放| 风间由美一区二区三区| 日韩天天综合| xxxx日本黄色| 欧美精品乱码久久久久久按摩| 黄色网址在线免费| http;//www.99re视频| 精品91在线| 公侵犯人妻一区二区三区| 欧美午夜在线观看| 国产激情视频在线| 国产日韩精品一区观看| 亚洲影音一区| 91大神福利视频| 欧美成人高清电影在线| 国产剧情av在线播放| 国产欧美一区二区三区网站| 日韩精品视频免费看| 亚洲欧美一区二区激情| 久久不卡日韩美女| 香蕉视频免费版| 99久久精品99国产精品| 日本黄色中文字幕| 美女扒开尿口让男人操亚洲视频网站| 成人av动漫| 少妇性l交大片| 一区二区高清免费观看影视大全| 欧美 日韩 人妻 高清 中文| 国产福利视频一区二区| 偷偷www综合久久久久久久| 少妇欧美激情一区二区三区| 色综合一个色综合| 免费观看成人高潮| 精品国产一区二区三区免费| 男女性色大片免费观看一区二区| 国产亚洲成人av| 国产亚洲美女久久| 999精品视频在这里| 91av在线免费播放| 亚洲中国最大av网站| 国产精品99999| 精品欧美日韩| 狠狠久久亚洲欧美| 人人爽人人爽人人片av| 精品久久久av|