音频8Hz,16Hz,44.1Khz,48Khz与mp3的128kbps,192kbps

音频8Hz,16Hz,44.1Khz,48Khz与mp3的128kbps,192kbps,一个说的是采样率,一个说的是数据量,不同的东西!
现在一般最高也就是48Khz的采样率!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
48kHz 音频重采样为 44.1kHz 音频,需要进行插值和抽取处理。下面是一种可能的实现方法: 1. 将 48kHz 音频数据读取到内存中。 2. 对音频数据进行低通滤波处理,以去除采样率高于 22.05kHz 的频率成分。 3. 将滤波后的音频数据按照比例插值,使采样率变为 48 * (441 / 480) = 44.1kHz。 4. 对插值后的音频数据进行抽取,使采样率恢复为 44.1kHz。 5. 将抽取后的音频数据写入存储介质。 下面是一个C++实现的示例代码: ```c++ // 48kHz音频重采样为44.1kHz void resample48To44(const int16_t* src, int16_t* dst, size_t numSamples) { // 低通滤波器 constexpr double kCutoffFreq = 0.95 * 22050; // 截止频率为22.05kHz const auto filterCoefficients = designLowpassFilter(kCutoffFreq, 48e3, 101); // 根据截止频率和采样率设计滤波器系数 std::vector<double> filterState(filterCoefficients.size() - 1, 0); // 比例插值 constexpr double kRatio = 44100.0 / 48000.0; std::vector<double> upsampled(numSamples * kRatio); for (size_t i = 0; i < numSamples * kRatio; i++) { double index = static_cast<double>(i) / kRatio; size_t leftIndex = static_cast<size_t>(std::floor(index)); size_t rightIndex = static_cast<size_t>(std::ceil(index)); double leftValue = src[leftIndex]; double rightValue = src[rightIndex]; double fraction = index - leftIndex; upsampled[i] = leftValue + fraction * (rightValue - leftValue); } // 低通滤波 std::vector<double> filtered(upsampled.size()); filterSamples(upsampled.data(), upsampled.size(), filterCoefficients.data(), filterCoefficients.size(), filterState.data(), filtered.data()); // 抽取 constexpr double kFactor = 48000.0 / 44100.0; for (size_t i = 0; i < numSamples; i++) { size_t index = static_cast<size_t>(i * kFactor); dst[i] = static_cast<int16_t>(filtered[index]); } } ``` 需要注意的是,在插值和抽取过程中可能会出现抖动和混叠等问题,可能会对音频质量产生影响。因此,需要选择合适的滤波器来最小化这些问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值