Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РПЗ.docx
Скачиваний:
24
Добавлен:
09.02.2015
Размер:
518.47 Кб
Скачать

2.2 Модель музыкального плеера в Simulink

Matlab – отличный пакет для решения математических задач. Мы воспользуемся им для моделирования нашего музыкального плеера с эффектом phaser.

Приступим к реализации нашего эффекта.

Еще раз повторяя сказанное ранее, мы должны разделить поток на два или несколько, один пустить без искажений, а на другие наложить небольшую временную задержку. Затем все сигналы суммируются и выводятся в аудиоустройство.

Вот как выглядит схема, собранная в симулинке.

Рис. 1

Остановимся поподробнее на каждом элементе этой схемы.

Рис. 2

Этот элемент позволяет нам указать путь к нашему аудиофайлу и использовать его в качестве сигнала.

Зайдем в его настройки:

Рис. 3

Самый главный параметр здесь – Samples per audio frame. Ставим его в единицу. Что такое sample и frame? Это базовые понятия в цифровой обработке музыкальных сигналов. Отцифрованный звук поступает в виде числовых отчетов непрерывным потоком. Для удобства обработки эти отсчеты формируются в массивы, sample (сэмплы). Сэмплы в свою очередь группируются в двумерную матрицу (frame). Поставив единицу в эту графу, мы объявили, что фрейм у нас будет состоять всего из одного сэмпла, т.е. фактически не будет отличаться от него.

Рис. 4

Блок Delay определяет задержку звукового сигнала. Индекс 0 в показатели степени означает, что задержки не будет и сигнал без искажений пройдет через этот блок. Задержка измеряется в сэмплах. В 1 сэмпле 8 бит = 1 байт информации. Для нашего не совсем качественного mp3 файла при частоте дискретизации 44 кГц необходима передача данных хотя бы 128 кбит/с. Таким образом происходит передача около 16000 сэмплов в секунду. Варьируя задержку в блоке Delay мы можем добиться нужного нам звучания.

Рис. 5

Это окно настроек блока Delay.

Мы можем менять параметры Delay (samples) от 0 до неограниченного числа, но запомните, что при 16000 у нас будет задержка ровно на секунду в музыке, а нам нужна задержка гораздо меньшая.

Как видно из Рис 1, сигнал разделяется на 6 потоков, один который без блока задержки, а 5 остальных с таким блоком. Потом все сигналы суммируются при помощи сумматора.

В конце суммирующий сигнал выводится на аудиоустройство пр помощи блока to audio device

Теперь для задания нашего эффекта phaser установим в блоках delay следующие значения:

Delay1 1000

Delay2 2000

Delay3 3000

Delay4 4000

Delay5 5000

Звук приобрел характерный металлический оттенок. Вы можете сами попробовать поменять значения задержки и понаблюдать за изменениями.

Теперь приступим к реализации схемы нашего плеера с эквалайзером. В прошлом семестре мы выполняли аналогичную работу, поэтому я не буду вдаваться в подробности проектирования эквалайзера. Полученная итоговая схема:

Рис. 6

Как видно из рисунка, звук разделяется на 7 потоков и каждый идет через свой фильтр, каждый из которых проектируется в специальном инструмент matlab fdatool. После чего звук поступает в блок gain, который либо усиливает его, либо ослабевает. Таким образом мы можем отрегулировать звучание по частотам, сделать его высотным или басовым.

Для отладки и наглядного тестирования эффекта phaser я быстро создал пользовательский интерфейс в инструменте matlab guide

Подробный код описан в прошлом семестре, скажу только, что вертикальные ползунки управляют усилением полос, каждый в своем диапазоне частот от BASS до TOP OCTAVE

Возможные значения усиления от -10 до +10 дБ

Кнопка default возвращает значения усиления всех полос в 0 дБ

