こんにちは、まず私の質問を読んでくれてありがとう!
基本的に RS232 シリアル信号 (1200 ボー、8 データビット、パリティ ビットなし、1 ストップ ビット) だけを出力するデバイスがあります。この出力は、3.5mm オーディオ ジャックを介して Android フォンに送られます。
すべてのデータビットを変数に格納し、何かを表示または計算したいのですが、次のビットが入ったときに変数をオーバーライドする必要があります。
変数にデータビットを取得した後、それをどうするかは正確にわかっていますが、基本的な入力/ストリーム/オーディオジャックからの読み取りを行う方法がわかりません...
これを見つけましたが、あまり役に立ちません:オーディオ ジャック経由の Android シリアル ポート おそらく次のようなものです: Android: マイク入力を録音する必要があります
助けてください、ありがとう!
編集: 私の信号に関する詳細情報 ペイロードは 9 バイトのパケットで送信されます。
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: また、入力をバッファに保存してから、バッファから信号を読み取る必要があると思います...しかし、オーディオジャックからのシリアル入力をバッファに書き込むにはどうすればよいですか?
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();
}
}