java - 音频管理器分割为比 Android 提供的更多级别

标签 java android audio

Android 为其声音系统提供了 15 个默认步骤,您可以通过音频管理器访问这些步骤。但是,我想要更好的控制。

这样做的一种方法似乎是更改 Android 系统中的特定文件,以比默认设置更进一步地划分声级。我想使用 Java 以编程方式实现相同的效果。

精细的音量控制是该应用能够将音量分为一百个不同间隔的一个示例。我如何实现这一目标?

最佳答案

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

要直接访问 PCM 数据,必须遍历音频读取缓冲区,将字节转换为 PCM,执行乘法,然后再转换回字节。但这为您提供了逐帧控制,因此可以实现非常平滑和快速的淡入淡出。

编辑:要在 Java 中执行此操作,请首先查看此 java tutorial link 开头的示例代码 fragment ,特别是带有评论的部分

// Here, do something useful with the audio data that's now in the audioBytes array...

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

关于java - 音频管理器分割为比 Android 提供的更多级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664369/

相关文章:

java - 确定 BMT 或 CMT

java - 如何在客户端 IP 地址更改时使 session 失效

java - 关于静态方法的问题

java - Playframework 2.x Apache Tika 问题

android - 在运行时更改 ListView 中的行项目字体

javascript - 无法更改音频源

android - 如何从android gradle文件中获取当前构建变体

java - getArguments() 返回 null

javascript - 使用 Cordova 和 JavaScript 从 android 麦克风获取音频数据(不使用 getUserMedia)

audio - 程序性声音生成算法?