- •Содержание
- •Введение
- •1 Анализ исходных данных
- •2 Программное проектирование
- •3 Программная реализация
- •3.1 Детальная реализация функциональных частей по
- •Проверяем время записи и наличие данных в очереди. Извлекаем данные из очереди и записываем в файл. Уменьшаем счетчик размера очереди. Процесс повторяется вновь при помощи цикла while.
- •3.2 Сопроводительная документация по
- •3.3 Анализ по
- •3.4 Тестирование по
- •Заключение
- •Список использованных источников
- •Приложения Приложение а
- •Техническое задание
- •1 Назначение, цели и задачи разработки
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 – Обобщённая схема алгоритма работы программы