Горизонтальные ползунки управляют задержкой звукового сигнала, каждый своим потоком. Возможные значения задержки от 0 до 16000 сэмплов в каждом из потоков. Кнопка swith phaser off возвращает значение задержки в 0.

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

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

2.3 Возможные пути выполнения на

высокоуровневом языке

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

  1. Для Windows самая рациональная связка - Visual Studio, WinForms, DirectShow.

  2. Для Mac OS X - XCode, Cocoa, CoreAudio.

  3. Для Linux – Geany, GTK, Gstreamer.

В моем активе были все 3 операционные системы, но я решил начать с самой распространенной – Windows, тем более, что мы неплохо освоили в свое время Visual Studio и WinForms. К моему сожалению, поставить DirectShow не удалось, спросить было не у кого, поэтому это быстро мне отбило охоту.

Что касается Mac OS и в частности CoreAudio, мне удалось наткнуться на отличную книгу,

Learning Core Audio: A Hands-On Guide to Audio Programming for Mac and iOS [Chris Adamson, Kevin Avila]

Я прочитал введение на русском языке, автор готовит читателей к решению сложных задач на достаточно низком уровне программирования, предполагает знания objective c и библиотек cocoa. Я решил подтянуть свои знания, поставил XCode, прочитал небольшую, но хорошо написанную книгу по objective C

Become an Xcoder. Start Programming the Mac Using Objective-C. By Bert Altenberg, Alex Clarke and Philippe Mougin

Рекомендую тем, кто хочет быстро научиться что-либо писать на Mac и OS X

Кроме того, я прослушал видеокурс по библиотекам cocoa на youtube, там их достаточное количество.

К моему разочарованию, дальше работа не двинулась, т.к. после русского предисловия книги мне предложили заказать такую книгу, чего я делать не стал, а в сети найти удалось только англоязычный вариант, который для изучения был весьма непрост. Тем не менее, у меня твердо сложилось убеждение, что CoreAudio определенно лучший инструмент для создания мультимедийных приложений. Появилось желание это изучить, чем я возможно займусь, когда появится время.

Итак, остается Linux, система, с которой я был не знаком до сиз пор, но проект выполнил именно на ней. Тут были уже люди, у кого можно спросить и получить вразумительный ответ. Я установил Ubuntu, Geany - компилятор языка С, библиотеки gstreamer и gtk.

Я и моя коллега Евгения Ахунзянова написали подробную инструкцию, как все это устанавливается и компилируется на Linux. Это можно найти в самой последней версии методички.

Как устанавливать Linux на компьютер мы описывать не стали, т.к. все это подробно рассказывается на курсе Технологии Программирования.

Хоть это и было подчеркнуто в методичке, но позволю повториться себе еще раз про gtk и gstreamer.

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

Gstreamer – мультимедийный фреймворк, написаный на языке C и использующий систему типов GObject. Используется в различных плеерах, редакторах, программах для создания конференций и портативных устройствах. Документацию на него можно найти по адресу:

https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html

Все на английском, поиск непростой, но реальный и все описания и даже примеры кодов там есть.

Как работает звуковой поток в Gstreamer описано в методичке.

Что касается gtk, это тоже библиотеки, только интерфейса.

Документацию можно найти здесь:

http://www.gtk.org/api/2.6/gtk/index.html

Наряду с библиотеками интерфейса gtk я рекомендую обратить внимание на библиотеки Qt. Описание происходит на языке С++

Я немного поразбирался с этими библиотеками для системы Mac OS, очень просто в освоении, только вопрос о связи с gstreamer или другими инструментами остается открытым.

Такой простенький интерфейс можно написать буквально за пару минут. Кому интересно, советую обратить внимание. На youtube можно найти множество видеокурсов по програмированию на С++ с использованием библиотек Qt

Теперь, когда мы знаем возможные пути развития, можно уже остановится конкретно на нашем методе реализации, а именно:

Ubuntu + geany + gstreamer + gtk на языке С.

3

Практическая часть

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]