AudioTrack出错

时间:2015-08-07 06:32:18

标签: android crash audiotrack

我正在制作一个音频播放器,它包含了对AudioTrack的馈送, 在本机的帮助下我从audiotrack获得声音,但事情是在一段时间后我在AudioTrack类中遇到堆栈溢出错误。 我在.manifest中增加了堆大小,但它没有改变任何东西。 我的日志是:

08-07 11:53:49.843: E/AndroidRuntime(23539): FATAL EXCEPTION: Thread-1298
08-07 11:53:49.843: E/AndroidRuntime(23539): Process: com.example.player, PID: 23539
08-07 11:53:49.843: E/AndroidRuntime(23539): java.lang.StackOverflowError
08-07 11:53:49.843: E/AndroidRuntime(23539):    at android.media.AudioTrack.write(AudioTrack.java:1141)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:100)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:105)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:105)
08-07 11:53:49.843: E/AndroidRuntime(23539):    at com.example.player.MusicService.recursive(MusicService.java:105)

请帮帮我。我被困在里面。 由于某些原因,我使用递归而不是做。 我的方法是......

    void recursive() {
        // Log.e("", "reccursive called");
        if (paused) {
            Log.e("", "is paused        " + paused);
            signalControl.doWait();
        }
        err = NativeWrapper.decodeMP3(minBufferSize * 2, buffer);
        // Log.e("", "" + buffer.length);
        // byte[] bufferbyte = ShortToByte_Twiddle_Method(buffer);
        // Log.e("", "mp3 decoding by native");

        track.write(buffer, 0, minBufferSize); // Write
        track.flush();
        // Log.e("", "write to track");
        // track.flush();
        if (err != MPG123_DONE) {
            recursive();
        }

    }

1 个答案:

答案 0 :(得分:-2)

看看这个SO answer。希望这是有帮助的。如果您不想使用递归方法,可以查看code snippet

引用回答"有一种方法可以增加堆栈大小,尽管您可能无法在主UI线程中执行此操作,方法是将Thread对象参数用作:

ThreadGroup group = new ThreadGroup("threadGroup");
new Thread(group, runnableObject, "YourThreadName", 2000000).start();

这会将堆栈大小增加到2M。