问题标签 [soundpool]

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 投票
4 回答
3015 浏览

android - 为什么我的 SoundPool 声音第一次在 Android 上没有播放?

我在 Android 上播放 Ogg Vorbis 声音时遇到了一个奇怪的问题,我很难纠正。我正在使用 SoundPool 类来播放声音。除了暂停后播放的第一个声音外,它的效果很好。

这是我遇到的问题:我有一个菜单,上面有几个按钮。如果我按下按钮,我会播放滴答声。但是,我第一次尝试播放时,它不会发出声音。然后,如果我再次点击相同的菜单按钮,它就会起作用。如果我随后将下一次按下延迟几秒钟,则问题会再次出现。具体来说,我看到以下行为:

  • 等待几秒钟
  • 触摸应该发出声音的 UI 按钮......它没有
  • 日志猫报告“AudioFlinger:写入阻塞 165 毫秒,66 次延迟写入,线程 0xec40”(当我触摸 UI 按钮时立即发生)
  • 等待几秒钟
  • 日志猫报告“AudioHardwareQSD:AudioHardware pcm 播放将进入待机状态”
  • 触摸应该发出声音的 UI 按钮......它没有。
  • logcat 报告“AudioFlinger:写入阻塞 166 毫秒,67 延迟写入,线程 0xec40”(当我触摸 UI 按钮时立即发生)
  • 再次触摸 UI 按钮,但AudioHardwareQSD 待机消息出现之前...声音工作!

我在几个不同的设备上看到了这种行为:HTC Incredible、rooted Nook Color 和 HTC Thunderbolt,所以我不相信它是特定于设备的。

我猜这是 AudioHardwareQSD 进入待机状态的功能。一旦它处于待机状态,从滑槽发出的第一个声音就会被忽略,而随后的声音会继续工作,直到它再次进入待机状态。我的 HTC Incredible 上的“写被阻止”消息和 AudioHardwareQSD 消息之间大约有 3 秒的延迟。

这里有一个关于 StackOverflow 的答案,讨论了使用 WakeLock 来防止这种情况发生。我尝试了该解决方案,但并没有解决我的问题。

为什么会这样?有没有办法防止 AudioHardwareQSD 进入待机状态?有人对解决此问题有任何提示吗?

谢谢!

更新:我已经能够实施一个相当粗糙的解决方法来纠正这个问题。在我的应用程序(游戏)中,我有一个更健全的渲染类。我添加了一个由游戏逻辑定期执行的新方法 present()。该方法使用 1.5s 超时计时器。当计时器触底时,声音渲染器会播放一个包含 50 毫秒静音的音频文件,然后重置计时器。

这已经纠正了我的问题......远非最佳,但它有效。

0 投票
1 回答
608 浏览

android - Android - 加载声音文件需要很长时间

我的应用程序过去需要几秒钟才能加载。现在我添加了声音,加载需要 15 秒。我正在加载 40 个 ogg 文件,每个文件大小约为 15KB。这是加载代码:

有没有办法优化这个?

0 投票
0 回答
1265 浏览

android - 如何传递 Broadcastreceiver 上下文?

我正在开发一个应用程序,它将在接收特定短信时播放指定的声音/歌曲(具有特定内容的短信说“测试”)。因此,如果用户手机接收到内容为“test”的消息,则必须播放声音。因此,我使用了Broadcastreceiver在接收 SMS 时激活并检查特定所需内容的 a。如果条件为真,我已经使用Soundpooland来播放声音。AudioManager

但是,不知何故,代码对我不起作用。如果可能的话,请看一下并纠正我。我想,我使用了错误的上下文或类似的......

SoundManager.java:

广播接收器文件 - SMSReceiver.java

所以,我把我认为我做错的地方标记在SMSReceiver.java. 我尝试用getBaseContext() 替换上下文,getApplicationContext()甚至用this. 但是,没有一个工作得很好。使用“上下文”不会导致应用程序崩溃,甚至连声音都不会播放。所以,我认为我需要使用不同的上下文。

如果您需要任何详细信息,请告诉我。

0 投票
3 回答
2795 浏览

android - 在 Android 上使用 SoundPool 无缝循环?

我正在尝试使用 SoundPool 类循环短 (20kb)、无间隙的 ogg 文件,并且在硬件测试时无法获得一致的结果。它总是使用模拟器完美播放,但是当我在 Nexus 1 或 Samsumg Galaxy Tab 10.1 上进行测试时,每个循环点都会听到爆裂声或咔嗒声。非常奇怪的是,虽然应用程序启动后保持一致,但每次我重新启动应用程序时点击次数略有不同,并且在极少数情况下(在平板电脑上更频繁)循环播放正确。

使用 MediaPlayer 的结果也好不到哪里去。期望在 android 上无缝播放音频循环是不合理的吗?肯定有人有类似的功能正常工作吗?如果是这样,我很想看看它是如何工作的一个例子。

谢谢!

0 投票
0 回答
247 浏览

loops - SoundPool (SDK 4.0.x) int 循环,任何非零值都会导致崩溃

