Вам необходимо воспроизвести образец с другой скоростью, чтобы его высота была правильной.
Как образец, так и MIDI-событие имеют примечание. Используйте формулу из Note names, MIDI numbers and frequencies вычислить обе частоты:
f = 440Hz * 2^((m−69)/12)
затем с фактическими и требуемыми частотами, вы знаете, соотношение, с помощью которого скорость образца должна быть изменена.
Например, если у вас есть образец 44,1 кГц в ноты, сыгранной на В4, и если вы получите MIDI событие, которое хочет играть ноту на D5, то частота примечание образца составляет 493,88 Гц, в то время как он должен воспроизводиться так, чтобы частота ноты составляла 587,33 Гц. Другими словами, его следует ускорить в 587.33/493.88 ≈ 1.19.
Таким образом, вместо воспроизведения этого образца на частоте 44,1 кГц его необходимо воспроизводить при 44,1 кГц × 1,19 ≈ 52,4 кГц.
Предполагая, что ваше устройство вывода по-прежнему работает на частоте 44,1 кГц, вам необходимо выполнить повторный выбор этого образца заметки. Для этого скажите ресамплеру, что вы хотите преобразовать с 52,4 кГц до 44,1 кГц.
Примечание: при вычислении соотношения между частотами двух нот m1
и m2
, в 440 Hz
и 69
сроки сокращаются, и вы получите:
f1/f2 = 2^((m1 - m2)/12)
Попробуйте downloads.dspdimension.com/smbPitchShift. cpp, хотя посмотрите больше на Pitch Shifting, это не тривиальная проблема. – IdeaHat
@MadScienceDreams: Pitch Shifting - это не тривиальная проблема, но воспроизведение образца быстрее или медленнее и во многих случаях достаточно. – Shannon