日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android SoundPool.play方法的音量与系统音量的关系

發布時間:2025/3/19 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android SoundPool.play方法的音量与系统音量的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android中播放音頻,除了使用MediaPlayer,還可以使用SoundPool。SoundPool使用音效池的概念來管理多個短促的音效,對于需要短促的提示音的場景特別合適。

通常調用SoundPool.load來加載某個音頻文件,獲得一個音效id,然后就可以用play方法來播放。

SoundPool的play方法原型如下:

int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);

play方法第二、三個參數用于指定左右聲道的音量,取值范圍是0.0~1.0。這里要說的就是這個音量值與系統音量的關系。

比如你使用AudioManager.STREAM_MUSIC或者AudioManager.STREAM_VOICE_CALL來播放提示音,此時的媒體音量或通話音量為 A (AudioManager.getStreamVolume(AudioManager.STREAM_MUSIC),那使用SoundPool.play方法播放音效時,實際的音量大小,就相當于:

leftVolume * A

注意,實際的音量效果,是乘積關系

下面是網上流傳的一段代碼,其中對音量的設置就存在一個容易忽略的Bug:

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); int currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC); int maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); float volume = ((float)currentVolume)/maxVolume; ... mSoundPool.play(soundID, volume, volume, 1, -1, 1);

上面的代碼根據當前媒體音量和媒體音量的最大值,計算出一個比值傳遞給play方法,作為左右聲道的音量,這樣的結果是縮小了實際音量!尤其是(Bug),你在播放開始前將媒體音量調整為0,開始播放后,你將聽不到聲音!此時你再通過音量鍵調整音量,也聽不到聲音!(我今天剛解了一個類似的Bug)

所以,如果想按照用戶設置的音量來播放音效,正確的做法是:

mSoundPool.play(soundID, 1, 1, 1, -1, 1);

而如果想按系統設置音量的一半來播放音效,則可以用類似下面的代碼:

mSoundPool.play(soundID, 0.5f, 0.5f, 1, -1, 1);

Android開發文檔沒有SoundPool.play的音量參數做詳盡的說明,不過我們自己需要注意哦,否則就容易出現問題。

轉載于:https://www.cnblogs.com/hehehaha/p/6147407.html

總結

以上是生活随笔為你收集整理的Android SoundPool.play方法的音量与系统音量的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。