いくつかの理由で、ネットワーク送信のためにオーディオのサンプルをbyte[]に変換する必要があります。short2bytearrayの関数を見つけました
public static byte[] short2byte(short in) {
byte[] ret = new byte[2];
ret[0] = (byte) (in & 0xff);
ret[1] = (byte) ((in >> 8) & 0xff);
return ret;
}
オーディオが再生され続け、サンプルが取得され続けるため、最初にサンプルをHashMapに保存してから、スレッドを開いてこのマップを処理します。
private void convert() {
Thread conv = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// while (needConver) {
Iterator<Entry<Integer, short[]>> iter = sampleBuffer
.entrySet().iterator();
Log.i("Converting", "enter");
if (iter.hasNext()) {
Entry<Integer, short[]> entry = iter.next();
//stops in here
byte[] converted = new byte[entry.getValue().length * 2];
for (short in : entry.getValue()) {
Admin.combineByteArray(converted, Admin.short2byte(in));
}
convertedBuffer.put(entry.getKey(), converted);
sampleBuffer.remove(entry.getKey());
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// }
}
});
conv.start();
}
スレッドは1回だけ作成されます。sampleBufferを追跡し続け、そこに格納されているデータを変換したいと思います。ただし、会話関数を実行すると、次Admin.short2byte(in)
のような多くの情報が出力されます。
`03-22 14:52:48.004: D/dalvikvm(24194): GC_FOR_ALLOC freed 4096K, 50% free 8517K/16839K, paused 13ms, total 13ms`
これを修正する理由と方法を教えてください。ありがとうございました