Алгоритм PCM для повышения дискретизации - PullRequest
2 голосов
/ 23 марта 2011

У меня аудио 8k16bit pcm, и я хочу увеличить его до 16k16bit.Я должен сделать это вручную.

Может кто-нибудь сказать мне алгоритм линейной интерполяции?Должен ли я интерполировать между каждыми двумя байтами?

Кроме того, когда я произвожу повышение, я должен внести изменения в заголовок wav - что я должен изменить?

Ответы [ 4 ]

6 голосов
/ 24 марта 2011

Как уже упоминалось, линейная интерполяция не дает наилучшего качества звука, но она проста и дешева.

Для каждого нового сэмпла, который вы создаете, просто усредните его со следующим, например,

short[] source = ...;
short[] result = new short[source.length * 2];
for(int i = 0; i < source.length; ++i) {
  result[i * 2] = source[i];
  result[i * 2 + 1] = (source[i] + source[i + 1]) / 2;
}

Вам определенно следует искать библиотеку, которая поможет вам работать с файлами WAV. Несмотря на то, что это простой формат, вам не нужно делать это самостоятельно, если есть код, который будет делать то, что вам нужно. Кстати, почему вы делаете это в первую очередь? Возможно, вы могли бы просто использовать sox или аналогичный инструмент для этого.

2 голосов
/ 23 марта 2011

Может кто-нибудь сказать мне алгоритм линейной интерполяции? Должен ли я интерполировать между каждыми двумя байтами?

уверен:

double interpolate_linear(double a, double b, double x) {
    assert(0.0 <= x);
    assert(1.0 >= x);

    if (0.0 >= x)
        return a;
    else if (1.0 <= x)
        return b;
    else
        return (1.0 - x) * a + x * b;
}

Линейная интерполяция, хотя лучше, чем ничего, имеет большое количество ошибок. лучше заполнить нулями окно, если у вас есть время процессора.

Кроме того, когда я произвожу обновление, я должен внести изменения в заголовок wav - что мне следует изменить?

не уверен для Java.

1 голос
/ 24 марта 2011

Вот хорошая ссылка для работы с файлами WAV в Java:

http://www.labbookpages.co.uk/audio/javaWavFiles.html

0 голосов
/ 23 марта 2011

Не уверен насчет заголовка, но я бы посмотрел на кубическую сплайн-интерполяцию. Вы можете посмотреть на этот сайт . У него очень аккуратный способ выполнения кубической интерполяции. Я не уверен, как изменить заголовок, но я почти уверен, что были ответы на этот вопрос в переполнении стека, которые вы могли бы найти.

...