私はマイクから(スーパーパワーを使用して)オーディオ信号を取り込んで、それを送信するためにそれをデータグラムパケットに変換しようとしています。 私が理解する限り、私は入力のためにSuperpoweredAndroidAudioIOクラスを使うべきですが、私はそれを送るためにバッファをどのように読むことができないのですか?SuperpoweredAndroidAudioIO入力からバッファを読み込む?
基本的に私はSuperpoweredおよびC++を使用して、これと同様のものを実装する:
...
recBufSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration,
audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency,
channelConfiguration, audioEncoding, recBufSize);
new Thread(){
byte[] buffer = new byte[recBufSize];
public void run(){
try {
datagramSocket = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
audioRecord.startRecording();
isRecording = true;
while (isRecording){
int readSize = audioRecord.read(buffer, 0, buffer.length);
try {
DatagramPacket packet = new DatagramPacket(
buffer, readSize, receiverAddress, port);
datagramSocket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
datagramSocket.close();
}
}.start();
減少させるために、私はJNIとNDKに新たなんだ、私はちょうどこれが可能か合理的であるかどうかを知りたいですレイテンシ(Javaコードを使用する場合と比較して)、そして、可能であれば、どこから始めるべきかについての小さなヒントかもしれません。ありがとう。
答えてくれてありがとうGabor。私は少し前進して以来、私はロックレスメカニズムでデータ伝送を実装することができませんでした。しかし、私はコールバックの中でいくつかのサウンドを得ることができました(私はプロトタイプでしか動作しないので、今のところ動作します)。これで、あるデバイスの入力バッファから短いintを送信し、別のデバイスの出力バッファにそれを受け取ることができます。しかし、新しい問題は、音がビットクラッシュしている音です。私はそれがハードウェアに関連する問題であるという気持ちを持っています。あるデバイスのバッファ値が別のデバイスのバッファ値と何らかの形で一致しないことがありますか? – user2137824
コードを見る必要がある場合は、新しい質問でそれを聞くことができます。 – user2137824
プロトタイプでオーディオを送ることができて嬉しいです。私は自分自身の前にそのような転送を実装して以来、私の腸は私に "bitcrushed"の問題はハードウェアの問題ではなく、コード内のいくつかのバグであると私に伝えます。バッファアンダーランが発生する可能性があります。これはネットワーク転送なので、スムーズなオーディオのためのパケットの処理は簡単ではありません。 –