2015-08-16 13 views
0

Я использую AudioRecord для получения звука в режиме реального времени с микрофона устройства и его кодирования/сохранения в фоновом режиме с использованием классов MediaCodec и MediaMuxer.Изменение тональности звука/темпа во время кодирования с помощью android MediaCodec

Есть ли способ изменить Шаг и (или) темп аудиопотока до его сохранения в файл?

+0

Вы могли изменить темп аудиофайла. Если да, просьба указать ответ. Я меняю временные метки, но это никак не влияет на звук. –

ответ

0

Чтобы изменить высоту тона/темп аудиопотока, вам придется перепрограммировать его самостоятельно, прежде чем кодировать его с помощью кодека. Имейте в виду, что вам также нужно изменить временные метки, если вы измените темп потока.

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

 Смежные вопросы

  • Нет связанных вопросов^_^