Почему PitchDetection лучше работает со свистом? - PullRequest
0 голосов
/ 07 января 2019

Я играю с примером программы UtterAsterisk, которая поставляется с TarsosDSP. Цель этой программы - показать горизонтальные полосы, которые указывают на примечание, которое должен сделать пользователь. Вертикальная черта перемещается слева направо, чтобы указать пользователю правильное время, когда выполнять какие ноты. Пользователь получает очки в зависимости от того, правильно ли он делал заметки за правильную продолжительность времени.

Ссылка на скриншот приложения: https://0110.be/files/photos/392/UtterAsterisk.png

В этой программе 3 раздела:

  1. выбор аудиовхода
  2. выбор алгоритма обнаружения
  3. визуальное представление ожидаемых примечаний по сравнению с фактически произведенными примечаниями: каждые X миллисекунд создается маленький черный квадрат, представляющий примечание, сделанное пользователем. В заголовке этого раздела (в последней версии программы) написано «свист работает лучше».

Мне интересно, почему этот код лучше всего работает со свистом?

В качестве справочной информации я пытаюсь сделать быстрый прототип для аналогичной программы, но там, где пользователь будет производить не свистящие, не вокальные (без речи) звуки (например, звуки животных), и его необходимо будет сопоставить для правильность.

Я попытался свистеть примечания, указанные в программе, и она работает довольно хорошо (за исключением того факта, что я ужасно свистю!).

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

У меня такое ощущение, что свист создает одну ноту, тогда как крякающий звук (как утка) на самом деле является гармоникой (надеюсь, я понял это правильно: несколько нот смешаны для создания звука).

Строка 151, 152: https://github.com/JorenSix/TarsosDSP/blob/master/src/examples/be/tarsos/dsp/example/UtterAsterisk.java

// add a processor, handle percussion event.
dispatcher.addAudioProcessor(new PitchProcessor(algo, sampleRate, bufferSize, this));

Я считаю, что PitchProcessor будет обрабатывать только один пик, так как он возвращает pitchDetectionResult, который содержит только одну частоту (строка 59): https://github.com/JorenSix/TarsosDSP/blob/master/src/core/be/tarsos/dsp/pitch/PitchDetectionResult.java

К сожалению, я в основном начинаю в области цифровой обработки сигналов и мог бы использовать некоторую помощь, чтобы понять, как свист лучше в этом конкретном приложении. Если моя интуиция указывает на свою правоту (свист = отдельная нота), как можно сделать то же самое, что и эта программа (сравнить звуки, издаваемые пользователем, с записью матча)?

Спасибо за ваш вклад!

1 Ответ

0 голосов
/ 07 января 2019

Кажется вероятным, что ответ прямо здесь.

, где пользователь будет издавать не свистящие, не вокальные (без речи) звуки (например, звуки животных) и должны быть согласованы для правильности.

Кажется вероятным, что эти "звуки" являются результатом нескольких тонов, где свист (свист человека), вероятно, будет издавать единственный тон.

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

Другим вариантом является использование телефона для получения звука набора (например, нажмите 7) против свиста. Телефон воспроизводит звуки DTMF (Dual Tone Blah Blah).

...