Я пытаюсь увеличить частоту 44100 Гц до 96000 Гц, и я попробовал это.
sum1 = mPastWavBuffer[(int)mOffset];
sum2 = mPastWavBuffer[(int)mOffset+1];
double sum = (sum1 + (sum2-sum1)) * (mOffset-(int)mOffset);
mOffset представляет собой двойное значение и содержит шаговый коэффициент, увеличиваемый для перемещения по файлу сэмплов 44100 Гц и его 96000 Гц. Эта линейная интерполяция была взята из Wiki Линейная интерполяция из двух известных точек Но это не дает мне желаемого результата, это звучит ужасно.
Я использую это неправильно здесь или что я должен делать с этой формулой, если это не способ ее использовать?
С уважением, Морган
Это, вероятно, потому что линейная интерполяция не совсем то, что вы хотите здесь. Это может работать достаточно хорошо, если вы просто удваиваете частоту дискретизации, но с нецелым коэффициентом я был бы удивлен, если бы вы получили хорошие результаты.
Я бы предложил либо попробовать полиномиальную интерполяцию высшего порядка, либо сделать что-то в частотном пространстве (первое будет легче, чем второе).
РЕДАКТИРОВАТЬ: Из комментариев я также заметил, что ваш расчет суммы отключен:
double sum = sum1 + (sum2-sum1) * (mOffset-(int)mOffset);
это то, что вы хотите.
Других решений пока нет …