2017-06-01 123 views
0

我有一個應用程序,它可以記錄10秒鐘並播放聲音。但由於某些原因,當我運行應用程序時,應用程序無法播放,只能在特定時間聽到聲音時才錄製並翻轉屏幕音量(真實手機)。 我真的沒有想法的代碼似乎是好的,幫助將不勝感激。LibGdx錄製和播放聲音

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() { 
} 
} 

它是程序中唯一的類。

回答

0

不要使用遊戲線程進行錄製,創建另一個線程並在該新線程中開始錄製。我在下面添加了一個小例子,可以在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(); 
    } 
} 
+0

Ty爲快速回答!你知道如何在錄音時檢查音頻嗎? –

+0

對不起,我沒有得到你,你檢查音頻是什麼意思? – Aryan

+0

在錄製時獲得一定的頻率。 –