Позвольте мне попытаться понять приложение, которое вы создаете.
- У меня есть iPhone, и я играю в Lady Gaga: P.
- Воспроизводит оригинальную песню (инструментал + вокал).
- Когда я начинаю петь, приложение должно обнаружить, что я пытаюсь исполнить песню.
- Если он определяет это, он переключается только на игру на инструментале (стиль караоке).
- Одновременно он записывает мой голос. В конце песни анализируется, насколько хорошо я пел.
Если это правильно, позвольте мне попытаться сделать удар на Шаге 4. Основная идея заключается в том, что только если я пою что-то близко к воспроизводимой песне, она должна переключиться в режим караоке.
Я бы заранее вычислил энергетическую оболочку только вокальной части песни (часть, которую человек должен петь). Чтобы извлечь вокальную часть, вам, возможно, придется заплатить хорошему певцу, чтобы спеть ее, потому что вы, вероятно, не можете извлечь ее из оригинальной песни.
Чтобы вычислить огибающую энергии, я бы использовал что-то вроде полуволнового выпрямления с последующим фильтром нижних частот (определенно что-то каузальное и быстрое).
Затем я слушал в микрофон и в режиме реального времени вычислял огибающую энергии входного аудио.
Зная, что я нахожусь в «телефоне» на 2 часа, я бы сравнил энергетический конверт истины от 1:55 до 2:00 с энергетическим конвертом последних 5 секунд, которые я записал. Я бы как-то нормализовал каждый конверт. В зависимости от балла перекрытия я бы решал, пытался ли человек спеть «Телефон» или нет.
Удачи!
Chuan