短い配列からバイト配列への変換、およびバイト配列から短い配列への変換が見つかりましたが、短い配列からバイト配列への変換は見つかりませんでした。
これが変換に至るまでのコードです
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);
byte[] bytes2 = new byte[N];
私が試してみました
int i = 0;
ByteBuffer byteBuf = ByteBuffer.allocate(N);
while (buffer.length >= i) {
byteBuf.putShort(buffer[i]);
i++;
}
bytes2 = byteBuf.array();
と
ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().put(buffer);
ただし、両方でこのエラーが発生します(まったく同じではないが、両方で非常に類似している場合のエラー):
05-29 13:41:12.021:W / AudioTrack(9758):getBuffer()トラック0x30efa0が無効になり、再起動します
05-29 13:41:12.857:W / AudioWorker(9758):音声AudioWorkerの読み取りエラー
05-29 13:41:12.857:W / AudioWorker(9758):java.nio.BufferOverflowException
05-29 13:41:12.857:W / AudioWorker(9758):java.nio.ShortBuffer.put(ShortBuffer.java:422)で
05-29 13:41:12.857:W / AudioWorker(9758):java.nio.ShortToByteBufferAdapter.put(ShortToByteBufferAdapter.java:210)
05-29 13:41:12.857:W / AudioWorker(9758):java.nio.ShortBuffer.put(ShortBuffer.java:391)で
05-29 13:41:12.857:W / AudioWorker(9758):com.avispl.nicu.audio.AudioWorker.run(AudioWorker.java:126)
そして、できるだけ多くの情報を提供するために、ここにバイト配列を使用した後のコードがあります
Log.i("Map", "test");
//convert to ulaw
read(bytes2, 0, N);
//send to server
os.write(bytes2,0,bytes2.length);
System.out.println("bytesRead "+buffer.length);
System.out.println("data "+Arrays.toString(buffer));
}