В музее оптики СПбГУ ИТМО есть довольно примечательный экспонат — каталог Аббе, представляющий из себя коллекцию оптических стекол различных марок и размеров. Руководство музея желало чтобы этот каталог подсвечивался под музыку, поэтому на свет появился проект музыкальной подстветки каталога, которым я собственно и занимался. Это что-то сродни задаче мигания светодиодом при помощи микроконтроллера, только помасштабнее.
Аппаратная часть была разработана в фирме ЛМТ. Под каждым стеклом расположена светодиодная линейка, подключенная к контроллеру. Контроллеры объединены при помощи витой пары в сеть, подключаемую к концентратору, который в свою очередь подключается через USB к компьютеру.
Моей задачей являлась разработка ПО, которое формировало бы изображение при помощи светодиодных линеек в соответствии с играющей в данный момент музыкой. Т.е. несложный аудиоплеер, который мог бы визуализировать аудио и имел бы при этом интерфейс рассчитанный на тачскрин. Рассказывать про программу в целом я смысла не вижу, поэтому остановлюсь именно на звуковой части.
Для работы с графикой и звуком использовалась библиотека SFML, для выполнения быстрого преобразования Фурье — FFTW.
Для того чтобы извлекать какую-либо информацию из аудиосигнала, необходимо иметь прямой доступ к аудиосэмплам. При помощи связки SFML + libsndfile реализовать это не составило труда.
Во время проигрывания аудиофайла с определенной частотой (в данном случае это частота кадров) берется небольшой участок массива с сэмплами и затем над ним выполняется быстрое преобразование Фурье. Благодаря БПФ из массива с данными звуковой волны получается массив с частотными данными. В случае выполнения реального преобразования размер результирующего массива будет в два раза меньше исходного.
Нужны примерно вот такие кусочки:
Здесь следует учесть один момент, для того чтобы можно было точно отслеживать басовые ноты, для преобразования Фурье необходим довольно большой массив данных. По моим подсчетам, чтобы можно было начинать работу от Ля второй октавы, требовался массив размером 8096. При частоте сэмплирования 44100 это примерно 0,2 секунды, а это довольно большой интервал и в него могут попасть уже не звучащие ноты. Поэтому в данном случае следует прибегнуть к небольшой хитрости, рассказанной еще в учебниках по цифровой обработке сигнала — взять небольшой массив и дополнить его нулями до нужного размера. Это немного изменяет результат, однако в данном случае это не было критично.
Вот над какого вида данными на самом деле выполняется БПФ:
Чтобы получить спектр, необходимо возвести все элементы полученного массива в квадрат, далее, исходя из размера массива и частоты сэмплирования несложно определить в каких элементах массива амплитуды каких частот расположены, т.к. в последнем элементе массива будет амплитуда частоты Найквиста равной половине частоты сэмплирования, а до этого — с шагом соответстующим количеству элементов. Впоследствии из них выбираются значения амплитуд частот максимально близких к частотам музыкальных нот.
Спектр получаемый в результате обработки массива аудиосэмплов:
Дальше еще немного обработки — отслеживание пиков, превышения значения минимального предела чувствительности, преобразование значения амплитуды в значение яркости. После этого можно переходить к формированию изображения.
Т.к. разрешение «экрана» небольшое — 48х3, то особо много вариантов для пространственного расположения нот не придумаешь. Но две идеи пришли в сразу же. В одном варианте столбцы по три стекла объединяются и представляют собой одну ноту, внешне получается нечто отдаленно напоминающее клавиатуру фортепьяно. Во втором варианте одну ноту отображают два стекла стоящих рядом в одном ряду, это ближе к гитаре с тремя струнами и крайне необычной настройкой;)
Последняя часть — формирование цвета. Почти сразу же стало понятно что работать с цветовой моделью HSV здесь гораздо удобнее чем с RGB, так как в основном предстояло управлять тоном. Один из самых простых и логичных методов визуализации звука был предложен еще Ньютоном — по его идее визуальный спектр соответствует одной октаве. Метод Ньютона представлен на изображении ниже справа:
Поэксперементировав, данная идея была развита дальше — в различных режимах производится наложение всего видимого спектра или его части на разное количество октав. Например, 60 градусов тона на четыре октавы, плюс дополнительно постоянное смещение по времени начального градуса.
Другой метод формирования цвета был позаимствован из веб-дизайна. В нем цветовая палитра выбирается при помощи одного из шаблонов.
Вот несколько примеров:
Используя этот метод можно создавать более контрастные изображения. Также как и в предыдущем методе основной тон можно смещать во времени.
Видео работы системы:
Ссылки:
1. Luke Nimtz, Primary Harmonics — Music/Color Theory
2. Visual music blog
Студентам и абитуриентам — такими вещами (и не только такими) можно заниматься в магистратуре СПбГУИТМО, на направлении «Встроенные вычислительные системы»
Аппаратная часть была разработана в фирме ЛМТ. Под каждым стеклом расположена светодиодная линейка, подключенная к контроллеру. Контроллеры объединены при помощи витой пары в сеть, подключаемую к концентратору, который в свою очередь подключается через USB к компьютеру.
Моей задачей являлась разработка ПО, которое формировало бы изображение при помощи светодиодных линеек в соответствии с играющей в данный момент музыкой. Т.е. несложный аудиоплеер, который мог бы визуализировать аудио и имел бы при этом интерфейс рассчитанный на тачскрин. Рассказывать про программу в целом я смысла не вижу, поэтому остановлюсь именно на звуковой части.
Для работы с графикой и звуком использовалась библиотека SFML, для выполнения быстрого преобразования Фурье — FFTW.
Для того чтобы извлекать какую-либо информацию из аудиосигнала, необходимо иметь прямой доступ к аудиосэмплам. При помощи связки SFML + libsndfile реализовать это не составило труда.
Во время проигрывания аудиофайла с определенной частотой (в данном случае это частота кадров) берется небольшой участок массива с сэмплами и затем над ним выполняется быстрое преобразование Фурье. Благодаря БПФ из массива с данными звуковой волны получается массив с частотными данными. В случае выполнения реального преобразования размер результирующего массива будет в два раза меньше исходного.
Нужны примерно вот такие кусочки:
Здесь следует учесть один момент, для того чтобы можно было точно отслеживать басовые ноты, для преобразования Фурье необходим довольно большой массив данных. По моим подсчетам, чтобы можно было начинать работу от Ля второй октавы, требовался массив размером 8096. При частоте сэмплирования 44100 это примерно 0,2 секунды, а это довольно большой интервал и в него могут попасть уже не звучащие ноты. Поэтому в данном случае следует прибегнуть к небольшой хитрости, рассказанной еще в учебниках по цифровой обработке сигнала — взять небольшой массив и дополнить его нулями до нужного размера. Это немного изменяет результат, однако в данном случае это не было критично.
Вот над какого вида данными на самом деле выполняется БПФ:
Чтобы получить спектр, необходимо возвести все элементы полученного массива в квадрат, далее, исходя из размера массива и частоты сэмплирования несложно определить в каких элементах массива амплитуды каких частот расположены, т.к. в последнем элементе массива будет амплитуда частоты Найквиста равной половине частоты сэмплирования, а до этого — с шагом соответстующим количеству элементов. Впоследствии из них выбираются значения амплитуд частот максимально близких к частотам музыкальных нот.
Спектр получаемый в результате обработки массива аудиосэмплов:
Дальше еще немного обработки — отслеживание пиков, превышения значения минимального предела чувствительности, преобразование значения амплитуды в значение яркости. После этого можно переходить к формированию изображения.
Т.к. разрешение «экрана» небольшое — 48х3, то особо много вариантов для пространственного расположения нот не придумаешь. Но две идеи пришли в сразу же. В одном варианте столбцы по три стекла объединяются и представляют собой одну ноту, внешне получается нечто отдаленно напоминающее клавиатуру фортепьяно. Во втором варианте одну ноту отображают два стекла стоящих рядом в одном ряду, это ближе к гитаре с тремя струнами и крайне необычной настройкой;)
Последняя часть — формирование цвета. Почти сразу же стало понятно что работать с цветовой моделью HSV здесь гораздо удобнее чем с RGB, так как в основном предстояло управлять тоном. Один из самых простых и логичных методов визуализации звука был предложен еще Ньютоном — по его идее визуальный спектр соответствует одной октаве. Метод Ньютона представлен на изображении ниже справа:
Поэксперементировав, данная идея была развита дальше — в различных режимах производится наложение всего видимого спектра или его части на разное количество октав. Например, 60 градусов тона на четыре октавы, плюс дополнительно постоянное смещение по времени начального градуса.
Другой метод формирования цвета был позаимствован из веб-дизайна. В нем цветовая палитра выбирается при помощи одного из шаблонов.
Вот несколько примеров:
Используя этот метод можно создавать более контрастные изображения. Также как и в предыдущем методе основной тон можно смещать во времени.
Видео работы системы:
Ссылки:
1. Luke Nimtz, Primary Harmonics — Music/Color Theory
2. Visual music blog
Студентам и абитуриентам — такими вещами (и не только такими) можно заниматься в магистратуре СПбГУИТМО, на направлении «Встроенные вычислительные системы»