私は24ビットUSBオーディオストリームを32ビットストリームに変換しようとしていますので、マイコンの周辺機器はストリームで楽しく再生できます(16ビットまたは32ビットデータほとんどのマーカスのように...)。24ビットUSBオーディオストリームを32ビットストリームに変換する
次のコードは、mcuの会社から得たものです。期待どおりに動作せず、実際に歪んだオーディオが得られました。
// Function takes usb stream and processes the data for our peripherals
// @data - usb stream data
// @byte_count - size of stream
void process_usb_stream(uint8_t *data, uint16_t byte_count) {
// Etc code that gets buffers ready to read the stream...
// Conversion here!
int32_t *buffer;
int sample_count = 0;
for (int i = 0; i < byte_count; i += 3) {
buffer[sample_count++] = data[i] | data[i+1] << 8 | data[i+2] << 16;
}
// Send buffer to peripherals for them to use...
}
データを24ビットストリームから32ビットストリームに変換する際の助けがあれば、すばらしいことでしょう。仕事のこのエリアには、私にとって非常に困難である:(、また、DSPでhttp://dsp.stackexchange.com
上のビット深度を変更するプロセスを、この質問を投稿した場合
こんにちはマット、あなたが 'int32_t'を置くと、あなたはそれが署名されたデータでなければならないと言っていますか?私はそれを 'uint32_t'型に入れていませんか? –
符号付きと符号なしの24ビットと32ビットの両方の形式が使用されていますが、署名付きの形式が一般的です。あなたが 'int32_t * buffer'を指定していて、何の符号変換もせずにバイトを詰め込んでいたので、両方とも署名されていると仮定しました。 –
ああ意味する。そして、確かに私はそれが何を入れているかを確認するために再びサンプルコードを見ていました。そして、はい、彼らは符号付きの32ビット整数を入れました。あなたのアルゴリズムを試してみましょう! –