Связь ремёсел прослеживается по меткам в данной записи. 🙂
Для того, чтобы на [MIDI-баяне] играть через колонку (см. рис. 1), нужно сначала её сделать (столярка).
Для того, чтобы её закончить, нужно сделать лицевую декоративную сетку. В качестве сетки будет использована т.н. «силовая сетка«, которая используется для шитья.
А поскольку в планах изготовление нескольких швейных предметов, то, пожалуй, самое время провести ревизию всяких расходников (окантовочная лента, стропы, молнии, прочая сумочная фурнитура) и заказать недостающее.
Но если надо играть для кого-то, то единственный имеющийся у меня вариант — это маленькая BT-колонка. Для своих целей она звучит вполне приемлемо, но играть через неё плохо: внутренний объем колонки очень маленький, и низкие частоты там конкретно провалены. Бас звучит некрасиво.
Я решил сделать свою активную колонку в формате Soundbar. Чтобы было «два в одном» — и к телевизору можно подключить, и на баяне через неё можно поиграть.
Поскольку высота такой колонки должна быть маленькой, большие динамики в неё не воткнёшь. Поэтому я взял широкополосные 50-миллиметровые вот такие.
Акустическую схему я взял «закрытый ящик с пассивным излучателем». По нынешним временам это дёшево и сердито. Для выбранного динамика оптимальный внутренний объем — это примерно 1.2 л.
Перед тем, как делать «начисто», я решил сначала сделать прототип, на котором послушаю, как оно в целом звучит. (См. рис. 1)
«Прозрачных высоких» этот прототип, конечно, не выдаёт. Но в целом звучит гораздо лучше мелкой покупной колонки. Низкие частоты звучат отлично. Через такую колонку вполне можно играть, я уже попробовал. Все композиции звучат довольно хорошо.
Были проблемы с противным резонансом на частоте «Ля 2-й октавы». Решилось заменой пары маленьких и лёгких пассивных излучателей на один большой, а также, установкой наклонной рассекающей перегородки внутри.
Теперь можно браться за «чистовое» изделие.
Рис. 1
P.S. Само чистовое изделие будет устроено как-то так:
С помощью дипсика я разобрался, как программировать эти ваши PIO.
Интересненько.
В приведённом примере PIO моргает светодиодом с частотой 1 Гц, а оба ядра микропроцессора в этом вообще никак не задействованы, и могут заниматься другими своими делами.
Как известно, в микроконтроллере RP2040 реализована интереснейшая штука: PIO — он же Programmable Input/Output block. Если совсем-совсем коротко, то внутри микроконтроллера (помимо собственных 2-х ядер) существуют ещё 4 (отдельно программируемых!) железки, которые могут работать независимо от основной программы микроконтроллера. Работать они могут в обоих направлениях: «шевелить ногами» на основе данных, поступающих из основной программы, или читать данные, приходящие на ноги (например по протоколу SPI или I2C), и давать основной программе уже готовые данные. (Насколько я понимаю, «аппаратные реализации» SPI и I2C интерфейсов микроконтроллера именно так и сделаны.*)
Если не совсем-совсем коротко, то вот эта статья даёт некоторое общее представление о том, что это такое.
Я давно хотел с этой темой разобраться. Интересно же. В результате — разобрался.
Но интересно то, КАК я разобрался.
Я загрузил в https://chat.deepseek.com даташит на RP2040, плюс ссылку на упомянутую статью, и начал Дипсика допрашивать. И это занятие оказалось очень продуктивным. ИИ отлично даёт ответы на разнообразные вопросы общего характера (типа «как сделан обмен данными между программой, выполняемой микроконтроллером, и Конечным Автоматом», т.е. State Machine. Или «какова разрядность регистров FIFO и выходных и входных регистров сдвига»).
И на примере практической задачи (чтение двух каскадов сдвиговых регистров 74HC165) Дипсик мне рассказал, как реализовать свой Конечный Автомат, который сам будет дёргать ногами Latch и CLK, читать данные из каскадов и укладывать их прямо в оперативную память через DMA (т.е. Direct Memory Access).
Т.е. из самой прошивки надо будет только сказать «прочитай данные из каскадов». PIO само всё сделает, и когда данные уже будут лежать в ОЗУ — вызовет прерывание. которое останется только обработать. При этом основные ядра микроконтроллера смогут заниматься другими делами, пока PIO само читает данные из регистров.
И я теперь не могу решить, что меня больше восхищает: то, как сделан PIO в контроллерах RP2040, или то, насколько быстро в этом получилось разобраться, используя ИИ. Без Дипсика я эту тему грыз бы не меньше чем пару дней.
Рис. 1
* — оказывается, нет. Стандартные интерфейсы (UART, I2C и SPI) сделаны в виде отдельных аппаратных блоков. И ресурсы PIO эти интерфейсы не используют.
Я добавлял чувствительность к скорости нажатия в свой MIDI-баян в том числе для того, чтобы естественно звучали вот такие штуки (по ссылке — короткий урок на тему «How to Play Beginner Cocktail Piano in 3 Steps»).
Однако, одной только чувствительности не хватило.
Для того, чтобы играть «сложные» аккорды левой рукой на баяне, нужно набирать нужные звуки, нажимая несколько кнопок «стандартных» аккордов. Вот здесь я выкладывал XLS-файл с калькулятором, помогающим определить, какие аккорды нужно нажимать, чтобы получился требуемый «сложный» аккорд.
Так вот, для того, чтобы играть аккорд Cmaj7 одновременно с басом (C), на левой руке не хватает пальцев. 🙂 Пианисты в таких случаях используют педаль. А значит и мне надо.
В результате я реализовал режим «педаль» в котором бас и аккорд продолжают звучать после отпускания кнопок до тех пор, пока не будет нажат новый бас, или пока не будет выключен режим «педаль».
В результате стало возможно получить вот такое звучание:
Теперь нужно привыкать нажимать кнопки с нужной силой. У баянистов такой привычки нет; в результате некоторые нажатия у меня пока получаются слишком слабые, а некоторые другие — слишком сильные.
Я тут решил попробовать добавить второй голос к «Ленивому Дику». Без второго голоса, всё-таки, чего-то не хватает.
За основу взял второй вариант записи. И просто наложил запись второго голоса.
В одном месте (на 1:13), конечно, первый и второй голоса плохо сочетаются, звучат фальшиво. Но я не понимаю, что я с этим могу поделать; пока оставлю так.
Как и обещал, публикую короткую техническую демонстрацию режима «соло». А данном случае солирующим является самый низкий голос (скрипка). Всё, что выше звучащего солирующего звука более чем на 1 тон, звучит как орган.
Перемещаюсь по клавиатуре вверх/вниз, чтобы было понятнее, в чём суть режима.