日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

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

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

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

SoundPool的play方法原型如下:

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

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

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

leftVolume * A

注意,實際的音量效果,是乘積關(guān)系。

下面是網(wǎng)上流傳的一段代碼,其中對音量的設(shè)置就存在一個容易忽略的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);

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

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

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

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

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

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

轉(zhuǎn)載于:https://www.cnblogs.com/hehehaha/p/6147407.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。