SoundPool播放多个声音问题

demo_ 2011-10-31 03:29:32
SoundPool播放多个声音,其play方法返回值不为零,声音确没有。(一样的程序在一些屏上运行时声音完全正常,在另外的屏上却时好时坏,有些按键有声音,有些按键没有声音,且play方法的返回值都不为零,按照api上说的(non-zero streamID if successful, zero if failed )应该是完全正确呀),纠结,拜神!
...全文
686 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农兼养猪 2014-05-06
  • 打赏
  • 举报
回复
谢谢分享!
demo_ 2011-11-15
  • 打赏
  • 举报
回复
太粗心啦,该打!今天才发现soundItem.getLength()这里获取的长度是有问题的,文件大小和获取到的长度相差1,要命,最要命的就是在这种情况下有些会出现奇怪的现象,有些有声音,有些没有。
都说MediaPlayer比较耗资源,在一样的情况下(文件一致),只使用一个MediaPlayer的对象的reset(),prepare(),start()这些方法速度的慢也体验不出来。SoundPool和MediaPlayer都可以使用,且相对而言MediaPlayer要稳定些。


多谢两位朋友的帮忙,特别是念茜,真是太热心啦(咋办,多给分你吧,呵呵)。
CyberLogix 2011-11-01
  • 打赏
  • 举报
回复
说明你的程序还是有问题,潜在的问题在另外的机器上发生了,:-)
念茜 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chen515272204 的回复:]

代码:
我在此方法中加载声音
Java code

private boolean setSoundPool(HashMap<Integer, SoundItem> soundMap)
{
m_soundPool =
new SoundPool(soundMap.size(), AudioManager.STREAM_MUSI……
[/Quote]

这么看似乎没什么问题
念茜 2011-11-01
  • 打赏
  • 举报
回复
一样的程序在一些屏上运行时声音完全正常,在另外的屏上却时好时坏,这些屏的差异是什么
demo_ 2011-11-01
  • 打赏
  • 举报
回复
代码:
我在此方法中加载声音

private boolean setSoundPool(HashMap<Integer, SoundItem> soundMap)
{
m_soundPool =
new SoundPool(soundMap.size(), AudioManager.STREAM_MUSIC, 1);
Iterator<Integer> soundIdIte = soundMap.keySet().iterator();
while(soundIdIte.hasNext())
{
SoundItem soundItem = soundMap.get(soundIdIte.next());
// 判断按钮声音的类型和大小(大小不能超过0.5M)
if (soundItem.getType().toLowerCase().matches(".*(wav)||(mid)||(ogg)||(mp3)")
&& soundItem.getLength() < 1024*100)
{
m_soundID = m_soundPool.load(soundItem.getFileDescriptor(),
soundItem.getOffset(),
soundItem.getLength(), 1);
soundIdMap.put(soundItem.getId(), m_soundID);
}
}
return true;
}

在另外的Button播放声音

int successed = soundPool.play(
soundIdMap.get(mData.getSoundId()), 1, 1, 0, 0, 1);
Log.v("--id", ".." + soundIdMap.get(mData.getSoundId()));
Log.e("--successed", ".." + successed);

successed 的输出值一直在变且不为零,在一个屏上声音完全正常,在另外一个屏上却没有声音。
念茜 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chen515272204 的回复:]

这个屏上所有的按键,声音资源相同的情况下有些播放出声音,有些却没有。
我通过SoundPool的setOnLoadCompleteListener设置监听器,发送加载完成消息也没有办法使全部的声音出来。
[/Quote]

我想想怎么才能实验一下,你说的这种情况让我觉得不合乎常理啊,高亮一下帖子,看看有朋友分享经验么
demo_ 2011-11-01
  • 打赏
  • 举报
回复
这个屏上所有的按键,声音资源相同的情况下有些播放出声音,有些却没有。
我通过SoundPool的setOnLoadCompleteListener设置监听器,发送加载完成消息也没有办法使全部的声音出来。
念茜 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chen515272204 的回复:]

引用 2 楼 yiyaaixuexi 的回复:
一样的程序在一些屏上运行时声音完全正常,在另外的屏上却时好时坏,这些屏的差异是什么

屏都是国产屏,品牌不一样而已。我怀疑是屏的问题,但不确定,希望大家帮忙
[/Quote]
越说越像是屏的问题。
只要有一个屏可以正常播放声音,就不是程序的问题。
demo_ 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yiyaaixuexi 的回复:]
一样的程序在一些屏上运行时声音完全正常,在另外的屏上却时好时坏,这些屏的差异是什么
[/Quote]
屏都是国产屏,品牌不一样而已。我怀疑是屏的问题,但不确定,希望大家帮忙
demo_ 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oexpress 的回复:]
说明你的程序还是有问题,潜在的问题在另外的机器上发生了,:-)
[/Quote]
代码就这么几行 实在是不明白问题出在哪儿,你给几个可能出现问题的地方,我找找。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