Android为其音响系统提供默认的15个步骤,您可以通过音频管理器访问它。但是,我希望能有更好的控制。
这样做的一种方法似乎是改变Android系统中的特定文件,以便将声音级别进一步划分为默认值。我想以编程方式使用Java实现相同的效果。
精细音量控制是应用程序能够将声音级别划分为一百个不同间隔的示例。我如何实现这一目标?
答案 0 :(得分:1)
在Java中,获得非常精确的音量调节的一种方法是直接访问PCM数据并将其乘以某个因子,通常从0到1.另一种方法是尝试访问线路的音量控制,如果它有一个。我放弃了尝试做后者。精度在幅度方面是可以的,但时机非常糟糕。每个音频缓冲区读取只能有一个音量变化。
要直接访问PCM数据,必须遍历音频读取缓冲区,将字节转换为PCM,执行乘法,然后转换回字节。但这可以让你进行每帧控制,因此可以实现非常平滑和快速的渐变。
编辑:要在Java中执行此操作,请首先查看此java tutorial link开头的示例代码段,特别是带注释的部分
//在这里,对audioBytes数组中现在的音频数据做一些有用的事情...
有几个StackOverflow问题显示了使用Java将音频字节转换为PCM并返回的数学代码。不应该难以通过搜索来发现。
答案 1 :(得分:0)
参加派对的时间已经很晚了,但我现在也在尝试解决这个问题。如果您正在制作自己的媒体播放器应用程序并且正在运行MediaPlayer的实例,那么您可以使用函数setVolume(leftScalar,rightScalar),其中leftScalar和rightScalar是浮点数,范围为0.0到1.0。表示每个耳朵的对数刻度。
但是,这意味着您必须具有对当前活动的MediaPlayer实例的引用。如果你正在制作一个音乐应用程序,没有什么大不了的。如果您正在尝试运行允许用户在所有媒体输出上提供更高精度的后台服务,我不确定如何在该场景中使用它。
希望这会有所帮助。