kopia lustrzana https://github.com/sh123/codec2_talkie
Audio tuning
rodzic
67f5a7581e
commit
5aaeb4fda7
|
@ -112,7 +112,7 @@ public class Hdlc implements Protocol {
|
||||||
//Log.i(TAG, "checksum: " + calculatedCrc + " " + packetCrc);
|
//Log.i(TAG, "checksum: " + calculatedCrc + " " + packetCrc);
|
||||||
if (calculatedCrc == packetCrc) {
|
if (calculatedCrc == packetCrc) {
|
||||||
Log.i(TAG, DebugTools.byteBitsToString(packetBits));
|
Log.i(TAG, DebugTools.byteBitsToString(packetBits));
|
||||||
Log.i(TAG, DebugTools.bytesToHex(packetBytes));
|
Log.i(TAG, "RX: " + DebugTools.bytesToHex(packetBytes));
|
||||||
Log.i(TAG, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
Log.i(TAG, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, -1, contentBytes);
|
_parentProtocolCallback.onReceiveCompressedAudio(null, null, -1, contentBytes);
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,7 @@ public class Hdlc implements Protocol {
|
||||||
buffer.flip();
|
buffer.flip();
|
||||||
byte[] data = new byte[buffer.remaining()];
|
byte[] data = new byte[buffer.remaining()];
|
||||||
buffer.get(data);
|
buffer.get(data);
|
||||||
Log.i(TAG, DebugTools.bytesToHex(data));
|
Log.i(TAG, "TX: " + DebugTools.bytesToHex(data));
|
||||||
|
|
||||||
byte[] dataBytesAsBits = BitTools.convertToHDLCBitArray(data, true);
|
byte[] dataBytesAsBits = BitTools.convertToHDLCBitArray(data, true);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.media.AudioRecord;
|
||||||
import android.media.AudioTrack;
|
import android.media.AudioTrack;
|
||||||
import android.media.MediaRecorder;
|
import android.media.MediaRecorder;
|
||||||
import android.os.Debug;
|
import android.os.Debug;
|
||||||
|
import android.os.Process;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
@ -74,7 +75,7 @@ public class SoundModem implements Transport, Runnable {
|
||||||
constructSystemAudioDevices();
|
constructSystemAudioDevices();
|
||||||
|
|
||||||
if (_isLoopback)
|
if (_isLoopback)
|
||||||
_sampleBuffer = ByteBuffer.allocate(1000000 );
|
_sampleBuffer = ByteBuffer.allocate(1000000);
|
||||||
else
|
else
|
||||||
_sampleBuffer = ByteBuffer.allocate(0);
|
_sampleBuffer = ByteBuffer.allocate(0);
|
||||||
|
|
||||||
|
@ -87,7 +88,7 @@ public class SoundModem implements Transport, Runnable {
|
||||||
AudioFormat.CHANNEL_IN_MONO,
|
AudioFormat.CHANNEL_IN_MONO,
|
||||||
AudioFormat.ENCODING_PCM_16BIT);
|
AudioFormat.ENCODING_PCM_16BIT);
|
||||||
|
|
||||||
int audioSource = MediaRecorder.AudioSource.MIC;
|
int audioSource = MediaRecorder.AudioSource.UNPROCESSED;
|
||||||
_systemAudioRecorder = new AudioRecord(
|
_systemAudioRecorder = new AudioRecord(
|
||||||
audioSource,
|
audioSource,
|
||||||
AUDIO_SAMPLE_SIZE,
|
AUDIO_SAMPLE_SIZE,
|
||||||
|
@ -167,7 +168,6 @@ public class SoundModem implements Transport, Runnable {
|
||||||
// process tail
|
// process tail
|
||||||
byte [] bitBufferTail = Arrays.copyOf(_playbackBitBuffer, j);
|
byte [] bitBufferTail = Arrays.copyOf(_playbackBitBuffer, j);
|
||||||
Codec2.fskModulate(_fskModem, _playbackAudioBuffer, bitBufferTail);
|
Codec2.fskModulate(_fskModem, _playbackAudioBuffer, bitBufferTail);
|
||||||
_systemAudioPlayer.write(_playbackAudioBuffer, 0, bitBufferTail.length * _samplesPerSymbol);
|
|
||||||
if (_isLoopback) {
|
if (_isLoopback) {
|
||||||
synchronized (_sampleBuffer) {
|
synchronized (_sampleBuffer) {
|
||||||
for (short sample : _playbackAudioBuffer) {
|
for (short sample : _playbackAudioBuffer) {
|
||||||
|
@ -194,12 +194,19 @@ public class SoundModem implements Transport, Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
byte prevBit = 0;
|
byte prevBit = 0;
|
||||||
|
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
|
||||||
while (_isRunning) {
|
while (_isRunning) {
|
||||||
int nin = Codec2.fskNin(_fskModem);
|
int nin = Codec2.fskNin(_fskModem);
|
||||||
|
try {
|
||||||
|
Thread.sleep(10);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
// TODO, take readCnt into account, do not read if playback is active
|
// TODO, take readCnt into account, do not read if playback is active
|
||||||
if (_isLoopback) {
|
if (_isLoopback) {
|
||||||
synchronized (_sampleBuffer) {
|
synchronized (_sampleBuffer) {
|
||||||
if (_sampleBuffer.position() / 2 >= nin) {
|
if (_sampleBuffer.position() / 2 >= nin) {
|
||||||
|
Log.i(TAG, "" + nin + " " + _sampleBuffer.position() / 2);
|
||||||
_sampleBuffer.flip();
|
_sampleBuffer.flip();
|
||||||
for (int i = 0; i < nin; i++) {
|
for (int i = 0; i < nin; i++) {
|
||||||
_recordAudioBuffer[i] = _sampleBuffer.getShort();
|
_recordAudioBuffer[i] = _sampleBuffer.getShort();
|
||||||
|
@ -211,6 +218,9 @@ public class SoundModem implements Transport, Runnable {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int readCnt = _systemAudioRecorder.read(_recordAudioBuffer, 0, nin);
|
int readCnt = _systemAudioRecorder.read(_recordAudioBuffer, 0, nin);
|
||||||
|
if (readCnt != nin) {
|
||||||
|
Log.i(TAG, "" + readCnt + " " + nin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//Log.i(TAG, "! " + AudioTools.getSampleLevelDb(Arrays.copyOf(_recordAudioBuffer, Codec2.fskNin(_fskModem))));
|
//Log.i(TAG, "! " + AudioTools.getSampleLevelDb(Arrays.copyOf(_recordAudioBuffer, Codec2.fskNin(_fskModem))));
|
||||||
//Log.i(TAG, DebugTools.shortsToHex(_recordAudioBuffer));
|
//Log.i(TAG, DebugTools.shortsToHex(_recordAudioBuffer));
|
||||||
|
@ -219,7 +229,7 @@ public class SoundModem implements Transport, Runnable {
|
||||||
|
|
||||||
//Log.i(TAG, "----- " + DebugTools.byteBitsToFlatString(_recordBitBuffer));
|
//Log.i(TAG, "----- " + DebugTools.byteBitsToFlatString(_recordBitBuffer));
|
||||||
//Log.i(TAG, "----- " + DebugTools.byteBitsToFlatString(BitTools.convertFromNRZI(_recordBitBuffer, prevBit)));
|
//Log.i(TAG, "----- " + DebugTools.byteBitsToFlatString(BitTools.convertFromNRZI(_recordBitBuffer, prevBit)));
|
||||||
//Log.i(TAG, "== " + DebugTools.byteBitsToString(BitTools.convertFromNRZI(_recordBitBuffer, prevLastBit)));
|
//Log.i(TAG, "== " + DebugTools.byteBitsToString(BitTools.convertFromNRZI(_recordBitBuffer, prevBit)));
|
||||||
synchronized (_bitBuffer) {
|
synchronized (_bitBuffer) {
|
||||||
try {
|
try {
|
||||||
_bitBuffer.put(BitTools.convertFromNRZI(_recordBitBuffer, prevBit));
|
_bitBuffer.put(BitTools.convertFromNRZI(_recordBitBuffer, prevBit));
|
||||||
|
|
|
@ -74,7 +74,6 @@ namespace Java_com_ustadmobile_codec2_Codec2 {
|
||||||
conFsk->demodBits = (uint8_t*)malloc(sizeof(uint8_t) * fsk->Nbits);
|
conFsk->demodBits = (uint8_t*)malloc(sizeof(uint8_t) * fsk->Nbits);
|
||||||
conFsk->demodBuf = (int16_t*)malloc(sizeof(short) * (fsk->N + 2 * fsk->Ts));
|
conFsk->demodBuf = (int16_t*)malloc(sizeof(short) * (fsk->N + 2 * fsk->Ts));
|
||||||
|
|
||||||
//fsk_set_freq_est_limits(fsk, 500, 2700);
|
|
||||||
fsk_set_freq_est_limits(fsk, 0, sampleFrequency / 2);
|
fsk_set_freq_est_limits(fsk, 0, sampleFrequency / 2);
|
||||||
fsk_set_freq_est_alg(fsk, 0);
|
fsk_set_freq_est_alg(fsk, 0);
|
||||||
|
|
||||||
|
@ -187,7 +186,7 @@ namespace Java_com_ustadmobile_codec2_Codec2 {
|
||||||
ContextFsk *conFsk = getContextFsk(n);
|
ContextFsk *conFsk = getContextFsk(n);
|
||||||
env->GetShortArrayRegion(inputSamples, 0, conFsk->N, reinterpret_cast<jshort*>(conFsk->demodBuf));
|
env->GetShortArrayRegion(inputSamples, 0, conFsk->N, reinterpret_cast<jshort*>(conFsk->demodBuf));
|
||||||
for(int i = 0; i < fsk_nin(conFsk->fsk); i++){
|
for(int i = 0; i < fsk_nin(conFsk->fsk); i++){
|
||||||
conFsk->demodCBuf[i].real = ((float)conFsk->demodBuf[i]) / FDMDV_SCALE;
|
conFsk->demodCBuf[i].real = ((float)conFsk->demodBuf[i]) / FDMDV_SCALE ;
|
||||||
conFsk->demodCBuf[i].imag = 0.0;
|
conFsk->demodCBuf[i].imag = 0.0;
|
||||||
}
|
}
|
||||||
fsk_demod(conFsk->fsk, conFsk->demodBits, conFsk->demodCBuf);
|
fsk_demod(conFsk->fsk, conFsk->demodBits, conFsk->demodCBuf);
|
||||||
|
|
Ładowanie…
Reference in New Issue