Как стать автором
Обновить

Комментарии 40

Я как немного энтузиаст электроники и электро-музыкальных инструментов чувствую благоговейный трепет - очень много труда вложено. Но с учетом собственного опыта подозреваю что как музыкальный инструмент оно не очень интересно:

  • во-первых отсутствует я так понимаю контроль над звукоизвлечением - ни громкость отдельной "струны" ни вот этот "звук зацепления" - ни приглушить её рукой

  • отсутствует "мускульная" обратная связь - по-моему на этом еще труднее играть чем на терменвоксе :)

тем не менее, повторюсь, яростно аплодирую трудолюбию и погружению в тему :)

Спасибо!

Громкость изменить быстро нельзя, но есть под второй рукой крутилка громкости. Если не в ноте, а во всей мелодии нужен подъём/спад - вполне возможно.

Да, по нотам попасть сложно, но аккорды уже легче. Понятно что не для концерта в БТ, а потренькать на гитарниках)

Видеозапись добавил

Можно было бы добавить пентатонику. Там в принципе даже не зная нот что-то будет получаться :)

Мегакруто!

Но позволю себе дать пару советов исходя из собственного опыта.

С оптическими датчиками, действительно, всё непросто. От засветки помогает работа на переменном сигнале. Мультиплексирование на разных несущих частотах, и больший, чем х2, мультиплекс по времени позволяет ещё и избавиться от фокусировки. Естественно, не бесплатно, а усложнением схемотехники)

Ну или хотя-бы такие-же фототранзисторы, только с ИК-фильтром, в тёмном корпусе, уже помогут. А фокусировку делать на стороне приёмников, а не передатчиков. С точки зрения сигнала не важно, где, можно и не обеих сторонах. А для избавления от фоновой засветки - важно.

Светодиоды SMD ни разу не точечные. Чем мощнее, тем больше площадь кристалла и хуже фокусировка. То на то и выходит).

С приёмниками - почти та же фигня. Больше чувствительность - просто больше площадь. Но это про фотодиоды. А у фототранзисторов чувствительность разменивается на стабильность коэффициента передачи, что тоже малоприятно.

Но я когда-то делал датчик с кучей лучей как-раз по вашей оптической схеме, в виде набора "струн", и выбрал упрощение оптики и надёжность. Фактически это вылилось в набор одинаковых плат, что не так сложно в производстве. С такими же дешёвыми 5мм фото- и свето-диодами.

Ну и синтезом звука я бы сразу не стал заморачиваться. В MIDI (он же UART) всё можно вывести на первом этапе. Но послушать интересно, жду ссылок.

Спасибо!

Работа на переменном сигнале это интересно, но усложнит электронику, там места мало.

ФТ в чёрном корпусе рассматривал, правда там общая чувствительность тоже ниже. Можно эти маркером закрасить).

Нет, фокусировка на передатчике, я по-разному экспериментировал. Плотность энергии выше при фокусировке передатчика. А у ФТ уже своя диаграмма направленности в 20°. Оба фокусировать это лучше, но опять же линзы и место.

Вы делали с упрощением оптики - как, можно подробнее?

Плотность энергии выше при фокусировке передатчика

Странно, что у вас так получилось. Если фокусировать приёмник, он соберёт свет с большей площади. Свойство взаимности у радиоволн (и оптики) есть - сколько в одну сторону света пройдёт, столько и в обратную. Из-за этого, кстати, и диаграммы направленности ФТ и LED перемножаются, и можно рассчитывать не на 20°, а на 10° на самом деле.

Вы делали с упрощением оптики - как, можно подробнее?

Я ничего дополнительно не фокусировал. Каналов нужно было много, и я ставил линейку из одинаковых плат. В пределах платы я мультиплексировал по времени (за 1-2 мс вполне получалось измерить и переключиться на соседний LED и ФД). А между платами - мультиплекс по несущей частоте (100-200 кГц, что такой же, как у вас, мк F103 успевал оцифровать и обработать).

С мультиплексом, как тут говорят, можно по-разному делать. И по частоте, и по времени, и по коду, и смешать это всё в разных пропорциях. Найти компромисс между скоростью реакции и сложностью схемы.

Что-то типа того вышло

Один из промежуточных вариантов вот такой был. Это приёмник. Передатчик выглядит также, но схема сильно проще.

Простейшие аналоговые мультиплексоры 74HC4051, несколько каскадов усиления на обыкновенных транзисторах BC847, мк 32F103 (тогда ещё настоящий STM;)), обвязка для соединения в большую линейку.

С небольшими оптимизациями не выходя из обычного Си, мк на приёме занят где-то на 25% (20 тактов на обработку выборки с частотой 860 кГц). То есть, и 3-4 частоты одновременно такой мк обработать тоже сможет. Передающий мк не занят почти ничем - всё аппаратно генерится.

Странно, что у вас так получилось.

Давайте посчитаем. Беру размеры, близкие к существующим в проекте.

