【问题标题】:how to sync music volume with ring volume using AudioManager如何使用 AudioManager 将音乐音量与铃声音量同步
【发布时间】:2017-08-26 19:13:30
【问题描述】:

这是我的代码:

   if(setting.getBoolean("autoVolume",false))
     {       
         setVolume(c,AudioManager.STREAM_MUSIC,manager.getStreamVolume(AudioManager.STREAM_RING));  
         Log.e("max ring volume",manager.getStreamMaxVolume(AudioManager.STREAM_RING)+"");//result:7
         Log.e("max music volume",manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)+"");//result 15
     }

setVolume 函数:

     private void setVolume(Context c,int streamName,int volume){

     AudioManager manager =
             (AudioManager) c.getSystemService(Context.AUDIO_SERVICE);
     manager.setStreamVolume(streamName,volume,0);
 }

我想将音乐音量与铃声音量同步,但它不起作用,因为它们的范围不同(最大音乐音量为 15,最大铃声音量为 7!)

我想要一个简单的数学方法 谢谢

【问题讨论】:

    标签: android volume android-audiomanager


    【解决方案1】:

    如果您在[a,b] 范围内有数字x,并且您想将它们转换为y[c,d] 范围内的数字,您需要这样做:

    y = ((x−a) * (d−c) / (b−a)) + c
    

    在你的情况下:

    • x:响铃音量
    • [a,b]:0-7
    • [c,d]:0-15
    • y:音乐音量

    你得到:

    music_volume = ring_volume * (15 / 7) 
    

    【讨论】:

    • 谢谢,y有可能是浮点数吗?(浮点数会导致设置音量出错)
    • 然后,只需使用 Math.floorMath.ceil 或简单地将 y 转换为 int。但是在浮点数中进行计算!
    • 再次感谢,我可以用这个吗?:int i=maxMusicVol/maxRingVol;//2.5 // 设置音乐音量为 ringVolume*i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多