Привет всем, это статья про DIY разработку и изготовление оригинального музыкального инструмента.
Когда-то я увидел электронный конструктор «арфа» где на рамке стояло 7 лазерных диодов и простой генератор тона. И вот захотел сделать лучше и больше – начался проект Оптоарфа. Как и всегда, мне неважно, есть ли такое изделие в мире, важно желание творить и привнести свои идеи.
Какие были выбраны решения, как воплощались через тернии, случилась ли труба или арфа – читайте ниже
Определение габаритов, количества нот
Так как проект экспериментальный, выбрал средний размер инструмента – примерно 500мм по деке.
Струны заменены лучами. Для оптических «струн» решил использовать инфракрасные светодиоды, чтобы не было видно лучей. Выбор ИК обусловлен также доступными приёмниками - фототранзисторам, они почти все работают в ИК-области.
На классических арфах большое количество нот, до 48, тут столько не помещалось. Сначала надо было определиться с минимально допустимым расстоянием между «струнами», так как я не знал, насколько получится сфокусировать луч, чтобы он не зацеплял соседние датчики. После расчётов и экспериментов с фокусировкой разным линзами удалось сделать расхождение ~15мм на длине луча 430мм. Так родился компромисс между размерами, количеством нот, расстоянию между лучами.
Итого – 20 нот, шаг между струнами 19мм, длина деки 510мм, высота арфы 500мм. ИК-излучатели снизу в деке, фототранзисторы (ФТ) сверху в колковой раме.
Корпус
3-D модель разработал в SolidWorks, ссылка на файлы в конце статьи. При моделировании я ориентировался на фото из Сети (95% фото арф только с одного ракурса, wtf), доступность материалов и возможности раскроя. Колоночка звуковая на 3 Вт у меня была, как раз круглая без излишеств. Она и определила толщину деки.
Конструкция классической арфы представляет собой жесткую и прочную раму в виде треугольника - внизу корпус-резонатор (дека), сверху колковая рама с креплением струн, струнам параллельна колонна. Но я в процессе проектирования подумал наперёд – про удобство переноски и решил, что корпус арфы должен быть разборным.
Одновременно с возможностью разборки конструкция должна быть жёсткой и не люфтить нигде, чтобы не сбить оптические линии «струн». Колковая рама и колонна сделаны коробчатой конструкции (2 фанерные стенки и деревянные рейки между ними), что дало жёсткость и позволило уместить фотодатчики и провода. В желании сделать изящнее — отказался от видимого крепежа и почти всё собирал на клей. Да, разобрать невозможно и отладка одновременно идёт со сборкой.
Крепление колонны к деке сделано с помощью мощных стальных уголков. Маскировка уголков – бумажный скотч, покрытый тем же лаком. Вот они прикручиваются винтами, тут не знаю другого варианта.
Изгиб колковой рамы должен быть красивым и похожим на настоящие арфы. Несколько часов в SolidWorks – и готово. В колковой раме располагаются фотоприёмники, от них идёт много проводов. Лучше её сделать не полностью съёмную, а складывающуюся на деку, это ещё и убавит степени свободы при сборке. Нашёл точку, где можно сделать поворотную петлю, спроектировал подвижную часть колковой рамы и неподвижный завиток. Сочленение происходит через толстый штифт с плотной посадкой.
Точка крепления колковой рамы к стойке - разборное соединение, которое должно быть незаметно и тоже быть жёстким. Здесь используется система шип-паз с креплением винтом М6 через верх рамы. Винт полностью скрыт внутри рамы. В целом, пришлось поиграться с углом сопряжения деталей, подгоняя все точки – ось поворота, координаты крепления завитков, угол наклона стойки к деке.
Основное неудобство – что завиток при наладке электроники нельзя закрепить обратно к деке, замкнув размерное кольцо. Завиток крепится к боковой стенке деки, а она ставится последней. Прищепки, струбцины, скотч – всё пошло в дело).
Весь корпус пилился из фанеры 4мм, кое-где тонкий пластик, покрытый бумажным скотчем. Лак «янтарный», здесь у меня криворукость, есть потёки и разводы.
Все комплектующие я брал самые доступные, по цене, по срокам. Так как я не до конца уверен в успехе проекта, делается-то просто по фану. Всегда можно улучшить, заказать лазерный раскрой, фрезеровку, платы, 3D-печать… Предвидя комментарии по этому поводу))
Линзирование
Каждый светодиод должен излучать узкий параллельный пучок света. Лазеры я сразу исключил из проекта – не хотел видимых лучей, а ИК-лазеры дороги. Всё равно бы потребовалось расширять луч лазера для надёжности попадания в ФТ.
Имеющиеся светодиоды дают расхождение 25°, это конечно много. Конфигурация корпуса линзы светодиода даёт протяжённый источник. Если фокусировать луч дополнительной линзой — это даст изображение всего светодиода, увеличенное в размерах, причём размер тем больше, чем короче фокус линзы.
Как с этим бороться – можно применить светодиоды без линзы, допустим SMD, это почти точечный источник. Этот вариант очень неудобен для ручной сборки, их трудно крепить и настраивать местоположение, либо нужна плата для каждого светодиода, а 20шт будут стоить ощутимо.
Вариант 2 (реализованный) – перекрыть световой поток обычного 5-мм светодиода, создав искусственную точку. Проще всего оказалось сделать крышечки из жести с отверстием 0,8 мм напротив оси светодиода. Это помогло, при линзе с фокусным расстоянием 25мм на дистанции 420мм луч образовал пятно не более 15 мм диаметром. Интенсивность чуть снизилась, зато гарантировано нет засветки соседних приёмников.
Сами линзы – их оказалось найти непросто, кажется вроде бы китайские товарищи сделали всё уже. Но нет, дешёвых 10-мм пластиковых линз россыпью (не разбирая фонарики) я не нашёл. Спас меня кабошон – стеклянные «крышечки» для изготовления медальонов, серёжек. Их можно найти в разделах для рукоделия. Это плоско выпуклые линзы, неидеальные, но почти без искажений. Стекло даже лучше.
Крепление линз
Хороший вариант – это распечатать корпуса для линз и с ложементом под светодиод. Однако, у меня был ровный и жёсткий вспененный полиуретан, нарезал кубики с отверстиями из него. Ложемент не является фиксированным креплением светодиода, так как оптическую ось необходимо было подбирать под каждую ноту. Я себе уже представлял часы мучений с невидимыми лучами и перемещениями на доли мм.
С фототранзисторами проблем (кроме поиска подходящих) не возникло. Закрепил все в кабель-канале, на суперклей. Шаг от 19 мм до 21мм. Кабель-канал с ними приклеил к фанере колковой рамы.
Одновременно со сборкой конструкции вёл провода, так как многие полости закрывались навсегда. Основная электроника крепится на боковой стене деки, и перекрывается ребром с линзами. На другой стенке деки - только колонка, эта стенка ставилась после настройки оптики, что добавляло риска. Донышко деки сделал съёмное, на винтах впотай. Так есть доступ к контроллерам и аккумулятору.
Электроника и алгоритмы
В качестве управляющего контроллера применена народная плата на STM32F103С6Т6
Важный вопрос во всей конструкции – это уверенное срабатывание фототранзистора [ФТ] от прерывания светового потока. На приёме луча фототок ФТ должен быть такой, чтобы на нагрузочном резисторе создавать более 2,4 В (логическая 1 у STM на уровне 2,2 В) и одновременно фототок от фоновой дневной засветки не должен создавать более 0,8 В на резисторе (уровень лог. 0). Это значит световой луч должен попадать чётко на ФТ (как это сделать на сборной конструкции?) и быть ярким, что позволит ставить нагрузочный резистор невысокого сопротивления. ФТ брал SHF300, в такой конструкции он даёт 0,1мА и более.
Были мысли перевести ФТ на 5-вольтовое питание, чтобы был запас по напряжению на транзисторе в открытом состоянии. Но я пошёл в сторону более качественной фокусировки, чтобы не было неопределённых уровней, да и не все входы у МК толерантны к 5В.
Для снижения количества задействованных входов применил динамическое переключение между двумя группами. То есть по 2 соседних ФТ нагружены на 1 резистор, он подключён к одному дискретному входу МК. Светодиоды также сгруппированы в чётную и нечётную группы. Это сделано для того, чтобы светились не все лучи сразу, а через 1, и не было паразитной засветки от соседнего светодиода. Поэтому ФТ можно ставить по 2 в параллель на 1 вход, однако для надёжности группы ФТ тоже питаются по очереди. То есть один из ФТ в паре всегда отключен от питания и соответствующий светодиод тоже выключен. При засветке от соседнего светодиода или фоновой засветке – напряжение на резисторе определяется только запитанным ФТ. Поясняющий рисунок ниже.
В итоге получилось 10 пар ФТ, все подключены к 10 входам регистра GPIOB. Также, 2 группы по 10 светодиодов, соединённых последовательно по 2 шт (1,25В * 2 + балласт = 5В питания). Они переключаются вместе с питанием ФТ двумя выходами GPIO через транзисторные ключи. Плату с ключами сделал ЛУТом.
Логика работы лучей
Включается первая группа светодиодов (нечётные ноты)
Пауза 1 мс для пропуска переходных процессов фототока ФТ.
Периодический опрос 10-ти дискретных входов, определение затенения/отпускания каждой ноты, инкрементация счётчика времени затенения
Если время затенения не более 0,7 сек, то создаётся соответствующая нота начальной амплитуды.
После 10-го ФТ группа переключается на чётные ноты, процесс повторяется. Частота переключения групп 300 Гц.
Про ноты
Из музыкальной теории я знал только про 7 нот и октавы. Вообще в этом не разбираюсь, и для того, чтобы узнать частоты нот и их позиции на арфе – полез в Википедию. Читаю:
...места для струн полной хроматической гаммы недостаточно, поэтому на арфе натянуты струны только для извлечения звуков диатонической гаммы.
Так, понятнее не стало, читаем что это
Хроматическая гамма - восходящее или нисходящее мелодическое движение по полутонам, построенное, как правило, на основе мажорной или минорной гаммы. Диатоническая гамма - ладовая гамма, в которой все большие секунды заполнены проходящими полутонами.
Нам нужны ноты! вот, нотная запись:
Например, нотная запись септаккорда и его обращений фиксирует «терцовую» логику аккорда независимо от того или иного музыкального строя. Знак альтерации, относящийся к диатонической ступени ладового звукоряда, может означать её хроматическую альтерацию в системе мажорно-минорной тональности…
Сколько новых слов…. Ладно, в итоге разобрался, частоты нашёл.
Так как моя оптоарфа меньше оркестровой диапазоном, пришлось выбирать, где его расположить. Рассмотрел диапазоны гитар и других инструментов, подобрал — первая нота ДО третьей октавы (С3, 131 Гц) , последняя нота Ля (A5, 880 Гц) пятой октавы, что даёт почти 3 октавы. Для начала пойдёт, перепрограммировать потом можно.
Спектральный состав для арфы найти тоже непросто – 2 невнятные картинки без чисел, а из фраз «арфа имеет нежный, но относительно тихий тембр», «более насыщенный звук» много не накодируешь. Ладно, скачал примеры звукозаписей, прогнал через спектроанализатор. Составляющие спектра получились такие, в среднем.
Частота относительно базовой частоты |
Уровень относительно базовой частоты, для "ненасыщенный звук" |
Уровень относительно базовой частоты, для "звук с обертонами" |
1 (0-я гармоника) |
100% |
100% |
2 (1-я гармоника) |
8% |
12% |
3 (2-я гармоника) |
10% |
40% |
4 (3-я гармоника) |
3% |
5% |
5 (4-я гармоника) |
10% |
32% |
Количество обертонов в спектре не очень велико, что позволяет ограничиться 4-мя гармониками для вычислительной нагрузки на МК.
Синтезирование звуков.
Выбрал простой и экономный метод, позволяющий гибко настраивать тоны и гармоники – табличный синтезатор. В памяти хранится массив (1024) в 1 период sin сигнала, метка номера ячейки пробегает циклично по массиву с заданным шагом, который соответствует высоте ноты. Частота дискретизации и основной таймер всех расчётов – 16 кГц.
Значения, взятые из массива с необходимым шагом, дают поток sin-сигнала основной частоты ноты, дальше он умножается на громкость 0й гармоники. Потоки для высших гармоник получаются так же, с кратно увеличенным шагом счётчика номера ячейки в том же массиве. Начальная громкость всех гармоник берётся из вышеприведённой таблицы.
Для экономии расчётов можно было бы заранее сделать массив уже с гармониками. Однако в реальности разные гармоники затухают с разной скоростью, и для гибкости синтеза сделал всё отдельно. Скорости МК при 16 кГц цикле хватает для расчёта пяти гармоник каждой ноты.
Длительность звучания ноты определяется скоростью снижения амплитуд. Так как снижение идёт по экспоненте, его реализовать можно цикличным умножением на число, близкое к 1. Для первой гармоники взято значение 62/64, для второй 61/64, для третьей и выше 60/64. То есть каждые n миллисекунд амплитуда вычисляется как А1 = А1 * 62 / 64. Это особенности целочисленных вычислений.
Период цикла n зависит от регулятора «длительность нот» и номинальной длительности звучания каждой ноты, которая зависит от высоты ноты. Регулятором, подключенным к аналоговому входу МК настраивается общий масштаб. Экспериментально выбран диапазон от 0,2 сек до 4 сек. С малым временем звучания арфа превращается в балалайку, со средним – как арфа, с большим – как рояль/контрабас.
С тактовой частотой 16 кГц происходит суммирование всех играющих нот. Для снижения нагрузки нота отключается при падении амплитуды менее 0,7% от начальной. Сумма подвергается нелинейному преобразованию, чтобы не было перегруза, но и даже одну ноту было слышно хорошо. Функция преобразования суммы сигналов в выход Out = x / (x >> 10 + 1200), при этом одна нота звучит на 29% от общей громкости, а пять нот — на 77%.
Музыкальные фичи
В настоящей арфе, как и в других струнных инструментах, форма импульса возбуждения имеет вид, аналогичный импульсу в гитаре. Состав обертонов в спектре, а следовательно и тембр звучания также зависит от способа отщипывания и от места возбуждения. Здесь измерение места щипка было бы сложно реализовать, поэтому сделал такую зависимость от длительности затенения «струны». Если время большое, то обертонов мало, звук плавный, если задеть «струну» быстро, то пропорционально добавляются высшие гармоники, делая звук более резким, гитарным.
// ct[ni] - длительность удержания струны, от 1 до 200 тактов
harma = 12 - ((ct[ni]) >> 3); //зависимость высших гармоник от времени удержания, 1..96 = ампл гармоники = 12...0
if (harma < 0 ) harma = 0;
Amp4[ni] = Harm[4] + 41*harma; // Начальная амплитуда 4й гармоники, с добавлнием коффицента удержания
То есть присутствует возможность изменения тембра. Долгое удержание струны, от 0,7 с – звука не будет вообще. Отладку делал на свой никакой слух, так что правильно ли получилось – не знаю.
Генерация и аналоговая часть
Сам звук генерируется аппаратным ШИМ с максимальной частотой и количеством уровней 1600. При нулевом сигнале на выходе – меандр частотой 40 кГц, что нормально фильтруется ФНЧ.
Фильтрация и усиление сигнала
Рассчитал и сделал фильтр низких частот второго порядка на операционном усилителе. Частота среза примерно 5 кГц. Получилась небольшая плата, сразу с разъёмом Jack 3.5 под колонку и выносным регулятором громкости.
Индикация нот
Так как в варианте с ИК – лучами не видно самих лучей и сложно понимать позицию пальцев, когда они перекрывают лучи, сделал индикацию срабатывания.
Вдоль отверстий для линз в деке сделал второй ряд отверстий для 3-мм светодиодов. Подобрал так же, как на настоящих арфах – ноты С – красным светом, ноты В – синим, остальные белые.
Светодиоды стоят рядом с ИК излучателями, но с хитрой геометрической особенностью. Дека арфы при игре находится под крутым углом к плоскости зрения музыканта, почти вдоль оси зрения. Из-за этого отнесённые ровно влево светодиоды будут казаться дальше чем соответствующие им ИК – излучатели. Эксперименты показали, что мозг воспринимает как перпендикуляр (соответствие индикатора отверстию), при сдвиге примерно на 40% к оси зрения.
Для управления светодиодами индикации используется отдельная плата на таком же STM, связанная с главным МК по UART. Посылка размером 4 байта, отправляется 62 раза в секунду. Можно переключать тип индикации – либо индикация затенённой «струны», либо индикация после отпускания, пока звучит эта нота.
Вывод B.2, который расположен отдельно на плате в разъёме Boot, не может выводить лог. 1, поменял этот вывод на A.2
Питание
Используется 1 аккумулятор 18650, с преобразованием в 5 Вольт и 3,3 Вольта. Модуль зарядки тоже присутствует. Индикация оставшегося заряда сделана с помощью тех же индикаторных светодиодов. При включении арфы в первую секунду отображается уровень заряда первыми четырьмя индикаторными светодиодами.
Сборка и настройка
Настройка лучей ИК-светодиодов происходила уже на почти собранной с прищепками конструкции. Каждый ФТ подключался к нагрузочному резистору 30 кОм (Некоторые резисторы скорректировал для более чёткого срабатывания фотоприёмника), к нему подключался вольтметр, а светодиод подключался к источнику тока. Движениями около фокусной точки линзы влево-вправо и вверх-вниз (так как пятно имеет градиент, который можно поймать) находилось место максимального сигнала от ФТ. В этой позиции светодиод фиксировался термоклеем, и пока клей не застыл, ещё раз корректировалось положение для поиска максимального сигнала. У термоклея оптимальное время, другие клеи либо долго, либо быстро застывают. С первыми светодиодами пришлось повозиться, там самое большое расстояние до ФТ. Но дальше пошло даже быстрее, чем я ожидал, точка фокуса находилась быстро. Точность позиционирования 0,5мм и менее, при этом термоклей не плывёт и нормально фиксирует. Фанера с линзами тоже приклеена жёстко, удивительно, но обошлось без долгих корректировок. Дольше паять все провода.
Технические параметры
Нотный диапазон: 20 нот, с С3 (131 Гц) до A5 (880 Гц)
Гармоники: 4, тембр зависит от длительности удержания.
Габариты: 580 х 520 х 80мм
Масса: 850 г
Питание: аккумулятор 18650 3,7В
Потребление: 250..500 мА в зависимости от громкости
Регулятор длительности ноты и регулятор громкости, переключатель режима "арфа"/"пианино".
Недостатки
Всего достичь нельзя, особенно в первой версии. Нет возможности добраться до светодиодов ИК и фототранзисторов, если что-то испортится. Лучи тоже не поправить, но их и сбить маловероятно. Нет регулировки тембра или спектра целиком для имитации других инструментов без перепрошивки МК. Нет звука зацепления струны, как в крутых синтезаторах. Нет дополнительного аудиовыхода для внешней звукотехники (1 есть, но занят колонкой). На ярком солнечном свету оптоарфа не работает, засветка перебивает приёмники.
Угадай мелодию ©
Вследствие отсутствия у меня музыкального слуха могу заявить – работает, звуки издаёт. Сравнивая с записями игры на арфе – похоже.
По видеороликам MIDI записал 2 мелодии:
Классика Lose Yourself Eminem (вступление) /// здесь будет ссылка на запись, через несколько дней//
Саундтрек к Властелину Колец The Lord of the Rings theme На оптоарфе в режиме "пианино": https://rutube.ru/video/private/b24bf7fc886c7cac03fccedad8f6f2ae/?p=fHLGb0TiPRglxbQXIlDjiQ
Спасибо за внимание!
Комментарии (33)
Moog_Prodigy
05.10.2024 19:16+2Можно было бы добавить пентатонику. Там в принципе даже не зная нот что-то будет получаться :)
alcotel
05.10.2024 19:16+3Мегакруто!
Но позволю себе дать пару советов исходя из собственного опыта.
С оптическими датчиками, действительно, всё непросто. От засветки помогает работа на переменном сигнале. Мультиплексирование на разных несущих частотах, и больший, чем х2, мультиплекс по времени позволяет ещё и избавиться от фокусировки. Естественно, не бесплатно, а усложнением схемотехники)
Ну или хотя-бы такие-же фототранзисторы, только с ИК-фильтром, в тёмном корпусе, уже помогут. А фокусировку делать на стороне приёмников, а не передатчиков. С точки зрения сигнала не важно, где, можно и не обеих сторонах. А для избавления от фоновой засветки - важно.
Светодиоды SMD ни разу не точечные. Чем мощнее, тем больше площадь кристалла и хуже фокусировка. То на то и выходит).
С приёмниками - почти та же фигня. Больше чувствительность - просто больше площадь. Но это про фотодиоды. А у фототранзисторов чувствительность разменивается на стабильность коэффициента передачи, что тоже малоприятно.
Но я когда-то делал датчик с кучей лучей как-раз по вашей оптической схеме, в виде набора "струн", и выбрал упрощение оптики и надёжность. Фактически это вылилось в набор одинаковых плат, что не так сложно в производстве. С такими же дешёвыми 5мм фото- и свето-диодами.
Ну и синтезом звука я бы сразу не стал заморачиваться. В MIDI (он же UART) всё можно вывести на первом этапе. Но послушать интересно, жду ссылок.
Affdey Автор
05.10.2024 19:16Спасибо!
Работа на переменном сигнале это интересно, но усложнит электронику, там места мало.
ФТ в чёрном корпусе рассматривал, правда там общая чувствительность тоже ниже. Можно эти маркером закрасить).
Нет, фокусировка на передатчике, я по-разному экспериментировал. Плотность энергии выше при фокусировке передатчика. А у ФТ уже своя диаграмма направленности в 20°. Оба фокусировать это лучше, но опять же линзы и место.
Вы делали с упрощением оптики - как, можно подробнее?
alcotel
05.10.2024 19:16Плотность энергии выше при фокусировке передатчика
Странно, что у вас так получилось. Если фокусировать приёмник, он соберёт свет с большей площади. Свойство взаимности у радиоволн (и оптики) есть - сколько в одну сторону света пройдёт, столько и в обратную. Из-за этого, кстати, и диаграммы направленности ФТ и LED перемножаются, и можно рассчитывать не на 20°, а на 10° на самом деле.
Вы делали с упрощением оптики - как, можно подробнее?
Я ничего дополнительно не фокусировал. Каналов нужно было много, и я ставил линейку из одинаковых плат. В пределах платы я мультиплексировал по времени (за 1-2 мс вполне получалось измерить и переключиться на соседний LED и ФД). А между платами - мультиплекс по несущей частоте (100-200 кГц, что такой же, как у вас, мк F103 успевал оцифровать и обработать).
С мультиплексом, как тут говорят, можно по-разному делать. И по частоте, и по времени, и по коду, и смешать это всё в разных пропорциях. Найти компромисс между скоростью реакции и сложностью схемы.
Что-то типа того вышло
Один из промежуточных вариантов вот такой был. Это приёмник. Передатчик выглядит также, но схема сильно проще.
Простейшие аналоговые мультиплексоры 74HC4051, несколько каскадов усиления на обыкновенных транзисторах BC847, мк 32F103 (тогда ещё настоящий STM;)), обвязка для соединения в большую линейку.
С небольшими оптимизациями не выходя из обычного Си, мк на приёме занят где-то на 25% (20 тактов на обработку выборки с частотой 860 кГц). То есть, и 3-4 частоты одновременно такой мк обработать тоже сможет. Передающий мк не занят почти ничем - всё аппаратно генерится.
Affdey Автор
05.10.2024 19:16Странно, что у вас так получилось.
Давайте посчитаем. Беру размеры, близкие к существующим в проекте.
Примем мощность передатчика такую, что на расстоянии 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 раз.
alcotel
05.10.2024 19:16В варианте 1 пучок не параллельный.
В лучшем случае идеальной фокусировки со светодиода 1x1 мм вы получите его изображение размером 44х44 мм. Что как раз в 20 раз тусклее.
А вот с 20° и 10° я погорячился.
Affdey Автор
05.10.2024 19:16+1Записал аудио по нотам, с разным тембром
alcotel
05.10.2024 19:16Неплохой синтез для такой простой схемы, полифония, всё как надо!
А вот нелинейное преобразование лимитера сильно слышно, особенно когда близкие ноты играют. Ну или может запись такая, не знаю. Если не получается увеличить динамический диапазон (разрядность), лучше компрессор, чем лимитер. В вашем случае - это сжимать динамику в момент расчёта затухания, а не после суммирования всех сигналов.
А на арфе струны не глушат при игре?
Affdey Автор
05.10.2024 19:16Близкие ноты дают какую-то реверберацию. Может так и надо.
Что вы имеете ввиду "лимитер"? Сигнал в насыщение не уходит до 16 одновременно взятых нот. А суммирование двух-трёх нот почти линейное. Или я не понял мысль...
1 нота в максимуме это 197000 единиц. Максимум для ШИМ 800 ед. Можно построить график x / (x / 1024 + 1200), посмотреть
alcotel
05.10.2024 19:16Скорее всего да, вот это преобразование, мягкий лимитер:
Сумма подвергается нелинейному преобразованию, чтобы не было перегруза, но и даже одну ноту было слышно хорошо. Функция преобразования суммы сигналов в выход Out = x / (x >> 10 + 1200), при этом одна нота звучит на 29% от общей громкости, а пять нот — на 77%.
Нелинейные искажения - это для электро-гитары хорошо. Для классической полифонии это фигово. И сильно слышно на мой взгляд.
А может динамик или запись такая, х.з.
Affdey Автор
05.10.2024 19:16Запись через линейный вход звуковой карты компа.
Сделал запись нот по отдельности и аккордом
при малом количестве одновременных нот можно считать, что линейно они складываются без нелинейных искажений.
Звук: https://disk.yandex.ru/d/Br1f2QBhf7Izvw
Если просто складывать, то боюсь что одну ноту совсем тихо. но я могу переписать код для проверки. Думаете будет лучше?
alcotel
05.10.2024 19:16+1Жёлтым пометил. Это разностные частоты как-раз из-за нелинейности. Частот больше, конечно, просто они на картинке замаскированы сигналом.
Если они -20 дБ от тона, коэфф.нелинейных искажений что-то около 10% получается. Это очень много.
Зелёное - это скорее всего артефакты, слышные как жужжание. Откуда они, не скажу сразу, надо копать. Но обратите внимание, что их спектр симметричен относительно 3,05 кГц на обеих картинках.
alcotel
05.10.2024 19:16Если просто складывать, то боюсь что одну ноту совсем тихо. но я могу переписать код для проверки. Думаете будет лучше?
Попробуйте для начала без нелинейности, т.к. не нужно в коде много менять. Пусть будет тише, главное спектр почистить.
Если поможет, тогда можно и компрессию вводить.
Сама схема синтеза звучит, я считаю, очень хорошо. Артефакты бы только убрать или хорошо замаскировать.
Moog_Prodigy
05.10.2024 19:16Пальцами глушат, как и у гитары. Модератора как в пианино там нет. Но зато может быть несколько педалей для перестройки тона.
Radisto
05.10.2024 19:16+1Здорово было бы послушать результат))). Громкость зависела от нажатия у позднего фортепьяно (что и отражено в названии), а у более ранненго клавесина как у вас громкость от срабатывания ноты почти не зависела. По идее вы изобрели арфоклавесин. (Но я не настоящий сварщик, честно признаюсь) Идея кажется хорошей, и реализация прекоасная на мой взгляд. А есть у вас настоящая арфистка, чтобы заценить результат с профессиональной точки зрения? Профессионал и сыграет хорошо и обратную связь даст по делу
Affdey Автор
05.10.2024 19:16+3
needbmw
05.10.2024 19:16Можно попробовать моделировать каждый светодиод уникальным сигналом (частотой, м-последовательность, etc), а приёмник сделать единым, протяженным. Фокусировать излучатели всё равно придётся
quaer
05.10.2024 19:16Рассчитал и сделал фильтр низких частот второго порядка на операционном усилителе.
Где вы нашли такую схему? Это не ФНЧ. Это сумма фильтра низких частот и полосового. Где-то в районе 1.5 кГц пик.
Affdey Автор
05.10.2024 19:16Резисторы другие, поправил в статье. Моделирование даёт полку до 1 кГц, потом спад. Полка неидеальная, так-то только ШИМ 40 кГц отфильтровать. я сделаю записи отдельных нот, посмотрю уровень. Осциллограф показывал приемлемую АЧХ.
quaer
05.10.2024 19:16Посмотрите схемы фильтров Саллена-Ки и с многопетлевой обратной связью.
Кроме этого, в некоторых случаях имеет значение ещё и реакция фильтра на резкие изменения сигнала. Чтобы не было выбросов, выбирают небольшие значения добротности или используют пассивные RC фильтры.
Affdey Автор
05.10.2024 19:16А, активный фильтр? так сначала и было, но ОУ входил в самовозбуждение, я мучал схему пока не понял что ОУ брак. Поставил нормальный, но плата была уже переделана на пассивный фильтр. Да, активный можно настроить с лучшей АЧХ.
RusikR2D2
05.10.2024 19:16+1Если сделать наоборот луч "конусом", а приемники побольше размером, то перекрывая пальцем только часть луча, можно менять громкость или тональность.
Еще можно добавить видимого света, тогда если пустить дым от дым-машины, то будут еще оптические эффеткы. Особенно интересно может получиться на сцене, только арфу побольше сделать.
Как вариант, можно добавить "струны" (без звука, просто нити), чтобы играть не совсем на ощупь.Affdey Автор
05.10.2024 19:16Интересно. Это уже получается другое устройство, может в будущем реализую. Я делал аналоговые датчики на щелевой оптопаре, для микроперемещений из-за малых размеров приёмника (а большие кристаллы только у солнечных панелей бывают, ФТ таких не встречал). Аналоговый датчик на оптике лучше получается на отражении - там диапазон расстояний больше.
Нити, кстати могу попробовать поставить
NutsUnderline
05.10.2024 19:16Дела софтовые маловато раскрыты. Я так и не понял - штука то одноголосная (+гармоники), звучит только одна струна, никаких аккордов?
Affdey Автор
05.10.2024 19:16+1Софтовые дела я вроде бы описал все по-порядку. Но если что-то не хватает - спрашивайте, напишу.
Таймер основной на 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% от начальной.
Аккорды получаются.
NutsUnderline
05.10.2024 19:16понятно, тут по сути 20 голосый синтез в реальном времени, SIN[t[i]] - табличка с синусами?
ЦАП не было желания использовать?
Affdey Автор
05.10.2024 19:16+1Да. Параграф "Синтезирование звуков"
В памяти хранится массив (1024) в 1 период sin сигнала, метка номера ячейки пробегает циклично по массиву с заданным шагом, который соответствует высоте ноты.
Про ЦАП думал, даже купил MCP4725. но ему нужна скорость более 400 кГц по I2C, что нестандарт, и решил пока сделать на ШИМ,
NutsUnderline
05.10.2024 19:16400 кГц по 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 притянуть.
Affdey Автор
05.10.2024 19:16При 400 кГц не укладываемся в дискретизацию. Но всё можно сделать и лучше и круче, если будет спрос)
RodionGork
Я как немного энтузиаст электроники и электро-музыкальных инструментов чувствую благоговейный трепет - очень много труда вложено. Но с учетом собственного опыта подозреваю что как музыкальный инструмент оно не очень интересно:
во-первых отсутствует я так понимаю контроль над звукоизвлечением - ни громкость отдельной "струны" ни вот этот "звук зацепления" - ни приглушить её рукой
отсутствует "мускульная" обратная связь - по-моему на этом еще труднее играть чем на терменвоксе :)
тем не менее, повторюсь, яростно аплодирую трудолюбию и погружению в тему :)
Affdey Автор
Спасибо!
Громкость изменить быстро нельзя, но есть под второй рукой крутилка громкости. Если не в ноте, а во всей мелодии нужен подъём/спад - вполне возможно.
Да, по нотам попасть сложно, но аккорды уже легче. Понятно что не для концерта в БТ, а потренькать на гитарниках)
Affdey Автор
Видеозапись добавил