gpt4 book ai didi

android - 将 Android 中的音频从 48kHz 重采样到 44.1kHz,反之亦然 - 纯 Java 还是 OpenSL ES?

转载 作者:行者123 更新时间:2023-11-30 00:56:42 26 4
gpt4 key购买 nike

我已经成功地使用 MediaCodec 加入了视频文件的音轨。如果两个音轨的 channel 数和采样率相同,那么这样做就没有问题。

(出于某种原因,OMX.SEC.aac.dec 如果原始音轨为 22050 Hz,则始终输出 44100 Hz 2 声道音频,如果原始音轨为 48000 Hz,则输出 2 声道音频24000 赫兹。)

当我尝试在 22050 Hz 音轨之后附加 24000 Hz 音轨时出现问题。假设我想输出一个由上述两个音轨组成的 22050 Hz 音轨,我将不得不对 24000 Hz 音轨进行重新采样。

我试过这个:

private byte[] minorDownsamplingFrom48kTo44k(byte[] origByteArray)
{
int origLength = origByteArray.length;
int moddedLength = origLength * 147/160;
int delta = origLength - moddedLength;
byte[] resultByteArray = new byte[moddedLength];
int arrayIndex = 0;
for(int i = 0; i < origLength; i+=11)
{
for(int j = i; j < i+10; j++)
{
resultByteArray[arrayIndex] = origByteArray[j];
arrayIndex++;
}
}
return resultByteArray;
}

它返回一个 3700 多个字节的字节数组和编码后的正确音频......在非常响亮的加扰声音后面。

我的问题:

  1. 如何在不留下此类伪像的情况下正确地对音轨进行缩减采样?我应该使用平均值吗?
  2. 我是否应该使用通过 OpenSL ES 实现的重采样器来使过程更快和/或更好?

最佳答案

主要问题是当您应该跳过样本时,您只是跳过了字节

每个样本都是 16 位,所以两个字节。如果音频是立体声,则每个样本有四个字节。您必须始终跳过那么多字节,否则您的样本将完全混淆。

使用相同的比率 (10/11),您可以使用 40/44 来始终跳过完整的四字节样本并保持样本正确。

至于为什么生成的视频以不同的速度播放,那是完全不同的事情。

关于android - 将 Android 中的音频从 48kHz 重采样到 44.1kHz,反之亦然 - 纯 Java 还是 OpenSL ES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041519/

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