九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Android錄音與播放

Android多媒體框架包含獲取和編碼多種音頻格式的支持,所以你可以輕松地把音頻合并到你的應(yīng)用中.如果設(shè)備支持,你可以使用MediaRecorder APIs 進(jìn)行錄音.

本章向你展示如何寫一個應(yīng)用從設(shè)備上的microphone獲取音頻,然后保存并回放.

注:Android模擬器不具有錄音的能力,但是真實(shí)的設(shè)備一般都具有此功能.


執(zhí)行音頻獲取

從設(shè)備獲取音頻比回放音頻或視頻要復(fù)雜一點(diǎn),但是也還算簡單:

  • 創(chuàng)建一個android.media.MediaRecorder的新實(shí)例.
  • 使用MediaRecorder.setAudioSource()設(shè)置音頻源,一般要使用MediaRecorder.AudioSource.MIC.
  • 使用MediaRecorder.setOutputFormat()設(shè)置輸出文件的格式.
  • 使用MediaRecorder.setOutputFile()設(shè)置輸出文件的名字.
  • 使用MediaRecorder.setAudioEncoder()設(shè)置音頻編碼.
  • 調(diào)用MediaRecorder 實(shí)例的MediaRecorder.prepare()
  • MediaRecorder.start()開始獲取音頻.
  • 調(diào)用MediaRecorder.stop().停止.
  • 當(dāng)你用完MediaRecorder實(shí)例后,調(diào)用MediaRecorder.release(),就會立即釋放資源.


示例:錄音并回放錄音

