问题标签 [audiotrack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5246 浏览

android - 使用 Android 的 AudioTrack 来组合声音样本的字节会产生噪音

我正在构建一个相当简单的 Android 应用程序(sdk 修订版 14:ICS),它允许用户一次选择两个音频剪辑(都是 RIFF/WAV 格式、小端序、签名 PCM-16 位编码)并将它们组合起来创造新声音的各种方法。我用于这种组合的最基本方法如下:

然后可以通过 AudioTrack 类播放返回的字节数组:

使用上面的代码组合和播放的结果接近我想要的(在混合后的声音中仍然可以辨别两个样本),但也有很多裂纹、爆裂声和其他噪音。

那么,三个问题:首先,我是否正确使用了 AudioTrack?其次,AudioTrack 配置中的字节序在哪里考虑?声音本身播放良好,听起来几乎就像我在组合时所期望的那样,因此 RIFF/WAV 格式的小端特性似乎在某个地方传达,但我不确定在哪里。最后,对于有符号的 16 位 PCM 编码,我应该期望看到的字节值范围是多少?我希望从上面的 Log.d(...) 调用中看到 logcat 中的值范围从 -32768 到 32767,但结果往往在 -100 到 100 的范围内(除此之外还有一些异常值)。超过 16 位范围的组合字节值是否可以解释噪声?

谢谢,CCJ

更新:主要感谢 Bjorne Roche 和 William the Coderer!我现在将音频数据读入 short[] 结构,DataInputStream 的字节序是使用 William 的 EndianInputStream (http://stackoverflow.com/questions/8028094/java-datainputstream-replacement-for-endianness) 和组合方法已更改为:

具有这些改进的混合音频输出质量非常棒!

0 投票
2 回答
12298 浏览

android - Android : 如何使用 OpenSL ES 更改音乐的播放速率

我正在开发一个音乐播放器,我需要在不改变音高的情况下改变节奏(音乐的播放速度)。

我找不到任何本机 android 类来这样做。我尝试了 SoundPool,但它不适用于大型音乐文件,而且它似乎也不适用于许多设备。我也尝试了 AudioTrack,但还是没有运气。

现在我正在尝试使用 OpenSL ES 处理音乐的 android NDK 音频示例。现在我只想在此示例中添加设置播放速率功能。

谁能告诉我如何在其中添加更改播放速率功能?

0 投票
1 回答
351 浏览

android - 播放一系列声音会导致强制关闭

我正在创建一个应用程序,当您按下屏幕上的一系列按钮时播放音符。还有一个按钮可以在按下时播放一系列音符(最多 10 个音符)。该应用程序起初运行良好。但是,如果您要播放一系列音符并且连续按下播放按钮几次,则应用程序最终将强制关闭。任何帮助将不胜感激。

我相信这就是所有相关的代码。如果您需要其他信息/代码,请告诉我。

0 投票
2 回答
51725 浏览

android - 在 Android 中使用 OpenSL ES 而不是 AudioTrack 的原因是什么?

目前我正在使用 AudioTrack 将来自本机层的音频数据传递给它来播放。

看来我可以在本机层使用 OpenSL ES 而不是 Java 中的 AudioTrack。与 AudioTrack 相比,OpenSL ES 提供的假定优势是什么?

0 投票
2 回答
6449 浏览

android - Android : 使用 ffmpeg 播放带有 AudioTrack 的 MP3 文件

我已经在我的项目中集成了 ffmpeg lib,我还可以获取媒体文件的信息。但现在我必须使用 ffmpeg lib 在 android 中使用 AudioTrack 类播放 mp3 文件。

为此,我必须将字节缓冲区传递给 AudioTrack,但我不知道如何从 ffmpeg 获取字节缓冲区并将其与 AudioTrack 一起使用。我也想立即播放文件而不会延迟。

这是我在 java 中的音轨代码:

谁能给我工作代码来播放带有音轨的mp3文件。我搜索了很多,但没有找到任何正确的答案。

0 投票
0 回答
318 浏览

android - 我需要记录和循环声音池输出

intertubes 并没有提供太多关于此的信息。我有一个标准的声音池来播放各种样本。低延迟是必不可少的(对于任何提出不同方式的人来说)

我怎样才能开始录制声音池播放的内容,以便循环播放?

看来这可能是不可能的(根据Android:Recording SoundPool output),所以我会接受任何具有相同效果但低延迟是必须的答案。将同时播放多个流。

有什么建议么?

0 投票
3 回答
19710 浏览

android - 如何使用 ffmpeg 更改音频速度和音高个性?

我已经设法在我的 android 项目中使用 ffmpeg 和 AudioTrack 类播放音频文件。我可以使用 AudioTrack 类的 setRate 方法更改音频的速度。但它也会改变音频的音高,我只想改变音频的速度,但我在网上找不到解决方案。

任何人都可以请帮助我,因为没有对此的支持。

0 投票
2 回答
26721 浏览

android - PCM Raw Bytes [] 到 Android 上的音频

我目前有一个字节数组形式的 PCM 音频。格式是有符号的 16 位小端。我想将其转换为 Android 上的一些可播放格式,最好是 3.2 或更高版本。有人对如何做到这一点有建议吗?我做了一些研究并尝试了以下方法,但没有一个成功。如果有人能提出更好的方法或指出我哪里出错了,将不胜感激。

我尝试使用正确的音频设置创建 AudioFormat,但是 Android 不支持 javax.sound.sampled 库。

我也尝试将 PCM 数据写入波形文件,但在获取所有必要的 wav 标头信息时遇到了麻烦。

我还尝试使用 Android 提供的 AudioTrack 类来播放 PCM 数据。然而,我似乎听不到任何声音。这是我的方法:

任何建议,将不胜感激。

0 投票
2 回答
10897 浏览

android - AudioTrack:在未初始化的 AudioTrack 上调用 play()

我正在尝试使用 AudioTrack 类。基本上,当用户触摸屏幕上的特定对象时,我的应用程序必须产生声音。我已将此示例用作指南。
我的应用程序似乎可以正常工作,但通常在触摸屏幕大约一分钟后它会崩溃:

生成声音的类中的方法

这是我的线程使用的自定义视图中的一种方法

任何想法为什么会发生这种情况?

0 投票
4 回答
5582 浏览

android - 适用于 Android 的 3D 音频库

我在互联网上到处寻找解决方案,但似乎找不到明确的答案。

基本上,我希望在 android 平台上实现 3D 音频环境。我正在寻找的是一个 android 库,它能够使用坐标系之类的东西将声音放置在虚拟空间中。

我知道 iOS 有 OpenAL,但是否有 Android 等价物?我也知道这个AudioTrack类的存在,但我正在寻找一些不那么原始的东西。

提前致谢。