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

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分钟,从未打印出“Record:End”。有人已经使音频播放正常了吗?我错过了什么吗?
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();

我还没有测试过,但是谢谢!!!这一直困扰着我。 - joey.enfield
我刚刚测试了一下,就是这样...谢谢!!有趣的是,在桌面版本上似乎运行良好。 - joey.enfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接