現在、オーディオを録音してSDLを使用して処理しようとしていますが、処理手順に16ビットのPCMオーディオが必要です。私が実行しているデバイスは、AUDIO_F32フォーマットしかサポートしていません。私のAudioSpecは以下の通りです。Uint8(浮動小数点AUDIO_F32)をint16_t(16ビットPCM)に変換します
SDL_AudioSpec wanted;
SDL_zero(wanted);
wanted.freq = 48000;
wanted.format = AUDIO_F32SYS;
wanted.channels = 1;
wanted.samples = 4096;
wanted.callback = NULL;
ここでは、録音されたオーディオを含むバッファをフォローする必要があります。
std::vector<Uint8> buffered;
Uint8
を16ビットPCM形式に変換するにはどうすればよいですか? Uint8
は、正しい場合はunsigned char
と定義された32ビット浮動小数点オーディオである必要があります。私は以下のコードを試しましたが、適切な結果を出すようには見えません。
std::vector<int16_t> pcm_buffer;
for(const Uint8& sample : buffered)
{
float sampleFloat = (float) sample;
sampleFloat *= 32767;
int16_t sampleInt = (int16_t) sampleFloat;
pcm_buffer.push_back(sampleInt);
}
私は自分のしていることを完全に誤解しているので、誰かが正しい方向に向けることを願っています。
のように、ループや山車の反復配列の外にキャスト自体を取ることができますか?私は、「Uint」は本当に「Uint8」でなければならないと感じています。手で入力している場合:コピー+貼り付けを検討してください。 –
私はたくさんの実験をしていたのでコードの一部を書き直さなければなりませんでした。私のコードは混乱していましたが、確かにUint8でなければなりません。 – Thys