Java 音频管理器细分为比Android提供的级别更多的级别

Java 音频管理器细分为比Android提供的级别更多的级别,java,android,audio,Java,Android,Audio,Android为其音响系统提供了15个默认步骤,您可以通过音频管理器访问这些步骤。然而,我希望有更好的控制 这样做的一种方法似乎是改变安卓系统中的特定文件,以进一步划分声级,而不是默认值。我想用Java编程实现同样的效果 精细音量控制是应用程序能够将声级划分为100个不同间隔的一个例子。如何实现这一点?在Java中,获得非常精确的音量调整的一种方法是直接访问PCM数据并将其乘以某个因子,通常从0到1。另一种方法是尝试访问线路的音量控制(如果有)。我已经放弃做后者了。就振幅而言,精度还可以,但计时

Android为其音响系统提供了15个默认步骤,您可以通过音频管理器访问这些步骤。然而,我希望有更好的控制

这样做的一种方法似乎是改变安卓系统中的特定文件,以进一步划分声级,而不是默认值。我想用Java编程实现同样的效果


精细音量控制是应用程序能够将声级划分为100个不同间隔的一个例子。如何实现这一点?

在Java中,获得非常精确的音量调整的一种方法是直接访问PCM数据并将其乘以某个因子,通常从0到1。另一种方法是尝试访问线路的音量控制(如果有)。我已经放弃做后者了。就振幅而言,精度还可以,但计时却很糟糕。每个音频缓冲区读取只能有一次音量更改

要直接访问PCM数据,必须迭代音频读取缓冲区,将字节转换为PCM,执行乘法,然后转换回字节。但这给了你每帧的控制,所以非常平滑和快速的淡出可以

编辑:要在Java中执行此操作,请首先查看本文开头的示例代码段,特别是带有注释的部分

//在这里,对audioBytes数组中的音频数据执行一些有用的操作


有几个StackOverflow问题显示了使用Java将音频字节转换为PCM并返回的数学代码。通过搜索应该不难发现。

派对已经很晚了,但我目前也在努力解决这个问题。如果您正在制作自己的媒体播放器应用程序并正在运行的实例,则可以使用函数setVolume(leftScalar,rightScalar),其中leftScalar和rightScalar是0.0到1.0范围内的浮动。表示各ear的对数标度体积

但是,这意味着您必须具有对当前活动的MediaPlayer实例的引用。如果你正在制作一个音乐应用程序,没什么大不了的。如果您试图运行一个后台服务,允许用户对所有媒体输出提供更高的精度,我不知道如何在这种情况下使用它


希望这有帮助

现在还不清楚你想要实现什么。您正在编写播放音频的应用程序,还是正在尝试编写影响其他应用程序的音频设置应用程序?我正在编写影响所有其他应用程序的音频设置应用程序。您建议我查看哪些Android API来访问音频缓冲区,然后将其转换为PCM数据?谢谢我对安卓API还不太了解,所以不能推荐。我在对适当的Java解决方案的回复中添加了几个标志,因为您最初写道“我希望……在Java中实现相同的效果。”