我想知道是否有人可以提供帮助。我在用着

Android 4.0.x 开发包

Win 7 64位平台

使用 http://www.droidnova.com/creating-sound-effects-in-android-part-1,570.html中提供的代码

测试网页上提供的 SoundPool 示例以及我自己使用 SoundPool 进行的测试

我正在使用 Eclipse 版本:Indigo Service Release 1 Build id:20110916-0149

这就是问题

当你调用

SoundPool .play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

当 'int loop' 为 0(零)时,一切正常,声音完美播放一次。

但是, int 循环的任何其他值都会出现此错误

Sound.Test.namespace AudioFlinger 无法创建音轨,状态:-12

Sound.Test.namespace 创建音轨时出错

这发生在模拟器和我的手机三星银河 Nexus

我正在播放一个小音频剪辑,它是 ogg 文件格式,140K 长

我使用过所有类型的文件格式,wav、mp3 和我使用的任何文件格式都是一样的,所以它不是音频文件。我需要无限期地循环一个小的声音文件,但是,将 int loop 设置为 -1(或任何 otehr 值)会导致崩溃。

这让我发疯了,因为我已经花了一天半的时间..

有谁知道发生了什么?

非常感谢,

0 投票
1 回答
2300 浏览

android - Android 停止跨多个活动的 SoundPool 循环。或在换页时停止所有播放声音

我现在只用 Android 和 Java 编程了几个星期,试图制作一个吉他调音器来为你的吉他调音。一个简单的参考调谐器。我已经使用了这个网站的大部分代码来构建它。

当我单击另一个页面/活动时,如何使 SoundPool 停止。

目前我有两个页面,每个页面有 7 个声音按钮。当您单击任何按钮时,它会无限循环,直到您单击另一个按钮,然后循环等等......如果我单击下一页的按钮,然后单击一个新按钮,最后一页的声音仍在播放!当您尝试用耳朵为吉他调音时,这很烦人!

也许只是一个简单的停止按钮来停止整个 SoundPool 是个好主意?

这是我的 SoundManager 代码包 org.gtdb.guitar_tuners;

这是我的活动代码 Main.java 包 org.gtdb.guitar_tuners;

为代码道歉,我可能会认为这是一团糟,因为我基本上是 Java 和 Android 的新手。我一直在拼凑其他人的代码和观看 lynda.com 的视频。

我的调谐器的当前版本在市场上,但它没有声音循环,因此您可以浏览页面并收听。但是如果没有循环,你必须一直按下按钮来调整你的吉他!你可以在这里看到

0 投票
1 回答
2685 浏览

java - Android:在SoundPool中无限播放声音停止后第二次不播放

我正在尝试通过SoundPool.

以下测试代码使第二次播放没有声音。仅当我在 HTC Hero 设备和模拟器上无限播放声音时才会出现这种情况。我正在使用安卓 1.6。

0 投票
4 回答
1955 浏览

android - 在 Android 上将循环设置为 -1 时不播放声音

我正在使用 SoundPool 为我的 Android 应用程序播放声音。所有声音都在应用程序开始时加载,以防止应用程序本身出现任何滞后。只要未设置为循环播放,所有声音都可以正常播放。当我将循环设置为真(设置为-1)时,声音不会播放。

根据用户的输入,有 6 种不同的声音会停止和启动。它播放第一个声音很好,但随后的声音无法播放。

我已经尝试了各种方法,例如暂停而不是停止,将音量设置为 0 并将循环设置为 0 而不是暂停,将循环设置为任意大的数字而不是真正的重复,使声音更短,并且没有这些已经工作了。

我的代码如下:

LogCat 在运行时给出的错误是:

有人知道这个烦人的问题的任何解决方案,或者我没有尝试过的任何解决方法吗?

0 投票
1 回答
1389 浏览

android - Android 设备上的并发声音

我一直在为我的手机开发简单的鼓垫,并且在一次播放两种声音时遇到了障碍(即在用户同时按下两个或更多鼓声的多点触控事件期间)。

为了播放声音,我一直在使用 SoundPool 类。我有一个 HashMap 将一个点散列到一个声音。所以我的想法是,当一个点被按下时,它会播放相应的声音。

我有一种感觉,一次播放两个声音涉及分叉或创建新线程,但它并没有像我尝试的那样工作,这只是在“for each”循环中为每个按下的点创建一个新线程。

提前致谢!-阿尼姆

编辑:

公共布尔 onTouchEvent(MotionEvent ev){

0 投票
1 回答
737 浏览

android - 背景音乐长度和速度

对于我的 Android 应用,我想要背景音乐。它不必跨越活动,因此服务无关紧要。

Soundpool 似乎在大约 6 秒后停止播放 .ogg 或 .mp3 MediaPlayer 无法更改音乐的速度(速率)

我想做的是允许用户在播放背景音乐时改变它的速度。SoundPool 似乎可以做到这一点,但很难说,因为它只播放几秒钟。

关于如何做到这一点的任何建议?