问题标签 [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 回答
1229 浏览

android - Android:播放更大尺寸的音频 wav 声音文件会导致崩溃

我正在尝试在我的Android 1.6 HTC 设备上使用以下代码(AudioTrack)播放更大尺寸的音频 wav 文件(>20 mb) ,该设备基本上具有较少的内存。但是我发现设备在执行读取、写入和播放时立即崩溃。但是相同的代码可以正常工作,并且可以很好地播放较小的音频 wav 文件(10kb、20kb 文件等)。PS:我应该播放 PCM(.wav) 缓冲声音,我在这里使用的原因。AudioTrack

虽然我的设备内存较小,但我如何逐字节读取更大的音频文件并播放声音以避免由于内存限制而崩溃。

有人可以指导我播放更大尺寸的 wav 文件的 AudioTrack 代码吗?

0 投票
2 回答
9096 浏览

java - How to tell when AudioTrack object has finished playing?

I'm trying to play a PCM file in Android using the AudioTrack class. I can get the file to play just fine, but I cannot reliably tell when playback has finished. AudioTrack.getPlayState says playback has stopped when it hasn't finished playing. I'm having the same problem with AudioTrack.setNotificationMarkerPosition, and I'm pretty sure my marker is set to the end of the file (although I'm not completely sure I'm doing it right). Likewise, playback continues when getPlaybackHeadPosition is at the end of the file and has stopped incrementing. Can anyone help?

0 投票
4 回答
9645 浏览

android - 当我第 22 次尝试生成音调时出现未初始化的 AudioTrack 异常

我有一个要求,我需要显示一个类似屏幕的拨号盘,并且每当用户按下拨号盘按钮时,我都必须生成 1khz 音调(不是 DTMF 音调)。

我已使用以下链接中的代码生成 1 khz 音调:

使用 Android 播放任意音调

当我开始在拨号盘屏幕上拨号按钮直到按下 21 时,它成功生成了音调,但在第 22 次尝试后,我收到应用程序无响应 (ANR) 错误,我需要关闭应用程序。

下面是我的代码:

每次按下拨号盘上的按钮时都会调用 onClick() 方法。

使用上面的代码,我在 Logcat 中得到了这个输出:

我正在打印“audioTrack”的状态,直到第 21 次我得到值 1(STATE_INITIALIZED),之后我得到值“0”(STATE_UNINITIALIZED)。不知道为什么状态正在改变。

请帮我做些什么来防止我的应用程序中出现这种关闭问题。或请建议是否有任何替代方法可以做到这一点。

0 投票
1 回答
5843 浏览

android - AudioTrack:如何检测声音的结束?

我正在使用AudioTrack在 Android 上播放 PCM WAV 声音文件(另请参见此处)。流模式,工作线程。我想知道如何检测声音的结束,以便我可以释放和释放AudioTrack. 该write()调用似乎是阻塞的——但它会阻塞直到所提供数据的播放完成吗?不太确定。

是我,还是这门课上的文档严重不足?如果你碰巧有一个不错的非官方指南的链接AudioTrack,我愿意看一个。

0 投票
1 回答
851 浏览

android - Android Audiotrack UI 在写入时冻结

我正在尝试连续播放声音,并且在流模式下创建了音轨。它可以工作,但是每次侦听器做出反应并将一批新数据写入缓冲区时,UI 都会冻结一小段时间。轨道与侦听器一起驻留在他们自己的线程中,并且线程设置为最低优先级。

我究竟做错了什么?

出于我的目的,我可能可以使用循环方法,但我想了解如何在不阻塞 UI 的情况下流式传输声音。

提前致谢。

0 投票
0 回答
320 浏览

android - android字节数组缓冲区和性能?

我想从外部位置(sdcard)加载 wav 文件并使用单个 AudioTrack(流模式)播放它们。

因为读取文件并用数据填充字节数组需要时间,所以我想为每个声音(onCreate 或其他东西)创建一个数组,然后在需要时将其输入 AudioTrack。

这会影响性能吗?这个数组是如何存储的,它会占用一些“实时”内存吗?

你知道另一种方法吗,或者我可以看的任何例子?

谢谢你的时间,希望你的回答

0 投票
2 回答
3483 浏览

android - SoundPool 错误:没有更多可用的轨道名称

我在使用 soundpool 类时遇到问题。它是这样的:

在我的游戏应用程序(顺便说一句音乐应用程序)中,我需要同时重现至少 32 个短声音,所以我这样声明我的音池:

之后,我加载了所有需要的 MP3 声音,大约 80 个声音,每个 55KB。我加载所有声音都没有问题,但速度很慢!好吧,这不是问题。真正的麻烦是当我同时播放大约 20 个声音时,我的日志中有一个错误:

之后,我尝试播放的每个声音都会引发相同的错误,并且无法播放任何声音。甚至没有另一个 Activity / soundpool 的声音。我不知道发生了什么或如何解决它!我应该更改声音文件的格式吗?播放声音后我应该释放内存还是什么?

(我在三星 Galaxy S I9000 上测试,2.3.3 OS 系统。应用程序是 2.1)

0 投票
4 回答
14607 浏览

android - AudioTrack 即使在停止后也会重新启动

我创建了一个简单的应用程序,它生成一个给定频率的方波,并在 STREAM 模式 (STREAM_MUSIC) 下使用 AudioTrack 播放它。一切似乎工作正常,声音播放正常,但是当流完成时,我在日志中收到消息:

W/AudioTrack(7579):获取缓冲区()轨道 0x14c228 已禁用,正在重新启动...

即使在调用 stop() 函数后,我仍然得到这些。我相信我根据 AudioTrack 所需的最小大小(在我的情况下为 6x1024)正确设置了 AudioTrack 缓冲区大小。我用较小的 1024 短裤缓冲区喂它。

我得到这些可以吗?我应该这样吗?

0 投票
1 回答
863 浏览

android - Android AudioTrack 对象不会播放安静的正弦信号(低于约 15 分贝)

我在使用 Android API AudioTrack 对象播放生成的正弦音频信号时遇到问题。一切正常,而正弦信号的幅度高于 40 左右(由于 16 位 PCM 格式,最大可能的幅度值为 36535),但是当我将幅度设置为低于 40 时,除非我改变音量级别,否则不会播放任何声音侧面上下按钮(无论我是向上还是向下改变它都没有关系)。

即使这样,声音也只出现一秒钟,然后又消失,应该持续 10 秒钟。我在 SGS 2 上遇到了这个问题。我怀疑这个问题是由于操作系统核心的一些限制,也许它认为这种低信号像噪声。

如果有人知道问题可能是什么并给我一些解决方法的指导,我将不胜感激。

0 投票
1 回答
3442 浏览

android - 在 Eclipse 上通过缓冲区使用 AudioTrack 缓冲区播放音乐 - 没有声音

我正在为 Android 2.1 编程。你能帮我解决以下问题吗?

我有三个文件,一般目的是通过缓冲区播放带有音轨缓冲区的声音。我在这里变得非常绝望,因为我尝试了所有方法,但我的扬声器仍然没有声音(而 android 的集成媒体播放器通过模拟器播放声音没有问题)。

源代码:

一个音频播放器类,它实现了音轨。它将接收一个缓冲区,其中包含声音。

一个模型类,我用它来填充缓冲区。通常,它会从文件中加载声音,但这里它只是使用模拟器(440Hz)进行调试。

缓冲区大小的选择非常宽松;通常第一个缓冲区大小应该是 6615,然后是 4410。同样,仅用于调试。

每 200 毫秒调用一次 model.ontimechange()的 timeTask 类。

调试向我展示了什么:

  • timeTask 工作正常,它完成了它的工作;
  • 缓冲区值看起来是连贯的,并且缓冲区大小大于 minBufSize;
  • Audiotrack 的播放状态为“正在播放”
  • 模型函数中没有异常。

任何想法将不胜感激!