Гитарный тюнер на языке C#

В этой статье речь пойдет про гитарный тюнер, написанный на языке C#. Кратко рассмотрим структуру программы и основной алгоритм. Исходник можно скачать, нажав кнопку внизу страницы.

Компьютер может захватывать живой звук/музыку с помощью микрофона, подключенного к звуковой плате. Современные звуковые платы могут записывать цифровые сигналы. Цифровой сигнал – это набор дискретных звуковых значений, которые равномерно расположены в звуковом интервале. Цифровой сигнал не предоставляет никакой информации о частотах, которые присутствуют в звуке. Чтобы определить их, данные должны быть проанализированы.

Оконное преобразование Фурье (ОПФ) дает изображение фазы и амплитуды сигнала. Результаты ОПФ могут быть использованы для создания спектрограммы сигналов: квадратичного частотно-временного распределения. Мы будем использовать Быстрое преобразование Фурье (БПФ), чтобы сгенерировать спектрограммы сигналов на короткие периоды времени. После того, как спектрограммы рассчитывается, фундаментальная частота может быть определена путем нахождения индекса максимального значения величины в квадрате. Алгоритм находит несколько таких мест-«кандидатов», с величиной: максимальное значение в квадрате, в дальнейшем анализирует их, чтобы убедиться в правильности найденной частоты из данных сигналов.

Одной из характеристик музыкальной ноты является высота звука. Традиционно музыкальный алфавит частот делится на октавы, а затем на полутона. В октаве 12 именованных полей: C, C#, D, D#, E, F, F#, G, G#, A, A#, и B(H). Октавы также имеют названия: большая, малая, первая, вторая и т.д. Стандартная высота звука (A в первой октаве или A4) имеет частоту 440 Гц. Частоты двух соседних нот отличаются в 21/12 раза, а частоты нот с тем же именем в двух соседних октавах различаются в 2 раза.

Ноты и их частоты (Гц):

GuitarTunerNote

Жирным шрифтом выделены частоты нот, извлекаемых на открытых струнах шестиструнной гитары.

Решение содержит три проекта: главное приложение (GuitarTuner), библиотеку звукового анализа (SoundAnalysis), и библиотеку захвата звука (SoundCapture). Основой решения задачи является алгоритм БПФ (см. метод расчета в классе SoundAnalysis.FftAlgorithm):

Данные для программы поступают со звуковой карты. Абстрактные класс SoundCapture.SoundCaptureBase это служебный класс – адаптер для DirectSound и CaptureBuffer классов, которые позволяют выполнить буферизацию и настройку параметров аудио формата. Приложение требует наличия компонентов Microsoft DirectX 9 для захвата звука с микрофона.

Про быстрое преобразование Фурье можно почитать здесь, а про оконное преобразование Фурье здесь.

Интерфейс программы представлен на рисунках ниже. Главное окно:

GuitarTuner1

После нажатия кнопки “Старт”, выбираем устройство захвата:

GuitarTuner2

Программа в действии:

GuitarTuner3

Скачать исходник

 

Гитарный тюнер на языке C#
5 (100%) 4 votes

Поделиться в соц. сетях:

6 комментария(ев) к статье “Гитарный тюнер на языке C#

  1. Taras

    Добрий день.
    Может кто помочь с даной програмой.????
    При запуске самого тюнера вилетает ошибка, точнее при нажатии кнопки старт..
    пишет : :не удалось загрузить файл или зборку “soundCapture. Version=1.0.0.0. Culture. Public Key Token=null” либо одну из их зависимостей. не удаетса найти указаний файл:

    у меня VS 2013 (update 4)

    1. admin Автор статьи

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

      1. Taras

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

        1. admin Автор статьи

          Да, попробуйте обновить. Или можете его переустановить: сначала удалите звуковое устройство из “диспетчера устройств”, а затем установите драйвер.

          1. Taras

            проблему с директХ решил решение( скачал )
            но появилась другая:
            BadImageFormatException не обработанно
            Необработанное исключение типа “System.BadImageFormatException” в FftGuitarTuner.exe

            Дополнительные сведения: не является приложением Win32. (Исключение из HRESULT: 0x800700C1)

          2. Taras

            проблему с директХ решил (скачал mDX Runtime .NET 4.0 x64 установил оттуда добавил сборку Microsoft.DirectX.DirectSound)

Добавить комментарий для admin Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">