Примем мощность передатчика такую, что на расстоянии 1мм он даёт 1Вт/мм2 (да, надо считать через стерадианы, но пока упростим). Расхождение луча 1 радиан. то есть на расстоянии R луч освещает площадь S = R^2

Вариант 1. Линза с фокусным 10 мм и площадью 100кв.мм у передатчика. Плотность, дошедшая до линзы 1/100 Вт/мм2. Пучок параллельный (но можно и сузить) идёт 440 мм, и пусть теряет 50%. У приёмника получаем 1/200 Вт/мм2.

Вариант 2. Передатчик светит на 440 мм. Плотность 1/r^2 = 1/200000. Фокусируем линзой из 100 кв.мм в 1 кв.мм. то есть усиливаем в 100 раз. получаем 1/2000 Вт/мм2

Разница в 10 раз.

В варианте 1 пучок не параллельный.

В лучшем случае идеальной фокусировки со светодиода 1x1 мм вы получите его изображение размером 44х44 мм. Что как раз в 20 раз тусклее.

А вот с 20° и 10° я погорячился.

Специально нашёл более видящую камеру в ИК, сфоткал пятнышки, добавил фотку в статью. В теории оптики вроде как равноценно по получаемому изображению. Но результат вот, я делал и наоборот - явно хуже.

Это тоже интересные тестовые данные. Для отладки - самое то. Фокусировать приёмник поэтому и тяжелее, что так просто на фотке качество не посмотреть.

Диаметры пришедших лучей не более 10мм

Если б так было, в объектив камеры они бы не попали. Светили бы себе мимо ;)

А вот в попали в камеру 5 LED чётко. Мощность света от каждого можно грубо оценить в фотошопе. И из расстояния съёмки получается прикинуть реальную диаграмму направленности передатчиков.

Я вас не понимаю. как будто переведено с другого языка (?)

Причём тут объектив камеры? Прочитайте описание - это места прихода лучей. На фотке не LED, а фототранзисторы (которые наверху в колковой раме). диаметр ФТ = 5мм, диаметр пятна, попадающего на него примерно в 1,5-2 раза больше.

Да, это я ошибся, поэтому и непонятки. Я бегло посмотрел в подпись под новой картинокой, текст не перечитывал. Решил, что это LED. Сам пользуюсь смартфоном для визуализации ИК.

Сфоткать пятна - вот это действительно круто для телефона.

Или не телефон? IP-камеры обычно хорошо ИК видят. Если их отвёрткой предварительно "настроить", заблокировав ИК-фильтр

Неплохой синтез для такой простой схемы, полифония, всё как надо!

А вот нелинейное преобразование лимитера сильно слышно, особенно когда близкие ноты играют. Ну или может запись такая, не знаю. Если не получается увеличить динамический диапазон (разрядность), лучше компрессор, чем лимитер. В вашем случае - это сжимать динамику в момент расчёта затухания, а не после суммирования всех сигналов.

А на арфе струны не глушат при игре?

Близкие ноты дают какую-то реверберацию. Может так и надо.

Что вы имеете ввиду "лимитер"? Сигнал в насыщение не уходит до 16 одновременно взятых нот. А суммирование двух-трёх нот почти линейное. Или я не понял мысль...

1 нота в максимуме это 197000 единиц. Максимум для ШИМ 800 ед. Можно построить график x / (x / 1024 + 1200), посмотреть

Скорее всего да, вот это преобразование, мягкий лимитер:

Сумма подвергается нелинейному преобразованию, чтобы не было перегруза, но и даже одну ноту было слышно хорошо. Функция преобразования суммы сигналов в выход  Out = x / (x >> 10 + 1200), при этом одна нота звучит на 29% от общей громкости, а пять нот — на 77%.

Нелинейные искажения - это для электро-гитары хорошо. Для классической полифонии это фигово. И сильно слышно на мой взгляд.

А может динамик или запись такая, х.з.

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

Сделал запись нот по отдельности и аккордом

Спектр Ре+Ми
Спектр Ре+Ми
Спектр Ре+Ми+Фа.
Спектр Ре+Ми+Фа.

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

Звук: https://disk.yandex.ru/d/Br1f2QBhf7Izvw

Если просто складывать, то боюсь что одну ноту совсем тихо. но я могу переписать код для проверки. Думаете будет лучше?

Жёлтым пометил. Это разностные частоты как-раз из-за нелинейности. Частот больше, конечно, просто они на картинке замаскированы сигналом.

Нелинейность и шум
Нелинейность и шум

Если они -20 дБ от тона, коэфф.нелинейных искажений что-то около 10% получается. Это очень много.

Зелёное - это скорее всего артефакты, слышные как жужжание. Откуда они, не скажу сразу, надо копать. Но обратите внимание, что их спектр симметричен относительно 3,05 кГц на обеих картинках.

Если просто складывать, то боюсь что одну ноту совсем тихо. но я могу переписать код для проверки. Думаете будет лучше?

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

Если поможет, тогда можно и компрессию вводить.

Сама схема синтеза звучит, я считаю, очень хорошо. Артефакты бы только убрать или хорошо замаскировать.

