Вы уверены, что ответ корректен? Ошибка анализа, средняя, что существует sth неправильно с данными, являющимися evaluted в строке var t = eval( "(" + request + ")" ) ;
Чтобы распознать частоту звукового сигнала, вы должны использовать алгоритм FFT ( быстрое преобразование Фурье ). Насколько я могу судить, PyGame не имеет средств для записи звука и не поддерживает преобразование FFT.
Во-первых, вам нужно захватить необработанные дискретизированные данные со звуковой карты; этот вид данных называется ИКМ (импульсно-кодовая модуляция). Самый простой способ захвата звука в Python - использовать библиотеку PyAudio (привязка Python к PortAudio). GStreamer тоже может это сделать, это, вероятно, излишек для ваших целей. Захват 16-битных сэмплов с частотой 48000 Гц довольно типичен и, вероятно, лучшее, что дает вам обычная звуковая карта.
Если у вас есть необработанные аудиоданные PCM, вы можете использовать модуль fftpack
из библиотеки scipy , чтобы прогнать образцы через преобразование БПФ. Это даст вам частотное распределение анализируемого аудиосигнала, то есть насколько сильным является сигнал в определенных частотных диапазонах. Затем нужно найти частоту с наиболее сильным сигналом.
Вам может потребоваться дополнительная фильтрация, чтобы избежать гармонических частот Я не уверен.
Вам понадобится аудио библиотека, такая как встроенный audioop .
Анализ конкретной воспроизводимой ноты нетривиально, но может быть выполнен с помощью эти API.
Также можно использовать: http://wiki.python.org/moin/PythonInMusic
Эта ссылка показывает, что кто-то делает это в VB.NET, но основы того, что нужно сделать для достижения вашей цели, отражены в этих ссылках ниже.
Однажды я написал утилиту, которая делает именно это - анализирует, какие звуки воспроизводятся.
Вы можете посмотреть код здесь (или вы можете загрузить весь проект. Он интегрирован с Frets On Fire, клоном гитарного героя с открытым исходным кодом для создания настоящего гитарного героя). Он был протестирован с использованием гитары, губной гармошки и свистков :) Код уродливый, но он работает :)
Я использовал pymedia для записи и scipy для БПФ.
За исключением основ, которые другие уже отметили, Я могу дать вам несколько советов:
Очень похожие вопросы:
Преобразование звука в последовательность нот - непростая задача, особенно с несколькими нотами одновременно. Прочтите результаты Google для "оценки частоты" и "распознавания заметок".
У меня есть несколько примеров оценки частоты Python , но это лишь часть того, что вам нужно решить, чтобы получить ноты из гитарных записей.