android audiotrack权限,Android中AudioRecord和AudioTrack的使用注意
AudioRecord需要至少
這項錄音權限。有時候在AndroidManifest.xml中加進去后,有些手機系統仍然沒有授予該權限。需要到手機的設置中的權限管理,把這項權限打開。沒權限就會閃退。如果錄下來的數據要保存到文件,就需要額外的對SD卡的讀寫操作權限。
AudioTrack的MOME_STREAM模式是先調用play,然后write進去數據就會播放。這時候創建對象時候傳入的緩沖區可以使用getMinBufferSize的返回值。
如果使用MODE_STATIC模式,一開始總是不成功,后來在stack overflow看到一篇帖子,關鍵在于這時候緩沖區的大小要一次性在創建對象的時候傳進去。比如你要播放5秒的數據,就必須創建一個容納5秒數據的緩沖區,然后在new AudioTrack的時候把這個緩沖區大小傳進去,而不能使用getMinBufferSize返回的大小。getMinBufferSize返回的大小應該比較小,所以可能就響一下就沒了,或者根本聽不到。MODE_STATIC模式和MODE_STREAM模式不同的是,要先write所有數據進去,然后再調用play播放。
另外,play不是阻塞到音頻播放完成后才返回,而是啟動播放后,該函數立刻返回,所以不能在play后馬上調用stop.這樣就只播放了一點點聲音。要調用檢測到
audioTrack.getPlayState() 返回 AudioTrack.PLAYSTATE_STOPPED
才能調用stop停止播放。這點也折騰了不少時間。
似乎要立刻停止播放可以先flush沖掉所有數據,這樣馬上靜音,然后再stop,再release
好像還有說法audiorecord要把值置為null,讓系統釋放資源。不確定,如果發現其他應用無法獲取麥克風了,可以試試置null,強制回收試試。
總結
以上是生活随笔為你收集整理的android audiotrack权限,Android中AudioRecord和AudioTrack的使用注意的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消除类游戏ccf c语言,ccf试题 消
- 下一篇: android studio .so混淆