Articles of soundpool

Android L SoundPool.load()回归

在Android L上 – 最新的开发者预览版(Nexus 5),SoundPool.load()方法似乎有一个回归,加载样本( 5秒,其中样本加载到pre-L系统上立即使用相同的代码。 我尝试了OGG或MP3,两者都有相同的结果。 尝试了不同的尺寸但都低于100kb。 似乎40kb或80kb没有任何区别,OGG或MP3也是如此。 加载总是大约5s延迟。 这似乎是在4.3中打破循环后SoundPool中的另一个回归。 这个问题很容易重现: pool = new SoundPool(6, AudioManager.STREAM_MUSIC, 0); // use a listener to start playback after load pool.setOnLoadCompleteListener(listener); // R.raw.sound1 is either an OGG or MP3 sample under 100kb od size int id = pool.load(context, R.raw.sound1, 1); // onLoadComplete() method of the listener is called […]

Soundpool只播放文件的前5秒。 为什么?

我在我的应用程序中使用Soundpool,到目前为止它运行良好,但我确实有一个10秒的wav文件。 不幸的是,soundpool只播放前5秒。 如何让soundpool播放整首曲目? 我已经将wav转换为 – ogg和mp3仍然是同样的问题。 它只播放前5秒。 任何帮助将非常感激。 //set up audio player mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0); //load fx mSoundPoolMap.put(RAW_1_1, mSoundPool.load(this, R.raw.loop1, 1)); //playing soundpool case R.id.button1: mSoundPool.stop(mStream1); mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f); UPD Last:也许有人会在这里find它并阅读它。 似乎soundpool不能播放超过5秒。 这是他的最大值,因为更长的声音使用MediaPlayer。 我希望你不会像我那样花那么多时间)

Android SoundPool:播放结束时收到通知

这个声音很简单,我无法弄清楚为什么我找不到答案哈哈 我有一个工作的声音池类(感谢教程和我做的一些调整),它工作正常。 现在的问题是我希望能够随机改变我的背景音乐。 (并不总是在循环中有相同的音乐,但有2或3,当一个完成时,我播放其他2个中的一个)。 问题是我找不到通知音乐播放完毕的方法。 有任何想法吗 ? 贾森

SoundPool:创建AudioTrack时出错

我在使用SoundPool时遇到问题,因为它拒绝使用我的.ogg文件。 我收到此错误: AudioFlinger无法创建曲目,状态:-12 创建AudioTrack时出错 我find了一个关于这个的线索,(可能的) 答案是: 确保使用具有恒定比特率的.ogg媒体文件! 是这样的吗? (有人请确认或取消) 如果是 – 使用哪个应用程序(Audacity不支持.ogg自定义导出设置)。 如果不是 – 还有什么可能是错的? 作为旁注 – 在我使用MediaPlayer之前,但现在我想播放一些并行的声音。

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

我正在制作一个音乐播放器,我需要在不改变音高的情况下改变速度(音乐的播放速度)。 我无法find任何本机安卓类。 我试过SoundPool,但它不适用于大型音乐文件,它似乎也不适用于许多设备。 我也试过AudioTrack,但又没有运气。 现在我正在尝试使用OpenSL ES处理音乐的android NDK音频示例。 现在我只想在此示例中添加设置播放速率function。 任何人都可以告诉我如何在其中添加更改播放率function?

SoundPool中的流量与AudioManager中的音量

我感到很困惑… SoundPool.play(int soundID, float leftVolume,float rightVolume ,int priority,int loop,float rate) 这里的体积是0.0到1.0 我见过的教程建议将流量计算为: AudioManager mgr = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); streamVolume = streamVolume / AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f); 这是有道理的。 我假设这个卷会覆盖用户在手机中设置的全局媒体音量,我可以通过改变soundPool中的流量来独立改变我的应用程序的音量。 但实际上它就像乘数一样 – 如果我在soundpool中设置0.5音量,实际音量将始终是全局音量的一半。 很容易重现: 将手机设置中的全局媒体音量设置为最大值 使用soundpool.play将活动中的音量设置为0.5 – 播放声音 将soundpool.play中的音量设置为1 – 播放声音,它会大两倍 有人可以解释为什么它会这样吗? 是传递给SoundPool.play方法的音量真的是全球音量的乘数吗?

Soundpool样本没有准备好

我有一个.wav文件,我想在我的游戏中使用,目前我正在加载游戏中每个活动的onCreate()声音。 soundCount = soundpool.load(this,R.raw.count, 1); 活动开始后将播放声音。 soundpool.play(soundCount, 0.9f, 0.9f, 1, -1, 1f); 问题有时我会遇到错误”sample x not ready” 。 是否可以在开始游戏时加载.wav文件并将其保存在内存中并在以后的游戏中使用它? 或者是否可以等待1-2秒以使声音加载完成?

Android MediaPlayer setNextMediaPlayer()替代

我最近发布了一个应用程序,用户报告崩溃,因为我的程序包含了setNextMediaPlayer()方法。 我现在意识到, 这只适用于API 16 +,我的应用程序支持API 8 + 。 我想知道是否有另一种方法达到同样的效果。 我的应用程序有一些文本到语音,我正在做的是创buildMediaPlayers ArrayList ,每个有一个短的声音文件,然后一个接一个地播放它们。 如果我从代码中删除这个方法,那么audio变得太不明了。 我正在考虑使用SoundPool类,但没有OnCompleteListener ,所以我不知道该怎么做。 所以基本上我的问题是: 是否有一种方法可以在不使用setNextMediaPlayer()方法的情况下在audio文件之间进行无缝转换? 非常感谢你花时间陪伴! 编辑 我添加了这个代码,我发现 private class CompatMediaPlayer extends MediaPlayer implements OnCompletionListener { private boolean mCompatMode = true; private MediaPlayer mNextPlayer; private OnCompletionListener mCompletion; public CompatMediaPlayer() { try { MediaPlayer.class.getMethod("setNextMediaPlayer", MediaPlayer.class); mCompatMode = false; } catch (NoSuchMethodException e) { mCompatMode […]

Soundpool不在Android 4.3中循环

我有一些应用程序,其中我使用soundpool循环滴答声时钟的声音,这在所有以前的版本的android工作正常,但升级到android 4.3后,声音不再循环,但只是播放一次。 我知道我可以使用MediaPlayer来代替它,但这听起来不太好。 有没有一个简单的解决这个问题,将Android修复错误,或者我必须做的MediaPlayer。

Soundpool加载声音名称为“OMX.qcom.audio.decoder.aac”的组件已经存在,忽略了这个

我在后台应用程序的onCreate方法中实现了加载所有的声音。 但是当我加载声音时会出现这样的错误: E / OMXMaster:名称为“OMX.qcom.audio.decoder.aac”的组件已经存在,忽略了这个。 这里有什么问题? 任何人有任何想法? 提前致谢 private void loadAllSounds() { new Thread(new Runnable() { @Override public void run() { soundPool.load(appContext, R.raw.compose_sound_0, 1); soundPool.load(appContext, R.raw.compose_sound_1, 1); soundPool.load(appContext, R.raw.compose_sound_2, 1); soundPool.load(appContext, R.raw.compose_sound_3, 1); } }).start(); }