Здравствуйте, добрые люди из мира аудио-вычислений,
У меня есть массив сэмплов, представляющих запись. Допустим, это 5 секунд на частоте 44100 Гц. Как мне воспроизвести это с повышенным тоном? А можно ли динамически увеличивать и уменьшать высоту звука? Например, нужно медленно увеличивать высоту тона, чтобы удвоить скорость, а затем отступить.
Другими словами, я хочу взять запись и воспроизвести ее, как если бы ее «царапал» ди-джей
Псевдокод всегда приветствуется. Я напишу это на C.
Спасибо,
РЕДАКТИРОВАТЬ 1
Позвольте мне уточнить мои намерения. Я хочу сохранить частоту воспроизведения 44100 Гц, поэтому мне нужно манипулировать семплами перед воспроизведением . Это также связано с тем, что я хотел бы микшировать звук с увеличенной высотой тона со звуком, работающим с нормальной скоростью .
Другими словами, может мне нужно как-то сжать звук по тому же количеству образцов? Таким образом, при воспроизведении он будет звучать быстрее?
РЕДАКТИРОВАТЬ 2
Кроме того, я хотел бы сделать это сам. Пожалуйста, никаких библиотек (если вы не считаете, что я могу просмотреть код и найти что-нибудь интересное).
РЕДАКТИРОВАТЬ 3
Образец кода, написанный на C, который принимает 2 аргумента (массив сэмплов и коэффициент высоты тона), а затем возвращает массив нового звука, было бы фантастически!
PS Я начал награда за это не потому, что я не думаю, что уже данные ответы недействительны. Я просто подумал, что было бы хорошо получить больше отзывов по этому поводу.
НАГРАДА НАГРАДЫ
Честно говоря, я хотел бы распределить награду на несколько разных ответов, так как их было довольно много, и я считал их очень полезными. Особый привет Даниэлю за то, что он передал мне код, и AShelly и Hotpaw2 за такие подробные ответы.
В конечном итоге, хотя я использовал ответ из другого вопроса SO , на который ссылается специалист по данным, поэтому награда достается ему.
Еще раз спасибо!