Пальцами глушат, как и у гитары. Модератора как в пианино там нет. Но зато может быть несколько педалей для перестройки тона.

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

Спасибо. Да, уже переговоры с арфисткой идут)

Можно попробовать моделировать каждый светодиод уникальным сигналом (частотой, м-последовательность, etc), а приёмник сделать единым, протяженным. Фокусировать излучатели всё равно придётся

Рассчитал и сделал фильтр низких частот второго порядка на операционном усилителе.

Где вы нашли такую схему? Это не ФНЧ. Это сумма фильтра низких частот и полосового. Где-то в районе 1.5 кГц пик.

Резисторы другие, поправил в статье. Моделирование даёт полку до 1 кГц, потом спад. Полка неидеальная, так-то только ШИМ 40 кГц отфильтровать. я сделаю записи отдельных нот, посмотрю уровень. Осциллограф показывал приемлемую АЧХ.

Посмотрите схемы фильтров Саллена-Ки и с многопетлевой обратной связью.

Кроме этого, в некоторых случаях имеет значение ещё и реакция фильтра на резкие изменения сигнала. Чтобы не было выбросов, выбирают небольшие значения добротности или используют пассивные RC фильтры.

А, активный фильтр? так сначала и было, но ОУ входил в самовозбуждение, я мучал схему пока не понял что ОУ брак. Поставил нормальный, но плата была уже переделана на пассивный фильтр. Да, активный можно настроить с лучшей АЧХ.

Если сделать наоборот луч "конусом", а приемники побольше размером, то перекрывая пальцем только часть луча, можно менять громкость или тональность.
Еще можно добавить видимого света, тогда если пустить дым от дым-машины, то будут еще оптические эффеткы. Особенно интересно может получиться на сцене, только арфу побольше сделать.
Как вариант, можно добавить "струны" (без звука, просто нити), чтобы играть не совсем на ощупь.

Интересно. Это уже получается другое устройство, может в будущем реализую. Я делал аналоговые датчики на щелевой оптопаре, для микроперемещений из-за малых размеров приёмника (а большие кристаллы только у солнечных панелей бывают, ФТ таких не встречал). Аналоговый датчик на оптике лучше получается на отражении - там диапазон расстояний больше.

Нити, кстати могу попробовать поставить

Дела софтовые маловато раскрыты. Я так и не понял - штука то одноголосная (+гармоники), звучит только одна струна, никаких аккордов?

Софтовые дела я вроде бы описал все по-порядку. Но если что-то не хватает - спрашивайте, напишу.

Таймер основной на 16 кГц.

В нём - опрос циклично 10 дискретных входов, определение было ли затенение и сколько длилось (массив из 20 значений для каждой ноты)

Если затенение было - запись стартового значения амплитуд и их гармоник в ячейку (i = ноте) массива амплитуд[20]

Каждый n-ый такт снижение всех играющих амплитуд по экспоненциальной формуле

Цикл (i=0 to 19) по всем 20 нотам, в котором:

{

t[i]+= h // прибавление счётчика h зависит от частоты ноты. для каждой ноты свой счётчик. Счётчики для гармоник это t[i]*2, t[i]*3 и так далее.

U += A[i] * SIN[t[i]] // амплитуды умножаются на значение синуса и все складываются

}

PWM = 800 + U / (U >> 10 + 1200) // выход на ШИМ

Нет, не одноголосая:

С тактовой частотой 16 кГц происходит суммирование всех играющих нот. Для снижения нагрузки нота отключается при падении амплитуды менее 0,7% от начальной.

Аккорды получаются.

понятно, тут по сути 20 голосый синтез в реальном времени, SIN[t[i]] - табличка с синусами?

ЦАП не было желания использовать?

Да. Параграф "Синтезирование звуков"

В памяти хранится массив (1024) в 1 период sin сигнала, метка номера ячейки пробегает циклично по массиву с заданным шагом, который соответствует высоте ноты. 

Про ЦАП думал, даже купил MCP4725. но ему нужна скорость более 400 кГц по I2C, что нестандарт, и решил пока сделать на ШИМ,

400 кГц по I2C как раз стандарт

The MCP4725 has a two-wire I 2C compatible serial
interface for standard (100 kHz), fast (400 kHz), or high
speed (3.4 MHz) mode.

если что - с частотой дискретизации это не связано :)

в STM32F103 нет встроенного DAC, с другими контроллерами можно было бы использовать встроенный, да еще DMA притянуть.

При 400 кГц не укладываемся в дискретизацию. Но всё можно сделать и лучше и круче, если будет спрос)

Мало что он поменяет в звука, даже если через I2C успеете данные передать. Причём передавать придётся очень вОвремя - лаги по времени вносят слышимые искажения. ШИМ-таймер таки аппаратный, чётко работает.

Любой аудио-ЦАП будет на порядок лучше - и питание отфильтрует, и нужную АЧХ после себя оставит. Многие даже уровень отрегулируют. Не встречайте на обратном пути товарища, который пытался сделать наоборот - взять аудио-ЦАП в качестве ЦАПа "сказал-сделал".

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации