안녕하세요. 먼저 내 질문을 읽어 주셔서 감사합니다!안드로이드 스마트 폰의 3.5mm 오디오 포트를 통한 RS232 시리얼 신호 입력 (안드로이드 개발)
필자는 본질적으로 RS232 시리얼 신호 (1200 보, 8 데이터 비트, 패리티 비트 없음, 정지 비트)의 출력을 제공하는 장치를 가지고 있습니다. 이 출력은 3.5mm 오디오 잭을 통해 내 안드로이드 폰으로 전송됩니다.
모든 데이터 비트를 변수에 저장하고 표시하거나 계산할 때 다음 비트가 들어올 때 변수를 무시해야합니다.
내가
내가 발견 ... 내가 변수의 데이터 비트를 thave하지만 오디오 잭 일에서 읽은 기본 입/스트림/수행하는 방법에 대한 아무 생각이 후 함께 할 수 정확히 알고이 있지만, 그것은 나를 많이 도와주지 않습니다. Android serial port via audio jack 어쩌면 다음과 같이 될 수 있습니다 : Android: Need to record mic input제발 도와주세요, 고마워요!
편집 :
1: command byte as ASCII character ('I','A','S','L','R','C' or ' ')
2-6: time in ASCII chars (2:34:56)
7: checksum (64 + sum of time digits)
8: CR (carriage return, ASCII code 0x0D)
9: LF (line feed, ASCII code 0x0A)
Edit2가 : 페이로드는 9 개 바이트 패킷 전송 내 신호 대한 더 많은 정보 I는 I가 버퍼에 입력을 저장하고, 버퍼로부터의 신호를 판독한다고 생각 ...하지만 어떻게 오디오 잭에서 직렬 입력을 버퍼에 기록합니까?
EDIT3이 : 아마 이런 식으로 뭔가가 작동합니다
try
{
int N = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(AudioSource.MIC, 1200, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, N*10);
track = new AudioTrack(AudioManager.STREAM_MUSIC, 1200,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, N*10, AudioTrack.MODE_STREAM);
recorder.startRecording();
track.play();
/*
* Loops until something outside of this thread stops it.
* Reads the data from the recorder and writes it to the audio track for playback.
*/
while(!stopped)
{
Log.i("Map", "Writing new data to buffer");
short[] buffer = buffers[ix++ % buffers.length];
N = recorder.read(buffer,0,buffer.length);
track.write(buffer, 0, buffer.length);
}
}
catch(Throwable x)
{
Log.w("Audio", "Error reading voice audio", x);
}
/*
* Frees the thread's resources after the loop completes so that it can be run again
*/
finally
{
recorder.stop();
recorder.release();
track.stop();
track.release();
}
}