0
私はlibspeexでデータをエンコードしたいと思います。ただし、speex_encode_int()
は、常に長さ70のSpeexBits
を返します。私が提供するもの(音楽、無音、声)は関係ありません。speex_encode_int()は常に70エンコードの出力バイトを返します
入力仕様:16ビット、PCM、モノラル、44100Hzのサンプリング・レート、LE
int tmp;
short *input = ...; // input data (PCM, 16bit)
int inputFrames = ...; // number of frames
void *state;
SpeexBits bits;
int frameSize;
int bufferLength;
void* output = NULL;
int outputLength = 0;
int i;
state = speex_encoder_init(&speex_wb_mode);
tmp = 8;
speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);
speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &frameSize);
tmp = 44100;
speex_encoder_ctl(state, SPEEX_SET_SAMPLING_RATE, &tmp);
speex_bits_init(&bits);
for(i = 0; i < (inputFrames/frameSize); i++){
speex_bits_reset(&bits);
speex_encode_int(state, &input[i * frameSize], &bits);
bufferLength = speex_bits_nbytes(&bits);
output = realloc(output, outputLength + bufferLength);
speex_bits_write(&bits, (char*)(output + outputLength), bufferLength);
outputLength += bufferLength;
}
// process output data
free(output);
free(input);
は、私は私のエンコーディングルーチンでエラーを行いましたか?それとも、私の初期設定に何か問題がありますか?