下面的例子演示了如何設(shè)置,開始以及停止音頻獲取,以及回放錄制的文件.


  1. /* 
  2.  * 如果輸出文件被寫入外部存儲, 
  3.  * 本應(yīng)用需要具有寫外部存儲的權(quán)限,  
  4.  * 還要具有錄音的權(quán)限.這些權(quán)限必須 
  5.  * 在AndroidManifest.xml 文件中聲明,像這樣: 
  6.  * 
  7.  * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
  8.  * <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
  9.  * 
  10.  */  
  11. package com.android.audiorecordtest;  
  12.   
  13. import android.app.Activity;  
  14. import android.widget.LinearLayout;  
  15. import android.os.Bundle;  
  16. import android.os.Environment;  
  17. import android.view.ViewGroup;  
  18. import android.widget.Button;  
  19. import android.view.View;  
  20. import android.view.View.OnClickListener;  
  21. import android.content.Context;  
  22. import android.util.Log;  
  23. import android.media.MediaRecorder;  
  24. import android.media.MediaPlayer;  
  25.   
  26. import java.io.IOException;  
  27.   
  28.   
  29. public class AudioRecordTest extends Activity  
  30. {  
  31.     private static final String LOG_TAG = "AudioRecordTest";  
  32.     private static String mFileName = null;  
  33.    //錄音按鈕  
  34.     private RecordButton mRecordButton = null;  
  35.     private MediaRecorder mRecorder = null;  
  36.    //回放按鈕  
  37.     private PlayButton   mPlayButton = null;  
  38.     private MediaPlayer   mPlayer = null;  
  39.   
  40.    //當(dāng)錄音按鈕被click時調(diào)用此方法,開始或停止錄音  
  41.     private void onRecord(boolean start) {  
  42.         if (start) {  
  43.             startRecording();  
  44.         } else {  
  45.             stopRecording();  
  46.         }  
  47.     }  
  48.   
  49.    //當(dāng)播放按鈕被click時調(diào)用此方法,開始或停止播放  
  50.     private void onPlay(boolean start) {  
  51.         if (start) {  
  52.             startPlaying();  
  53.         } else {  
  54.             stopPlaying();  
  55.         }  
  56.     }  
  57.   
  58.     private void startPlaying() {  
  59.         mPlayer = new MediaPlayer();  
  60.         try {  
  61.     //設(shè)置要播放的文件  
  62.             mPlayer.setDataSource(mFileName);  
  63.             mPlayer.prepare();  
  64.     //播放之  
  65.             mPlayer.start();  
  66.         } catch (IOException e) {  
  67.             Log.e(LOG_TAG, "prepare() failed");  
  68.         }  
  69.     }  
  70.   
  71.     //停止播放  
  72.     private void stopPlaying() {  
  73.         mPlayer.release();  
  74.         mPlayer = null;  
  75.     }  
  76.   
  77.     private void startRecording() {  
  78.         mRecorder = new MediaRecorder();  
  79.         //設(shè)置音源為Micphone  
  80.         mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
  81.         //設(shè)置封裝格式  
  82.         mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
  83.         mRecorder.setOutputFile(mFileName);  
  84.         //設(shè)置編碼格式  
  85.         mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
  86.   
  87.         try {  
  88.             mRecorder.prepare();  
  89.         } catch (IOException e) {  
  90.             Log.e(LOG_TAG, "prepare() failed");  
  91.         }  
  92.   
  93.         mRecorder.start();  
  94.     }  
  95.   
  96.     private void stopRecording() {  
  97.         mRecorder.stop();  
  98.         mRecorder.release();  
  99.         mRecorder = null;  
  100.     }  
  101.   
  102.     //定義錄音按鈕  
  103.     class RecordButton extends Button {  
  104.         boolean mStartRecording = true;  
  105.   
  106.         OnClickListener clicker = new OnClickListener() {  
  107.             public void onClick(View v) {  
  108.                 onRecord(mStartRecording);  
  109.                 if (mStartRecording) {  
  110.                     setText("Stop recording");  
  111.                 } else {  
  112.                     setText("Start recording");  
  113.                 }  
  114.                 mStartRecording = !mStartRecording;  
  115.             }  
  116.         };  
  117.   
  118.         public RecordButton(Context ctx) {  
  119.             super(ctx);  
  120.             setText("Start recording");  
  121.             setOnClickListener(clicker);  
  122.         }  
  123.     }  
  124.   
  125.     //定義播放按鈕  
  126.     class PlayButton extends Button {  
  127.         boolean mStartPlaying = true;  
  128.   
  129.         OnClickListener clicker = new OnClickListener() {  
  130.             public void onClick(View v) {  
  131.                 onPlay(mStartPlaying);  
  132.                 if (mStartPlaying) {  
  133.                     setText("Stop playing");  
  134.                 } else {  
  135.                     setText("Start playing");  
  136.                 }  
  137.                 mStartPlaying = !mStartPlaying;  
  138.             }  
  139.         };  
  140.   
  141.         public PlayButton(Context ctx) {  
  142.             super(ctx);  
  143.             setText("Start playing");  
  144.             setOnClickListener(clicker);  
  145.         }  
  146.     }  
  147.   
  148.     //構(gòu)造方法  
  149.     public AudioRecordTest() {  
  150.         mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();  
  151.         mFileName += "/audiorecordtest.3gp";  
  152.     }  
  153.   
  154.     @Override  
  155.     public void onCreate(Bundle icicle) {  
  156.         super.onCreate(icicle);  
  157.         //構(gòu)造界面  
  158.         LinearLayout ll = new LinearLayout(this);  
  159.         mRecordButton = new RecordButton(this);  
  160.         ll.addView(mRecordButton,  
  161.             new LinearLayout.LayoutParams(  
  162.                 ViewGroup.LayoutParams.WRAP_CONTENT,  
  163.                 ViewGroup.LayoutParams.WRAP_CONTENT,  
  164.                 0));  
  165.         mPlayButton = new PlayButton(this);  
  166.         ll.addView(mPlayButton,  
  167.             new LinearLayout.LayoutParams(  
  168.                 ViewGroup.LayoutParams.WRAP_CONTENT,  
  169.                 ViewGroup.LayoutParams.WRAP_CONTENT,  
  170.                 0));  
  171.         setContentView(ll);  
  172.     }  
  173.   
  174.     @Override  
  175.     public void onPause() {  
  176.         super.onPause();  
  177.         //Activity暫停時釋放錄音和播放對象  
  178.         if (mRecorder != null) {  
  179.             mRecorder.release();  
  180.             mRecorder = null;  
  181.         }  
  182.   
  183.         if (mPlayer != null) {  
  184.             mPlayer.release();  
  185.             mPlayer = null;  
  186.         }  
  187.     }  
  188. }  

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Anroid 視頻開發(fā)淺析
Android的視頻編碼H263MP4VH264
android語音錄制和壓縮
深入探討 Android 傳感器
媒體篇 第一章 音頻 | 不只是看客
Android
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服