Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 семестр / course / Пояснительная записка.docx
Скачиваний:
2
Добавлен:
18.02.2023
Размер:
154.98 Кб
Скачать

2 Программное проектирование

Для написания программы будет использован высокоуровневый язык программирования общего назначения Python. Он ориентирован на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Python поддерживает структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное программирование. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений, высокоуровневые структуры данных. Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ.

Будет использован процедурный стиль программирования. Состояние приложения будет храниться в глобальных переменных и конфигурационном файле.

Для реализации программы необходимо подобрать библиотеку для работы с аудио вводом и выводом с поддержкой кроссплатформенности. Это необходимо чтобы захватывать сигнал со звуковой карты и обрабатывать его. Существует множество готовых библиотек, подходящих под эти требования, наиболее популярные из них:

  • BASS (BASS audio library);

  • FMOD;

  • OpenAL;

  • PortAudio.

PortAudio является аудиобиблиотекой, которая дает возможность воспроизводить и записывать звук независимо от используемой платформы. Без нее приложение не сможет использовать звуковую карту устройства, на котором оно работает. В PortAudio предоставляются кольцевые буферы, средства, позволяющие изменять частоту дискретизации при воспроизведении/записи, и, самое главное, предоставляется интерфейс API, который скрывает различия между аудиообработкой на платформах Mac, Linux и Windows. В PortAudio есть файлы альтернативных реализаций для поддержки этого интерфейса API для каждой из платформ.

Реализацией библиотеки PortAudio в языке программирования Python является библиотека sounddevice. Для работы этой библиотеки необходимо дополнительно установить библиотеку NumPy. В список возможностей библиотеки NumPy входит:

  • поддержка многомерных массивов (включая матрицы);

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

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

Для выбора формата аудиофайлов кратко рассмотрим популярные аудиоформаты для записи данных, их отличия.

Цифровой аудиоформат — формат представления звуковых данных, используемый при цифровой звукозаписи, а также для дальнейшего хранения записанного материала на компьютере и других электронных носителях информации, так называемых звуковых носителях.

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

Формат файла определяет структуру и особенности представления звуковых данных при хранении на запоминающем устройстве ПК. Для устранения избыточности аудиоданных используются аудиокодеки, при помощи которых производится сжатие аудиоданных. Выделяют три группы звуковых форматов файлов:

  • аудиоформаты без сжатия, такие как WAV, AIFF;

  • аудиоформаты со сжатием без потерь (APE, FLAC);

  • аудиоформаты со сжатием с потерями (MP3, Ogg).

Аудиоданные получаемые из аудио ввода будем хранить без сжатия в аудиоформате WAV.

Waveform Audio File Format (WAVE, WAV, от англ. waveform — «в форме волны») — формат файла-контейнера для хранения записи оцифрованного аудиопотока, подвид RIFF. Этот контейнер, как правило, используется для хранения несжатого звука в импульсно-кодовой модуляции. Однако контейнер не налагает каких-либо ограничений на используемый алгоритм кодирования.

Для создания и записи аудиофайлов в формате WAV будет применена аудиобиблиотека SoundFile, основанная на libsndfile, CFFI и NumPy.

Libsndfile — это C-библиотека для чтения и записи файлов, содержащих оцифрованный звук разных форматов через единый программный интерфейс. Эта библиотека изначально проектировалась так, чтоб компилироваться на разных платформах.

Среди основных возможностей libsndfile, помимо мультиплатформенности и многоформатности данных:

  • возможность конвертирования форматов «на лету», включая конвертацию типов и разрядности звука, а также порядка байтов;

  • опциональная возможность нормализации звука;

  • запрашивание поддерживаемых форматов и описания для каждого из них).

В системах Windows нет понятия «исполняемого режима». Установщик Python автоматически ассоциирует файлы .py с python.exe, так что двойной щелчок по файлу Python будет запускать его как скрипт. Расширение также может быть .pyw, в этом случае окно консоли, которое обычно появляется, подавляется. Таким образом приложение будет запускаться в скрытом режиме.

Для скрытного запуска программы в Linux необходимо использовать утилиту nohup. nohup — UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (SIGHUP). Таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы. Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущем каталоге; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.

nohup не переводит автоматически команду в фоновый режим; пользователь должен сделать это явным образом, завершив командную строку символом «&».

В программе должно быть предусмотрено следующее:

  • подключение выбранных библиотек;

  • объявление глобальных переменных;

  • настройка логирования;

  • функция, вызываемая при получении данных из потока аудио ввода;

  • чтение настроек из файла конфигурации;

  • создание файла конфигурации;

  • создание и прослушивание потока аудио ввода;

  • создание папок и аудиофайлов;

  • расчет уровня громкости;

  • создание алгоритма акустопуска.

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

Рисунок 2.1 – Обобщённая схема алгоритма работы программы

Соседние файлы в папке course