我正在制作一个鼓垫应用程序,其中包括播放.wav文件的很多(8)。我根据我的知识尝试使用soundpool来播放小.wav文件soundpool用于播放小文件。但是当我尝试发挥以上错误来自我的方式。我是Android编程的初学者。感谢帮助。
我的logcat抛出
quickhelp.js
java主要活动
12-30 17:33:03.825 166-488/? E/AudioFlinger: Sample rate out of range: 441000 mSampleRate 44100
12-30 17:33:03.825 1627-1627/com.govinddixit.drumpadchamp E/AudioTrack: AudioFlinger could not create track, status: -22
12-30 17:33:03.825 1627-1627/com.govinddixit.drumpadchamp E/SoundPool: Error creating AudioTrack
答案 0 :(得分:0)
首先,在下面的代码摘录中增加maxStreams参数或应用程序可以同时播放的最大声音数,以在应用程序的用户按下两个以上打击垫时启用多个流的播放:
sp = new SoundPool(9, AudioManager.STREAM_MUSIC,0);
输入9而不是2。九(9)是maxStreams参数或可以在一个soundPool中同时播放的音频流的数量。虽然不太可能同时按下9个打击垫,但最好将maxStreams设置为等于应用程序上的按钮或打击垫的数量。
但这不是错误的原因。该错误是由播放速率的非常高的10f引起的。播放速率的范围是0.5到2.0,不多也不少。播放速率的默认值应为1.0f。如果要更改声音的速度和音高,则可以使用0.5到2.0的值进行调整。请在下面查看具有正确播放率的第一种方法:
public void playsound1 (View v) {
sp.play(sound1, 1.0f, 1.0f, 0, 0, 1.0f);
}
当我设置不同的值时,我遇到了同样的问题,这些值是我用来编程和构建弦乐和钢琴音乐键盘应用的色阶的播放速率得出的,其中参考键是C4八度没有显示在我的键盘布局上,并且C4的音频流已加载到B3键以供参考。我设法通过使用C3作为参考注释来解决该问题,并通常将G3#的频率比率因子应用为1.6667f。我不会详细讨论数学,因为您的应用错误的原因更简单,而且与我所经历的不同。
我希望上述解决方案能够解决您的问题。