乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      android語(yǔ)音錄制和壓縮

       mediatv 2016-07-23





      關(guān)閉
      2012-02-27 09:15 10413人閱讀 評(píng)論(13) 收藏 舉報(bào)
      分類:

      因?yàn)樯弦黄┛痛a有點(diǎn)太多,就單開(kāi)了,這兩天主要在看Android語(yǔ)音錄制和壓縮轉(zhuǎn)碼相關(guān)知識(shí),前端時(shí)間看見(jiàn)騰訊官方微博宣布,已經(jīng)開(kāi)放出即使聊天軟件正在等待審批,但這個(gè)直接影響電話運(yùn)營(yíng)商,能通過(guò)的可能性應(yīng)該不大,但我對(duì)這方面的技術(shù)很有興趣,所以就試試看。其中涉及到很多聲音方面的處理問(wèn)題,在android中有兩個(gè)類可以錄制語(yǔ)音:AudioRecord和MediaRecorder,MediaRecorder主要是錄制音頻并寫(xiě)入文件,而AudioRecord主要是錄制音頻流,錄制的音頻流為pcm格式,關(guān)于pcm格式可以自行搜索一下,在傳輸過(guò)程中可以轉(zhuǎn)換為amr格式,但沒(méi)有相關(guān)可以類庫(kù)有點(diǎn)麻煩,另外iphone不支持播放amr格式音頻,如果需要跨兩個(gè)平臺(tái)可以使用AAC,壓縮比也不錯(cuò),音質(zhì)也很好,我還沒(méi)有測(cè)試過(guò),網(wǎng)上評(píng)議而已。編碼方面大家都推薦speex,我看了一下,需要是用System.loadLibrary加載進(jìn)speex提供的類庫(kù)。下面記錄一下寫(xiě)的一個(gè)邊錄制邊播放的一段代碼吧

      1. package voice.hcent.com;  
      2.    
      3. import java.io.IOException;  
      4.    
      5. import android.app.Activity;  
      6. import android.os.Bundle;  
      7. import android.os.Looper;  
      8. import android.os.Process;  
      9. import android.util.Log;  
      10. import android.view.MotionEvent;  
      11. import android.view.View;  
      12. import android.widget.Button;  
      13. import android.widget.Toast;  
      14.    
      15. import android.media.AudioFormat;  
      16. import android.media.AudioManager;  
      17. import android.media.AudioRecord;  
      18. import android.media.AudioTrack;  
      19. import android.media.MediaRecorder;  
      20.    
      21. public class VoiceHcentActivity extends Activity {  
      22.    
      23.     static {  
      24.         System.loadLibrary("media_jni");  
      25.     }  
      26.    
      27.     public int frequency = 8000;  
      28.     private int rBufferSize, pBufferSize;  
      29.     private Button startSpeech;  
      30.     private AudioRecord recorder;  
      31.     private VoiceSpeech vspeech;  
      32.     private AudioTrack player;  
      33.     private boolean stopSpeech = false;  
      34.    
      35.     /** Called when the activity is first created. */  
      36.     @Override  
      37.     public void onCreate(Bundle savedInstanceState) {  
      38.         super.onCreate(savedInstanceState);  
      39.         setContentView(R.layout.main);  
      40.    
      41.         init();  
      42.    
      43.         test();  
      44.     }  
      45.    
      46.     public void init(){  
      47.         try{  
      48.             startSpeech = (Button)findViewById(R.id.StartSpeech);  
      49.    
      50.             //設(shè)置播放器緩沖區(qū)大小  
      51.             pBufferSize = AudioTrack.getMinBufferSize(frequency, AudioFormat.CHANNEL_CONFIGURATION_MONO,   
      52.                     AudioFormat.ENCODING_PCM_16BIT);  
      53.    
      54.             //獲取播放器對(duì)象  
      55.             player = new AudioTrack(AudioManager.STREAM_MUSIC, frequency,   
      56.                     AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,  
      57.                     pBufferSize, AudioTrack.MODE_STREAM);  
      58.    
      59.             //設(shè)置錄音緩沖區(qū)大小  
      60.             rBufferSize = AudioRecord.getMinBufferSize(frequency,   
      61.                     AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);  
      62.    
      63.             //獲取錄音機(jī)對(duì)象  
      64.             recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,   
      65.                     frequency, AudioFormat.CHANNEL_CONFIGURATION_MONO,   
      66.                     AudioFormat.ENCODING_PCM_16BIT, rBufferSize);  
      67.    
      68.         }catch (Exception e) {  
      69.             String msg = "ERROR init: "+e.getStackTrace();  
      70.             VoiceHcentActivity.this.toastMsg(msg);  
      71.         }  
      72.     }  
      73.    
      74.     /** 
      75.      * 開(kāi)始錄音 
      76.      */  
      77.     public void startRecord(){  
      78.         stopSpeech = false;  
      79.         vspeech = new VoiceSpeech();  
      80.         vspeech.start();  
      81.     }  
      82.    
      83.     /** 
      84.      * 結(jié)束錄音 
      85.      */  
      86.     public void stopRecord() {  
      87.         stopSpeech = true;  
      88.     }  
      89.    
      90.     /** 
      91.      * 開(kāi)始播放錄音 
      92.      */  
      93.     public void startPlay(){  
      94.    
      95.         //設(shè)置播放器音量  
      96.         player.setStereoVolume(0.7f, 0.7f);  
      97.    
      98.         player.play();  
      99.     }  
      100.    
      101.     /** 
      102.      * 結(jié)束播放錄音 
      103.      */  
      104.     public void stopPlay(){  
      105.         player.stop();  
      106.     }  
      107.    
      108.     public void test(){  
      109.    
      110.         startSpeech.setOnTouchListener(new View.OnTouchListener() {  
      111.    
      112.             public boolean onTouch(View arg0, MotionEvent arg1) {  
      113.    
      114.                 switch (arg1.getAction()) {  
      115.    
      116.                     case MotionEvent.ACTION_DOWN: //開(kāi)始說(shuō)話  
      117.                         startPlay();  
      118.                         startRecord();  
      119.    
      120.                         toastMsg("starting record!");  
      121.                         break;  
      122.    
      123.                     case MotionEvent.ACTION_UP: //停止說(shuō)話  
      124.                         Log.i("hcent""111");  
      125.                         stopPlay();  
      126.                         Log.i("hcent""222");  
      127.                         stopRecord();  
      128.                         toastMsg("stoped record!");  
      129.                         break;  
      130.    
      131.                     default:  
      132.                         break;  
      133.                 }  
      134.    
      135.                 return false;  
      136.             }  
      137.         });  
      138.    
      139.     }  
      140.    
      141.     public class VoiceSpeech extends Thread{  
      142.    
      143.         @Override  
      144.         public void run() {  
      145.             super.run();  
      146.             try {  
      147.                 byte[] tempBuffer, readBuffer = new byte[rBufferSize];  
      148.                 int bufResult = 0;  
      149.                 recorder.startRecording();  
      150.                 while(!stopSpeech){  
      151.                     bufResult = recorder.read(readBuffer, 0, rBufferSize);  
      152.                     if(bufResult>0 && bufResult%2==0){  
      153.                         tempBuffer = new byte[bufResult];  
      154.                         System.arraycopy(readBuffer, 0, tempBuffer, 0, rBufferSize);  
      155.                         player.write(tempBuffer, 0, tempBuffer.length);  
      156.                     }  
      157.                     Log.d("hcent""get read:"+bufResult+"___"+readBuffer.length);  
      158.                 }  
      159.                 recorder.stop();  
      160.                 Looper.prepare();  
      161.                 VoiceHcentActivity.this.toastMsg("AudioSpeech have ended!");  
      162.                 Looper.loop();    
      163.             } catch (Exception e) {  
      164.                 String msg = "ERROR AudioRecord: "+e.getStackTrace();  
      165.                 Looper.prepare();  
      166.                 VoiceHcentActivity.this.toastMsg(msg);  
      167.                 Looper.loop();  
      168.             }        
      169.         }  
      170.     }  
      171.     @Override  
      172.     protected void onDestroy(){  
      173.         player.release();  
      174.         recorder.release();  
      175.         super.onDestroy();  
      176.         Process.killProcess(Process.myPid());  
      177.     }  
      178.     public void toastMsg(String msg){  
      179.         Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();  
      180.         Log.e("hcent", msg);  
      181.     }    
      182. }  


      4
      0

      參考知識(shí)庫(kù)

      猜你在找
      查看評(píng)論
      13樓 我想我還有夢(mèng) 2015-04-22 10:45發(fā)表 [回復(fù)]
      現(xiàn)在這個(gè)還有人關(guān)注嗎 ,少類庫(kù),跑步起來(lái)。
      12樓 z0810 2014-07-14 09:53發(fā)表 [回復(fù)]
      最近也在研究這個(gè),求demo,QQ:1467581753 . 感謝。
      11樓 shengfakun1234 2014-06-10 21:51發(fā)表 [回復(fù)]
      media_jni這個(gè)類庫(kù)可以發(fā)一個(gè)嗎?1002168636@qq.com
      10樓 util_c 2014-06-10 21:44發(fā)表 [回復(fù)]
      發(fā)個(gè)DEMO給我行嗎?605858069@qq.com
      9樓 u011355656 2014-03-11 16:20發(fā)表 [回復(fù)]
      求“media_jni”內(nèi)庫(kù)感激不盡??!
      8樓 cool_wuli 2014-02-27 21:45發(fā)表 [回復(fù)]
      同求demo576660144@qq.com
      7樓 zyayy 2014-01-06 15:43發(fā)表 [回復(fù)]
      兄弟,android初學(xué)者 最近遇到音頻壓縮的問(wèn)題 能否發(fā)個(gè)demo學(xué)習(xí)下啊 450459217@qq.com
      6樓 yuanxiaodon 2013-12-10 16:46發(fā)表 [回復(fù)]
      求Demo1269396188@qq.com
      5樓 tangshengji 2013-11-18 15:17發(fā)表 [回復(fù)]
      朋友,把這個(gè)Demo發(fā)給我唄,謝謝了:
      393019384@qq.com
      4樓 parrzhang 2013-07-11 22:09發(fā)表 [回復(fù)]
      System.loadLibrary("media_jni");
      這個(gè)類庫(kù)是在哪里的
      3樓 gene 2013-04-18 17:32發(fā)表 [回復(fù)]
      朋友你好,你給我一個(gè)demo嘛
      genehang@163.com
      2樓 devin_sz 2013-02-02 17:47發(fā)表 [回復(fù)]
      兄弟,遇到了聲音壓縮的問(wèn)題,能否發(fā)個(gè)demo給我
      devin_sz@yeah.net
      1樓 buaakuan 2012-03-19 20:55發(fā)表 [回復(fù)]
      你好,我是android初學(xué)者,24行的"media_jni"是什么呢,這個(gè)在本地有默認(rèn)的嗎?需要編寫(xiě)它的代碼嗎?
      發(fā)表評(píng)論
      • 用 戶 名:
      • wangwangzq126
      • 評(píng)論內(nèi)容:
      • 插入代碼

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多