【发布时间】:2012-06-04 00:19:13
【问题描述】:
我找到了converting a short to byte array 和byte array to short array,但不是短数组到字节数组。
这是导致转换的代码
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): gainBuffer() 轨道 0x30efa0 已禁用,正在重新启动
05-29 13:41:12.857:W/AudioWorker(9758):读取语音时出错 音频工作者
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));
}
【问题讨论】:
-
不确定我想从中得到什么。你发布的链接是西班牙语,我知道它是关于什么的,也许是一个关于相关性的笑话?我只是想展示 N 是什么并避免提问。
-
天哪。我认为@Bohemian 的意思是sscce.org,而不是ssccee.org