我有一个可以录制10秒钟并播放声音的应用程序。但是由于某种原因,当我运行它时,该应用程序无法播放,只能在听到一定音量的声音时才录制并翻转屏幕(真实电话)。
我真的没有想法,代码似乎很好,将不胜感激。
package com.mygdx.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.AudioDevice;
import com.badlogic.gdx.audio.AudioRecorder;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyGdxGame extends ApplicationAdapter{
@Override
public void create () {
AudioDevice playbackDevice = Gdx.audio.newAudioDevice(44100, true);
AudioRecorder recordingDevice = Gdx.audio.newAudioRecorder(44100, true);
short[] samples = new short[44100 * 10]; // 10 seconds mono audio
recordingDevice.read(samples, 0, samples.length);
playbackDevice.writeSamples(samples, 0, samples.length);
recordingDevice.dispose();
playbackDevice.dispose();
}
@Override
public void render () {
}
@Override
public void dispose () {
}
}
它是程序中唯一的类。
最佳答案
不要使用游戏线程进行录制,而要创建另一个线程并在该新线程中开始录制。我在下面添加了一个小示例,在Android中可以正常工作。
public class RecordingTest extends ApplicationAdapter{
Stage stage;
@Override
public void create() {
final AudioDevice playbackDevice = Gdx.audio.newAudioDevice(44100, true);
final AudioRecorder recordingDevice = Gdx.audio.newAudioRecorder(44100, true);
stage=new Stage();
final Label labelStatus=new Label("NOTHING",new Label.LabelStyle(new BitmapFont(), Color.BLUE));
final short[] samples = new short[44100 * 10]; // 10 seconds mono audio
new Thread(new Runnable() {
@Override
public void run() {
labelStatus.setText("Recording Started");
recordingDevice.read(samples, 0, samples.length);
recordingDevice.dispose();
labelStatus.setText("Recording Ended");
labelStatus.setText("Recorded sample start Playing");
playbackDevice.writeSamples(samples, 0, samples.length);
labelStatus.setText("Playing Ended");
playbackDevice.dispose();
}
}).start();
Table table=new Table();
table.setFillParent(true);
table.add(labelStatus);
stage.addActor(table);
}
@Override
public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(1,1,1,1);
stage.draw();
stage.act();
}
@Override
public void dispose() {
stage.dispose();
}
}
关于android - LibGdx录制和播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303926/