android - LibGdx录制和播放声音

标签 android android-studio audio libgdx

我有一个可以录制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/

相关文章:

android - 无法在回收器 View 适配器类中显示 AlertDialog

android - android 中的 SQLiteDatabase 查询

java - 显示另一个 Activity 的按钮

android - 在制作应用程序的最终版本时,Android Studio 如何处理 System.out.print 函数?

c++ - 有没有办法在 Mac OS 上播放系统提示音?

angularjs - karma 测试 : PhantomJS: ReferenceError: Can't find variable: Audio

java - Fragment 中的自定义 listView。未找到布局

android - 编辑文本空间 为什么在两个编辑文本时使用空间甜菜?

android - java.lang.ClassNotFoundException : Didn't find class "com.google.android.things.pio.PeripheralManagerService" 异常

android - MediaRecorder.AudioSource.DEFAULT 阻止通话中的音频