Использование PyGame для визуализации сигналов звукового диапазона с частотой дискретизации 44100 Гц в реальном времени

в 14:14, , рубрики: звук, звуковая карта, оцифровка звука, цифровая обработка сигналов

PyGame — это популярная библиотека для разработки 2D игр на Python. Первоначальная версия PyGame была представлена Питом Шиннерсом в октябре 2000 года, и с тех пор библиотека постепенно завоевала популярность благодаря простоте в использовании, хорошей документации и активному сообществу. Изначально PyGame создавался для работы с ранними версиями Python (в том числе Python 2) и основывался на библиотеке SDL 1. SDL – это кроссплатформенная библиотека на языке C, предоставляющая низкоуровневый доступ к аудиоустройствам, клавиатуре, мыши и графическим функциям через OpenGL, DirectX и др.

Актуальными являются версия 2.x, которые полностью поддерживают Python 3 (начиная с 3.7 и выше) и имеет ряд обновлений, включая улучшенную поддержку OpenGL, аппаратное ускорение, а также возможность работы с вертикальной синхронизацией на мониторах (VSync).

В данной статье рассмотрено необычное применение PyGame – это быстрый вывод графиков, например, потоков данных с частотой дискретизации 44100 Гц со звуковой карты, что может быть необходимо для визуализации звуковых сигналов.

Для такой задачи хорошо подходят следующие функции и возможности PyGame:

  • pygame.display.flip() очень быстро обновляет содержимое экрана после произведённых изменений.

  • С помощью pygame.time.Clock() можно контролировать FPS, что позволяет требовать от системы обновление до 60 кадров и более в секунду, что важно при отображении сигналов в реальном времени.

  •  Новый флаг vsync (например, передаваемый в set_mode с параметром pygame.RESIZABLE или pygame.OPENGL) может использоваться для синхронизации обновления экрана с вертикальной разверткой дисплея.

Основной цикл (обычный в PyGame):

running = True
while running:
    # Обработка событий
    # Генерация шума и обновление данных графика
    # Очистка экрана
    # Отрисовка сетки и графика
    # Подсчет и отображение FPS
    # Обновление экрана
    pygame.display.flip()
    clock.tick(FPS)

pygame.quit()

Исходные коды для PyGame и других графических пакетов можно посмотреть в моей статье: Визуализация данных в реальном времени. Matplotlib, PyQTGraph, pyOpenGL, VisPy, Bokeh и др.

Автор: Oksenija

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js