LINUX.ORG.RU

Аудификация данных: проблема секвенсинга звука

 , , , ,


0

2

Здравствуйте!
Занимаюсь проектом по визуализации данных, сейчас в процессе генерации звуковой составляющей соответственно данным.

Дано: есть битовая маска из 400 элементов, генерирующаяся из выборки данных на конкретный момент времени. Каждому биту в маске соответствует звуковая волна (волны относительно друг дружки имеют расстояние в 10 Гц). При изменении состояния выборки меняется битовая маска, и, соответственно, массив активных волн.

Задача: секвенсировать эти 0-400 волн в одну звуковую волну для воспроизведения в реальном времени.

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

★★★★★

В качестве выборки данных подключим изображение с видеокамеры, наблюдающей за рукой человека... и получим цифровой терменвокс? :)

hobbit ★★★★★
()

Какие инструменты могут помочь в задаче сведения звуковых волн

С++, например, ничего принципиально сложного нет. Берёшь свои синусоиды вида f(t) = A(t)_n * cos(q_n + f_n * t), где A(t) амплитуда изменения соответствующей гармоники. Далее по ним генерируешь семплы, складываешь и результат нормируешь на сумму A(t)_n. Нужно только медленно, по отношению к 1/f_n (период, в секундах), менять A(t).

mashina ★★★★★
()
Ответ на: комментарий от mersinvald

Проблема именно в сложении.

Если осилил правильно сгенерировать сами синусоиды с функцифми амплитуд, то сделать нормировку уже не проблема. Если сумма всех ф-ий амплитуд есть s(t), тогда нормировку можно выполнять как f(t) * g(s(t)), где g(s) = 1/ (s + A). При такой нормировке при малом кол-ве активированных гармоник (значительно менее A, ф-ии амплитуд нормированы на 1) сложение ведёт себя линейно, а при насыщении плавно выравнивается на 1. Можно придумывать и другие ф-ии нормировки g(s).

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от mashina

Раз уж вы даете такие подробные ответы, может быть, сможете ответить и на такой вопрос:
А как быть, если активных гармоник много? Какие методы синтеза можно применить, чтобы в итоге все не звучало как шум?
Гармоники различаются по амплитуде, как это учесть?

mersinvald ★★★★★
() автор топика
Ответ на: комментарий от mersinvald

Чтобы было менее «шумоподобно», возможно следует расстояние сделать не 10 Гц, а 1/48 октавы, например

Elyas ★★★★★
()
Ответ на: комментарий от mersinvald

Гармоники различаются по амплитуде, как это учесть?

Точно так же, умножаем нормированную ф-ию перехда на нужный коэффициен в диапазоне (0,1], т.е. A(t)_n <- U_n * A(t)_n . Склеивание будет нормироваться аналогично.

ПО последним подсчетам - 1024 ... чтобы в итоге все не звучало как шум?

Чисто технически в склеивании такого кол-ва каналов нет никаких проблем. Если вопрос про «эстетичность» результата, то использование равноудалённых гармоник с фиксированными частотами в таком кол-ве навряд ли вообще может дать вменяемый результат. Да и в принципе +100 бинарных факторов слишком много для кодирования в одно «звучание».

Человеческому уху приятны звуки которые он может легко разобрать, а это в основном составные части речи и звуки от естестенных резонаторов (струны, трубы и т.п.). Они имеют определённые профили по амплитудам и относительным расстояниям между частотами: частоты плавающие во времени и их не так много, ~10-20 штук + «тихие» вспомогательные между ними.

Можно взять пару десятков гармоник и как-то кодировать относительные расстояния между частотами и амплитудами, причём менять их как попало не получится. В общем, задача просто не реашется, придётся потратить время на игру со спектограммами и эксперименты.

mashina ★★★★★
()
Ответ на: комментарий от mashina

Спасибо, буду экспериментировать.
На самом деле, сочетание больше 50 гармоник одновременно вряд ли будет нужно, это просто как опция, но хочется универсального решения задачи.

mersinvald ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.