3

我想知道是否有人对使用 libgdx 进行录音和播放有任何运气。我目前正在使用 0.9.8,只是在尝试制作一个简单的语音聊天应用程序。

我使用创建我的音频设备

int samples = 44100;
int seconds = 5;
boolean isMono = true;
short[] data = new short[samples*seconds];

AudioRecorder recorder = Gdx.audio.newAudioRecorder(samples, isMono);
AudioDevice player = Gdx.audio.newAudioDevice(samples, isMono);

按下按钮后,我启动了一个新线程来记录数据。(我知道启动一个新线程会很麻烦,但我只是想玩录音)

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Record: Start");
        recorder.read(data, 0, data.length);
        System.out.println("Record: End");
    }
}).start();

录制后,我使用回放录制的数据

new Thread(new Runnable() {
@Override
public void run() {
    System.out.println("Play : Start");
    player.writeSamples(data, samples, data.length);
    System.out.println("Play : End");
}
}).start();

在我的笔记本电脑上,录音和播放似乎工作正常。我可以记录数据,然后播放效果很好。问题发生在Android上。我已经在三台设备(三星 S3、三星 Galaxy Mini 和 Nexus 10)上进行了尝试。在所有情况下,录音都完美无缺,当我尝试播放时,它会锁定在 player.writeSamples 中,并且没有播放任何内容。我已经离开了 10 分钟,并且从不打印“记录:结束”。

有没有人有音频播放工作?我错过了什么吗?

4

1 回答 1

2

玩了一会儿,我发现了问题所在。

您的线路,在这里:

player.writeSamples(data, samples, data.length);

应该改为:

player.writeSamples(data, 0, data.length);

第二个参数是偏移量,而不是采样率。

因此,总而言之,以下适用于 Android 设备:

final int samples = 44100;
boolean isMono = true;
final short[] data = new short[samples * 5];

final AudioRecorder recorder = Gdx.audio.newAudioRecorder(samples, isMono);
final AudioDevice player = Gdx.audio.newAudioDevice(samples, isMono);

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Record: Start");
        recorder.read(data, 0, data.length);
        recorder.dispose();
        System.out.println("Record: End");
        System.out.println("Play : Start");
        player.writeSamples(data, 0, data.length);
        System.out.println("Play : End");
        player.dispose();
    }
}).start();
于 2013-10-29T21:40:45.483 回答