safedispatch-mobile/safeDispatch/src/main/java/com/safemobile/lib/sound/RecordingHandle.java

65 lines
1.8 KiB
Java

package com.safemobile.lib.sound;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import com.safemobile.lib.SM;
public class RecordingHandle {
private Boolean soundNeeded = false;
private AudioTrack playDev = null;
public RecordingHandle(String ip) {
try {
final int RECORDING_PORT = 50003;
TcpAudioClient tcp = new TcpAudioClient(ip, RECORDING_PORT);
final int sampleRate = 8000;
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
//init play device
playDev = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
tcp.addTCPListener(event -> {
byte[] data = event.data();
int len = event.len();
SM.Debug("received b:" + len + " data.length:" + data.length);
playSound(data);
});
} catch (Exception ex) {
SM.Exception("recordings", ex.toString());
}
}
private void playSound(byte[] data) {
if (Boolean.TRUE.equals(getSoundNeeded())) {
if (playDev.getState() == AudioTrack.STATE_INITIALIZED) {
playDev.write(data, 0, data.length);
playDev.play();
} else {
SM.Debug("Cannot play sound playDev NOT init correctly");
}
}
}
public void startSound() {
setSoundNeeded(true);
}
public void stopSound() {
if (playDev != null && playDev.getState() == AudioTrack.STATE_INITIALIZED) {
if (playDev.getPlayState() == AudioTrack.PLAYSTATE_PLAYING)
playDev.stop();
} else {
SM.Debug("Cannot STOP playDev");
}
setSoundNeeded(false);
}
public Boolean getSoundNeeded() {
return soundNeeded;
}
public void setSoundNeeded(Boolean soundNeeded) {
this.soundNeeded = soundNeeded;
}
}