gpt4 book ai didi

c++ - 32 位音频到 24 位

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:02 25 4
gpt4 key购买 nike

我正在尝试将 32 位音频数据转换为 24 位音频。但是,当我尝试播放它时,我得到的只是噪音。似乎我缺少一些非常基本的东西?

应该是小端原始PCM。

template<typename T>
static std::vector<int8_t> audio_32_to_24(const T& audio_data)
{
auto size = std::distance(std::begin(audio_data), std::end(audio_data));
auto input8 = reinterpret_cast<const int8_t*>(&(*std::begin(audio_data)));
auto output8 = std::vector<int8_t>();

output8.reserve(size*3);
for(int n = 0; n < size; ++n)
{
output8.push_back(input8[n*4+1]);
output8.push_back(input8[n*4+2]);
output8.push_back(input8[n*4+3]);
}

return output8;
}

最佳答案

如果输入也是 LE,则输出字节顺序似乎是颠倒的:

    output8.push_back(input8[n*4+3]);
output8.push_back(input8[n*4+2]);
output8.push_back(input8[n*4+1]);

编辑 为了纯粹的乐趣,我会考虑用这个替换它(因为看起来您可能正在使用 C++0x:

size_t i = 0;

std::copy_if(
reinterpret_cast<const int8_t*>(&*std::begin(audio_data)),
reinterpret_cast<const int8_t*>(&*std::end(audio_data)),
std::back_inserter(output),
[&i] (int) { return 0 == (i++ % 4); });

此外,考虑更换

  • reserveresize
  • push_back输出迭代器,带有直接迭代器到目标容器

关于c++ - 32 位音频到 24 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com