0

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

有什么方法可以在将音频流保存到文件之前更改音高和(或)速度?

4

2 回答 2

1

音高/速度是指频率本身,还是样本的速度?如果是这样,则应在更短或更长的时间段内预测每个样本:

例子:

    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

于 2015-08-19T06:30:14.613 回答
0

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

于 2015-08-17T12:30:14.897 回答