我在使用soundpool课程时遇到了麻烦.在这里:
在我的游戏应用程序(音乐应用程序顺便说一句)我需要同时重现至少32个短音,所以我声明我的声音池:
private SoundPool sp;
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0);
Run Code Online (Sandbox Code Playgroud)
之后我加载了所需的所有MP3声音,大约80个声音,每个55KB.我没有加载所有声音的麻烦,但它的速度很慢!嗯,这不是问题.真正的麻烦是当我同时播放大约20个声音时,我的日志中出现错误:
ERROR/AudioFlinger(59): no more track names available
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12
ERROR/SoundPool(26349): Error creating AudioTrack
Run Code Online (Sandbox Code Playgroud)
之后,我尝试播放的每个声音都会抛出相同的错误,并且无法播放声音.甚至没有另一个Activity/soundpool的声音.我不知道发生了什么或如何解决它!我应该更改声音文件的格式吗?播放声音后我应该释放记忆吗?
(我正在测试三星Galaxy S I9000,2.3.3操作系统.该应用程序是2.1)
我在使用 SurfaceView 时遇到了一些帧速率问题。我正在做我在一些教程中找到的典型内容(所有教程都说一样),但我无法在我的三星 Galaxy S(旧款 i9000)上达到像样的帧速率。
这是我的循环线程的代码。FPS 初始化为 30。
@Override
public void run() {
long ticksPS = 1000/FPS;
long startTime;
long sleepTime;
//fps checker
long contms=0;
long lasttimecheck = System.currentTimeMillis();
int fps=0;
while (running) {
long time = System.currentTimeMillis();
if(contms>1000) {
Log.v("FPS",String.valueOf(fps));
contms=time-lasttimecheck;
fps=1;
}
else {
fps++;
contms+=time-lasttimecheck;
}
lasttimecheck = time;
Canvas c = null;
startTime =time;
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
} …Run Code Online (Sandbox Code Playgroud)