pAudioBuffer
関数ffmpegから取得したcharバッファがあります:
int len = avcodec_decode_audio3(av_codec_context,
(int16_t *) pAudioBuffer, &out_size, &packet);
オーディオ形式はサンプルあたり2バイトであることを知っています。2バイトごとに短い値に変換する必要があります。以下のコードスニペットを使用しようとしましたが、短い値ではなくゼロになることがよくあります。
int shortBufIndex = 0;
for (int i = 0; i < (out_size); i += 2) {
char b1 = pAudioBuffer[i];
char b2 = pAudioBuffer[i + 1];
short sample = atoi(&b1) + atoi(&b2);
shortBuffer[shortBufIndex] = sample;
shortBufIndex++;
LOGI("BUFFER_ITEM='%d'", sample);
}
私が間違っているのは、charバッファの2バイトごとにshortとその逆に変換する方法です。
アップデート:
システムのバイト順序はLITTLE_ENDIANです。次のようにテストしました:AndroidNDKのエンディアン
バッファ内の2バイトごとを短いタイプのサンプルに変換して戻すにはどうすればよいですか。コードサンプルを教えてください。
アップデート
ペアとしてshortにアクセスしようとしましたが、これが私の修正コードですが、機能しません。音が聞こえません。
int shortBufIndex = 0;
for (int i = 0; i < (out_size); i += 2) {
char * byte = (char *) pAudioBuffer[i];
short * sample = byte;
shortBuffer[shortBufIndex] = sample;
}
私が間違っているのは何ですか?次のような変換が必要です。バイト配列から短い配列に変換し、Javaではcに戻します。