Угу, с wav вроде у первой версии только проблемы были, а я хотел как раз на ней типа магнитофона сделать для игрушки. Сэкономил, блин, не стал брать vs1053 - дороже была, так и забросил в ящик
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Вот тут отправляется от 0 до 4х нот и делается пауза (пауза и окончание последовательности определяется по самой первой из них). Там везде 0 в маске - надо поставить 1 на нужных нотах.
void loop() { float x; // Задаётся коэффициент длительность паузы между нотами x = float(analogRead(pot)+100) / 4.0;
// если доиграли (по первой последовательности) - перескакиваем в начало if (notes[0][pos].pitch == 0) pos = 0;
// пробегаем по всем 4м последовательностям for (int i=0;i < 4;i++) { // отправляем очередную ноту если есть признак включения if (notes[i][pos].enabled > 0) noteOn(0x90, notes[i][pos].pitch, 0x45); } delay(x * notes[0][pos].delay); // задержка
//переходим к следующей ноте pos = pos + 1; }
void noteOn(int cmd, int pitch, int velocity) { Serial1.write(cmd); Serial1.write(pitch); Serial1.write(velocity); }
А вот как сделать такое-же, но чтобы команды миди посылались не через Serial, а через ISP? Есть у меня плата на чипе VS1053b (про которую писал чуть выше), у неё чтобы заработал мидивход, надо чтобы на определённой ноге чипа при включении был высокий уровень. Но где взять этот уровень, я пока так и не нашёл (припаиваться мелкой соплёй к ноге чипа напрямую я не хочу). Пробовал готовые коды (там были примеры, как делать), у меня работал MP3 плеер (пример с аудиоплеером) и в примере с миди у меня проигрывались ударные (просто как-бы перебор барабанов по порядку, но очень тихо как-то было, наверное просто надо velocity побольше сделать). Это всё работало не через мидивход, а именно через ISP. Но я не понял, как это сделать. В примерах использовалась библиотека, специально для этой платы, там подключались разные файлы, в которых как я понял были отсылки и на другие файлы, в общем слишком запутано что и где там надо смотреть.
Если по даташиту непонятно - лучше поискать подходящую библиотеку. Бывает довольно длинный и замороченный код, а самому разбираться месяцами можно если не заниматься только этим.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Библиотека есть, специальная для этой платы. Но там куча файлов, в файлах коды небольшие, но как я понял, эти файлы ссылаются ещё и на другие файлы и что там где за что отвечает - хрен поймёшь
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Ну это да - надо найти основной .h и глянуть какие там функции, как вызывать. Потом найти нужные функции в коде. Так потихоньку распутать это все. Может быть сложно, может быть не очень - зависит от девайса и кодописателя. Но сначала примеры попробовать, конечно. Если есть проигрывание midi файла - значит с этой функции (которая в коде примера вызывается) и начать, отделить чтение файла от отправки в VS1053b и т.д. ... Хотя это штука сложная (vs), возможно она сама разбирает midi файл, а не получает отдельные команды с ардуины, даже скорее всего так.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Оно вроде как есть, но проигрывается там не мидифайл, а из скетча посылаются команды, какую ноту воспроизводить. Но вот где эти команды находятся, хрен его знает. Например вот так выглядит код из примера: Спойлер
Код:
/* midiDemoPlayer This example shows how to play MIDI. */
А вот так выглядит код файла MusicPlayer.h Спойлер
Код:
/* * MusicPlayer.h * A library for MusicShield * * Copyright (c) 2015 waveshare.net * Website : waveshare.net * Author :still falling leaves * Create Time: May 2015 * Change Log : * * The MIT License (MIT) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */
/** Playing states definations. */ volatile typedef enum { PS_IDLE = 0, // Player idle PS_PLAY, // Start to player PS_PAUSE, //Pause play PS_RECORDING, //Recording states } playingstatetype;
/** Control states definations. */ volatile typedef enum { CS_EMPTY = 0, // Have no control CS_PLAYPAUSE, // Play/pause button pressed CS_RECORDING, // Play/pause button long pressed CS_UP, // Up button pressed CS_DOWN, // Down button pressed CS_NEXT, // Right button pressed CS_PREV, // Left button pressed } ctrlStatetype;
Где то в musicplayer.c (или .cpp) должен быть и код этой функции midiDemoPlayer - может там где то и команды.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения