使用android MediaCodec编码时修改音频音高/速度

时间:2015-08-16 10:44:16

标签: android audio mediacodec tempo pitch-shifting

我正在使用AudioRecord从设备麦克风实时获取音频,并使用MediaCodecMediaMuxer类将其编码/保存到后台文件中。< / p>

有没有办法在保存到文件之前更改音频流的音高和(或)速度?

2 个答案:

答案 0 :(得分:0)

要修改音频流的音高/速度,您必须在使用编解码器对其进行编码之前自行重新采样。请记住,如果更改流的速度,还需要修改时间戳。

答案 1 :(得分:0)

按音调/速度,你的意思是频率本身,还是真的是样本的速度?如果是这样,那么每个样本应该在更短或更长的时间内投影:

示例:

    private static byte[] ChangePitch(byte[] samples, float ratio) {

        byte[] result = new byte[(int)(Math.Floor (samples.Length * ratio))];

        for (int i = 0; i < result.Length; i++) {
            var pointer = (int)((float)i / ratio);
            result [i] = samples [pointer];
        }

        return result;
    }

如果您只是想在不影响速度的情况下改变音高,那么您需要阅读相位声码器。这是合理的科学,有很多项目可以实现这一目标。 https://en.wikipedia.org/wiki/Phase_vocoder