使用libgdx进行音频录制和播放

时间:2013-09-25 21:43:16

标签: java libgdx

我想知道是否有人在使用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分钟,从未打印过“Record:End”。

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

1 个答案:

答案 0 :(得分: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();