65 lines
1.8 KiB
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;
|
|
}
|
|
} |