MP3 Sheld на VS1053 2 шелда на одну UNO

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

На UNO подключен  MP3 Sheld на VS1053 с SD картой.  Задача в том, чтобы подключить 2 таких шелда.  Библа позволяет дефайндить пины.  К примеру:

//#define SHIELD_RESET  4      //  VS1053 reset pin (unused!)
//#define SHIELD_CS     6      //      VS1053 chip select pin (output)
//#define SHIELD_DCS    7      //      VS1053 Data/command select pin (output)
//#define CARDCS  5 
//#define DREQ  2

Adafruit_VS1053_FilePlayer musicPlayer =
 Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);

Пока для  простоты  прямое указание РАЗНЫХ пинов, и создаю 2 экземпляра плеера.

Adafruit_VS1053_FilePlayer musicPlayer ONE= Adafruit_VS1053_FilePlayer(8, 6, 7, 2, 9); 
Adafruit_VS1053_FilePlayer musicPlayerTWO =  Adafruit_VS1053_FilePlayer(4, 6, 7, 3, 5);

В setup проверки:
if (! musicPlayerONE.begin()) {
    Serial.println(F("Couldn't 0"));
   while (1);
  }
  Serial.println(F("VS1053 0 found"));

  if (! musicPlayerTWO.begin()) {
    Serial.println(F("Couldn't 1"));
    while (1);
 }

// пусть найдены оба шелда и код идет дальше...


if (!SD.begin(5)) {           // определяется только одна!!!!! 
    Serial.println(F("SD 1"));
  //  while (1); // пробовал и останавливать и коментить
  }

  _delay_ms(500);

if (!SD.begin(9)) {  // эта не определяется..... или наоборот только первая
    Serial.println(F("SD 0"));
 //   while (1);
  }

Т.е. как работать с двумя плеерами, м,б. я и смогу, но как обращаться к 2-м разным SD картам.... типа SD1 и SD2

 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Задачи сделать "бутерброд" на одну УНО нет!! Шелды отдельные, на проводках, и проблемы развести разные пины нет. Это уточнение сабжа.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вам в первую очередь нужно разнести пины CS, остальные могут быть общими, а в скетче у Вас как раз наоборот. Ну и с картами аналогично.

И еще: сколько памяти жрет одна SD? Вы уверены, что на Uno хватит ресурсов на Ваши хотелки?

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

andriano, спасибо за очень нужную помощь!. Бьюсь 3-и день. 1053 бывают шелдами (у меня именно такие, красные) под УНО и тогда "снабжены" библами SFEMP3Shield где поменять пины выборки сложно - надо лезть в библу. Эти библы у меня все отлично работают, т.е. железо и формат файлов МП3 ок.

Есть 1053 Модули - под них библа Adafruit_VS1053, кусок ее выше, пины меняются. Шелды подсоединены на разъемах на печатке "горизонтально" и стоит уже Nano 328p. Добиться устойчивого обнаружения шелда/платы даже по отдельности не могу, сбоит, а СД карта вообще не определяется. Причины: а) разные библы б) помехи трассировки 5-10 см в) НАНО не тянет даже одну(((

Память: одна плата порядка 50%, две -60% из 32 кг. Думаю, пока бы запустить ОБЕ платы одновременно и надежно, а там посмотрим.... Мега в конце концов пойдет. 

М.б в коде выше и описка, я делал и иные, суть выборки шелдов понимаю... Косяк иной, имхо...Общие у меня только CLK MOSI MISO 5v RST плат.  Вы работали с VS1053  или иными? 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Я работал, но без библиотек.

Собственно, меня эти платы интересуют только в качестве простенького MIDI-синтезатора. Но для проверки mp3, конечно, запускал.

И, честно говоря, я не заметил разницы в поведении между "красными шилдами" и "синими квадратными модулями".

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

 

И еще: под "ресурсом" я подразумевал в первую очередь оператиную память, которой у Uno/Nano всего 2 кбайта, а не программную flash-память.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

МИДИ - это еще более и нужно! Не знаю правил форума, пуст забанят, но нельзя ли поообщаться по почте? Может я предложу что-то за помощь))) Мне очень нужно и срочно. dim3740@_ndex.ru

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Заказы здесь принято размещать в разделе "Ищу исполнителя". Но я заказов не беру.

Если вопрос меня заинтересует, сделаю и так.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Почту просил для оперативности. Я  в сети утром, вы - вечером. Итого - один ответ(((  Я не программист, в возрасте, и многое не понимаю, но тактичен....   Вопросы, если можно:)):

1. Семплер.  Записаны на карту перкуссионные МП3.  С какой частотой можно выбирать для драм-машинки?  Код ритм рисунка- массив. Не динамические. По моему опыту - не более 80 bmp.  

2.  Вопрос 1 , но прежде каждой выборки семпла есть задание громкости (velocity).

3. Влияет ли на эту частоту некие режимы  работы с шелдом (есть в библе - пока не разбирался) : а) по таймеру б) по прерванию

4. Износ СД карты при частых выборках.

5. Два шилда и попеременная выборка даст 160 bmp (3- 240).  Не будет ли рассинхронизации при этом? Оценить вообще время запуска файла в мс. Надо не более 10 -15 мс.

6. МИДИ на красных есть? Никаких перемычек как в синих не надо?

7. Делали "без библы" -это как? скажем, на уровне файловой системы карты? Скорость будет выше?

8. Оперативная память для переменных. При чем тут СД карта? - вопрос риторический, надо читать матчасть(((

Спасибо огромное за участие. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Для использования в качестве MIDI-синтезатора в чип догружается небольшая (десятки байт) программка, которая позволяет воспроизводить звуки сразу по мере поступления MIDI-команд, а не по внутренним часам как в случае воспроизведения MIDI файла.

Если мне не изменяет память, все, что может воспроизводить чип, он не сам читает с карты, а в его память подгружает внешний контроллер, например, Ардуино. Длина буфера 2 кбайта. Вот примерно такими кусочками Ардуино читает данные с карты и передает на vs1053.

1. Воспроизведлением MP3 я не интересовался. Попробовал исключительно для проверки девайса. Так что в временнЫх характеристиках сказать не могу - надо пробовать.

2. Думаю, должна быть команда установки нужного значения громкости. Иначе, думаю, никак. В том числе громколсть должно быть можно изменять и в процессе звучания.

3. Насчет частоты я не понял.

4. Карта изнашивается только при записи. При четнии не изнашивается. Теоретически.

5. Только экспериментально. Причин для рассинхронизации не вижу. Кстати, можете порекомендовать источник информации, откуда взяты 10-15 мкс? Меня сейчас как раз этот вопрос интересует.

6. Мне кажется, они идентичны. Либо мы говорим о разных модулях (кто знает, что китайцы еще выпустили за последний год-полтора, когда я ими не интересовался)

7. Нет, не только файловая система, но и карта вообще не использовались. MIDI команды шли с MIDI клавиатуры в Ардуино по стандартному MIDI порту на 31250, а оттуда - уже в синтезатор по SPI. В чипе предусмотрен и стандартный MIDI порт на 31250 (без опторазвязки), но на шилде он не подключен.

8. Вопроса не понял. Оперативная память есть как в Ардуино, так и в vs1053 и даже, как ни странно, одинакового объема.

А! кажется понял 8-й вопрос. Любое "дисковое" устройство, т.е. то, которое выглядит для софта как дисковый накопитель, является блочным устройством. Т.е. отдает/принимает информацию блоками. Размер блока 512 байт. Соответственно такой величины должен быть буфер для каждого открытого файла.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Встроенные семплы, дозагрузка программки, участие ардуино - поредника карты и чипа - прочитано, согласно и понятно)) МИДИ- важно, но это второй этап для меня. Встр.семплы в большинстве моих потребностей (это автономные драм-синты, бас на 1-2 октавы и т.п.) устроят, но МП3 - это более широкий круг, к примеру, реализация синхронно  потоков "аудио минус" + МИДИ.  1 задача- запустить устойчиво шелды - имхо, толька я сам должен, т.к. вроде выборку делаю верно. Но,

1) Нельзя ли тестить именно выборку на более низком уровне програмирования, без библ? (уже ИМХО не актуально, см ниже)

2 задача - (Это 3 вопрос выше) - это временные характеристики шелда, в частности - макс частота\ мин период выборки файлов. Это зависит от того, как дуня читает СД.... роль прерывания, и\или по таймеру. Какой из методов (их разработчик дает два) более быстрый.  Итог - быстрая последовательная игра файлов. Не тянет - последовательно-паралельные схемы с 2...3 шелдами. Или 10-12 (по числу барабанов\тарелок) ИНЫХ платок МП3 с Ебея по цене 100 руб,  с одним файлом в СД и только Паралельная выборка. 

3 задача - МИДИ, простые одноголосные инструменты - драмсы, басы

4 задача - микширование 2-3 выходов шелдов и.... А вот как без земли - то?(((( Это же в общий микшер пойдет. Аналоговая развязка?  

Добавлено вечером: короче, шелды успешно читаются под Уной, под Наной не хотят. Вопрос снова как в 1 посте: Как сделать РАЗЛИЧНЫЕ выборки СД карт, применяя библу. Или без нее. Пусть меня научат:))) 

Adafruit_VS1053_FilePlayer musicPlayer1 = Adafruit_VS1053_FilePlayer(8, 6, 7, 2, 9);  
Adafruit_VS1053_FilePlayer musicPlayer2 = Adafruit_VS1053_FilePlayer(8, 4, 5, 3, 10);  

void setup() {
if (! musicPlayer1.begin()) {        // работает 
if (! musicPlayer2.begin()) {     // тоже   
if (!SD.begin(9)) {   // идентификация SD по параметру = пину   
if (!SD.begin(10)) {       // уже не инициализируется

как сделать типа:
 if (!SD1.begin()) {   
 if (!SD2.begin()) {         

10-15 мкс.... имелось в виду 10-15 мс - время запаздывания семпла от играемой музыкальной доли, которое не заметно для профи. Из сети. В реале меня устраивает 30 мс. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

 

2. Ну это измеряемое. Вы можете зациклить воспроизведение файла? В смысле как только закончится воспроизведение файла, тут же воспроизвести его снова.

Подготовьте файл с синусоидой в любом звуковом редакторе. Короткий - всего несколько периодов, скажем, с частотой 1 кГц. Скажем, 5 периодов - 5 мс.

Зациклите его и посмотрете, что будет на выходе. Лучше - осциллографом. По идее должны быть эти 5-мс фрагменты, перемежаемые паузами. Длительность пауз - ответ на Ваш вопрос.

 

3. Ну если клава нормальнеая (сейчас все чаще стали делать MIDI-клавы без MIDI-разъема - только USB), то через гальваническую развязку подключается ко входу Serial порта.

 

4. Ну, собственно, обычный дифференциальный усилитель на ОУ.

 

А лички здесь нет. Подразумевается, что неинтересных для сообщества тем не бывает.

 

Попытался подкорректировать библиотеку для использования несколькими шилдами, но споткнулся об одну концепцию, то ли Си, то ли Ардуино, которую я лично не понимаю, и которая существенно усложняет работу с прерываниями из классов. Изящного способа преодоления этой проблемы не существует.

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

В качестве конкретного случая, а мой взгляд, можно рассматривать либо Uno/Nano/Mini, либо Mega.

Лично я бы на Вашем месте в качестве основного рассматривал второй вариант. У Uno/Nano/Mini два прерывания, соответственно, больше двух внешних шилдов на нее не повесишь. Пинов тоже хватит не более, чем на 2. А хватит ли памяти на 2 карты, вообще неизвестно. У Меги со всем получше. Кроме того, если окажется, что задержка при чтении с карты слишком велика, а суммарная длина MP3 файлов не превышает 0.5 Мб, данные можно держать не на карте, а в flash памяти. Считать их оттуда намного быстрее, чем с карты.

Ну это так, размышления на тему...

 

Добавлено вечером: 

Uno и Nano - одно и то же. Разнице взяться неоткуда.

Чтобы сделать разные выборки с разных карт, нужно и завести две карты - два разных экземпляра класса, например SD0 и SD1.

Да, насчет мкс, конечно, ошибся. Я представляю порядки величин. Но очень хотелось бы найти, откуда берутся эти оценки.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Размышления тоже полезны... мой вопрос в сети есть и звучит так  Run multiple SD cards on a single SPI bus

Но, юзают библу SdFat.h. Если я даже в ней и разберусь, то проблематично состыковать  с VS1053. Примеры в сети только с отдельными чипсетами карт.  А если СД карта "внутри" шелда и класса.... Adafruit_VS1053_FilePlayer(8, 6, 7, 2, СД карта) - то надо разбираться как работать с ней независимо.  

Вариант смотрю использовать в качестве второй платы какую нибудь попроще, но тоже с СД. По опыту - время открытия файла у них очень велико.

Ваш: Мега/STM, затем синюю VS1053, можно даже без карты, плюс отдельно модуль СД. Читаем семплы ударных скажем, в оперативку (они "дешевые" по 30 кБ, Х 10-12 ударных Х несколько банков), а еще нужен "минус" МП3 - его читаем на лету уже с СД карты. Типа такого м.б.? Мда... думал, все будет проще((( Одиночный шелд ведь прекрасно работает.... 

busmuRun multiple SD cards on a single SPI busltiple SD cards on a single SPI bus

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Да, забыл сказать.

В принципе, с большинством SPI устройств проблем нет. Но SD здесь исключение. 

Не то, чтобы с ними как таковыми были проблемы, но SD могут работать только от 3.3В. От 5В - горят. Поэтому нужны преобразователи уровня. Правильно подключенные (и правильные) преобразователи уровня для SPI должны уметь переходить в высокоимпедансное состояние. Но, к сожалению, китайцы зачастую этим пренебрегают, поэтому нередко оказывается, что имеющаяся SD вообще не позволяет подключить ни одного другого SPI устройства. 

К счастью, vs1053 - тоже SPI устройство. Поэтому на шилде SD должна быть подключена правильно (иначе бы vs1053 не работал).

Но если Вы хотите взять отдельный SD модуль, будьте готовы к неприятностям.

Большое время открытия файла вполне объяснимо: чтобы открыть файл, ей нужно сначала считать несколько секторов по 512 байт, чтобы узнать, в каком месте карты следует искать начло файла. 

Поэтому я и предложил оценить, достаточно ли 0.5 Мбайта Меги для хранения всех мелких файлов. И скорость их чтения очень заметно увеличится, и потребность останется только в одной карте.

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

Да, 30 кбайт для оперстивки - это очень много: в Uno - всего 2 кбайта, в Меге - 8 кбайт, в stm32f103 - 20 кбайт и только в Due - 96 кбайт. Но по сравнению с объемом ПЗУ - все равно копейки.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Я Mega (точнее перезаписью с СД карты чати инфы) заинтересовался:)) но... о каких 0,5 Мб Вы говорите? Флеш? она 256 кБ. Разные ревизии мег что ли есть?   (ИМХО, вопрос не актуален - см. ниже)

Утро: так, эйфория попытки быстрого решения прошла((( Начнем основательно и с начала:

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

Оба файла записывались в софте синхронно и также синхронно должны воспроизводиться.  Аудиодлина каждой пары файлов одинаковая,  до 15-20 минут. 

Второй функционал -  разные  перкуссионные и бас инструменты в виде отдельных файлов (что обсуждали выше) с их циклическим чтением - думаю, нужно отложить . Потестить встроенные МИДИ - м.б. они меня устроят - этим сейчас и займусь.... Поможете? :))).  И посоветуйте по 1 задаче, или м.б. все же по почте договоримся? Вы и так уже многое посоветовали, просто я в задаче еще распыляюсь((( 

2 шелда необходимы, т.к. нужны разные аудиовыхода. "Дешевый" для "спутника" не нашел... перепробовал с пяток.. глючные, задержка чтения...  Пусть будут два VS1053, но можно же только один с картой?  

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Я уже и сам понял, что лажанулся. Как-то в голове уже все перепуталось: 0.5 - это у Due и младшей модели stm32f407, а у Меги, действительно 0.25.

 

Да, я вот начал ковырять библиотеку и чуть не приступил к сборке конструкции из Uno  и двух 1053 шилдов (благо, дома как раз парочка свободных имеется), а потом подумал - а в чем, собственно, состоит задача?

Если нужно по чему-то MIDI-подобному воспроизводить собственные сэмплы, так чем городить какой-то колход из дерьма и палок, можно воспользоваться готовым профессиональным решением. Ну, например, таким: https://ru.aliexpress.com/item/Dreamblaster-X2-Waveblaster-Waveblaster-USB-MIDI/32853716906.html

Я, правда, собственные сэмплы в него не загружал, меня вполне устраивает звук "из коробки", но возможность такой загрузки есть и, более того, это одна из основных его функций.

 

Второй файл с метками - это тоже костыль. Гораздо удобнее эти метки хранить в цифровом виде и использовать по мере надобности. Т.е. должен быть некоторый объект из связанных между собой файла конфигурации, файла цифровых меток и аудиофайла. Все это запускается на воспроизведение в автоматическом режиме и только так можно добиться полной синхронности.

А световое оборудование также прекрасно управляется по MIDI, так что здесь тоже не нужно что-то изобретать.

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

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Мне нужны бюджетные решения, а не 5 тыс, чтоб я мог ковырять их, и втыкать в свои муз.инструменты.

ПС. Надеюсь, что Вы просто пока не написали свои соображения по "паре файлов со спутником"... 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну, 5000 для профессионального звука - это очень бюджетное решение. Есть и попроше - тысячи за 3 https://ru.aliexpress.com/item/Dreamblaster-Synth-S1-Daughterboard-WaveBlaster-MIDI-Yamaha-DB50XG-XR385-type/32853185624.html

Ну а по меркам Ардуино vs1053 - тоже не самое бюджетное решение.

Ну а "комплект файлов" мне видется так:

1. Текстовый конфигурационный файл, в котором записываются общие настройки, в частности, перечисляются другие используемые файлы, а также содержатся необходимые комментарии (чтобы самому потом не запутсться).

2. Один или несколько аудиофайлов. Точки их запуска (по времени) должны быть указаны в файле 1.

3. Один или несколько MIDI-файлов. Для управления синтезатором (например, та же перкуссия), световым и иным оборудованием. Точки их запуска (по времени) должны быть указаны в файле 1.

Аудиофайл с метками времени не нужен. Если он есть, его нужно обработать один раз добыть из него метки времени и забыть о нем. Если именно аудио нужно для управления устройстввми, формировать его в реальном времени на основе цифровых меток времени.

Да, "файл с метками времени" - это, конечно, MIDI-файл.

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

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Если дейс-но, "только так все синхронно", то надо учесть мне. Что касается, цифровых меток... Я представлял так: я записываю минус в секвенсере, потом мышкой делаю замедления, ускорения и т.п. Потом в редакторе даю задание создать трек темпа и поставить на первую сильную долю (и на остальные) некий семпл. Я могу прослушать, дать трек темпа как метроном своему барабанщику в наушники. Это чисто музыкальные задачи, и могут быть выполнены любым музыкантом.  Все. Выгружаю 2 аудио файла. Применение: 1) Минус+ сама игра+ метроном барабанщику с изменяемым темпом. 2) Декодирование аудио импульса темпа, создание любых алгоритмов по времени композиции, скажем, смена пресета гитарного кабинета по свитчу (эл.ключ), свет в самодельной ЦМУ. При этом у меня могут быть только акустические инструменты, нет ни компа, ни МИДИ устройств. 

прочитал... да, наверное, в правы.... у меня тупиковый путь((( Вопрос как технологично создавать "заготовки" файлов именно музыканту только....  понятно, что тут роль DAW и умении в нем работать... в Reaper все можно... Тогда надо решать все в комплексе - с процессом подготовки файлов. 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Ок. Создаем аудио и спутник -МИДИ темповый файл. В МИДи можем прописать смену оборудования. Учим VS1053 читать МИДИ. Можем пустить темповый файл на семпл - т.е. прослушать метроном. (Но нужен отдельный второй канал, чтоб не шел в микшер). Или пустить на компаратор..  эл.ключ. Можем МИДИ выдать на DIN5 через Ардуино, не трогая VS1053. Можем просто играть (прослушивать) МИДИ по второму аудио каналу, хотя чаще надо как-то переключать на первый, что идет на микшер. Итого имеем аудио первый стерео, аудио второй и МИДИ выход. При необходимости - USB интерфейс доработкой. Как и на какой стадии создаем конфигурационный файл? М.б. при 2-х файлах как-то без него, по именам.. префиксам? Он должен создаваться автоматом, музыкант это делать не будет. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740 пишет:

Если дейс-но, "только так все синхронно", то надо учесть мне. Что касается, цифровых меток... Я представлял так: я записываю минус в секвенсере, потом мышкой делаю замедления, ускорения и т.п. Потом в редакторе даю задание создать трек темпа и поставить на первую сильную долю (и на остальные) некий семпл. Я могу прослушать, дать трек темпа как метроном своему барабанщику в наушники. Это чисто музыкальные задачи, и могут быть выполнены любым музыкантом.  Все. Выгружаю 2 аудио файла.

До сих пор все верно, только тепаерь "Выгружаю аудио и MIDI файлы". Факультативно, конечно, можно заодно выгрузить второй - аудио и первый - MIDI.

Цитата:

Применение: 1) Минус+ сама игра+ метроном барабанщику с изменяемым темпом. 2) Декодирование аудио импульса темпа, создание любых алгоритмов по времени композиции, скажем, смена пресета гитарного кабинета по свитчу (эл.ключ), свет в самодельной ЦМУ. При этом у меня могут быть только акустические инструменты, нет ни компа, ни МИДИ устройств. 

Да, во многих случаях есть желание избавиться от компа. Совсем.

Но, замечу, что вменяемая аудиотехника и по цене и по весу значительно превосходит MIDI аппаратуру. А без нее наличие двух аудиофайлов совершенно бессмысленно.

Цитата:

Вопрос как технологично создавать "заготовки" файлов именно музыканту только....  понятно, что тут роль DAW и умении в нем работать... в Reaper все можно... Тогда надо решать все в комплексе - с процессом подготовки файлов. 

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740 пишет:

Учим VS1053 читать МИДИ.

Это вряд ли.

Скорее: "Учим Ардуино читать МИДИ".

Цитата:

Как и на какой стадии создаем конфигурационный файл? М.б. при 2-х файлах как-то без него, по именам.. префиксам? Он должен создаваться автоматом, музыкант это делать не будет. 

Если надо - будет.

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

Тут правильнее будет задать вопрос не "когда создаем", а "когда будем использовать".

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

В общем, Ардуина может работать двумя основными способами:

- как периферийное устройство для ПК, выполняя поступающие с него команды,

- автономно.

В первом случае конфигурационный файл нужен программе, которая на основе всего проекта (т.е. всех перечисленных в конфигурационном файле файлов и других параметров) будет давать команды на исполнение Ардуине.

Во втором - конфигурационный файл нужен на стадии подготовки всего того, что мы будем заливать на карту (возможно, упрощенный MIDI) и в память Ардуины.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

а если так:

Девайс всегда автономен.

Два основных способа  (моими словами):

  1. Данные-   2 файла аудио+миди, которые заливается юзером после подготовки любым редактором на компе.  Файлы являются необх и достаточным, чтоб обеспечить музыку – "минус" и управление периферией по МИДИ или аудио - через некий декодер и контроль темпа. Больше в этом режиме ничего не нужно. Создание регулярное.
  2. Данные – конфигурационный текстовый файл (КФ), создаваемый разработчиком, или продвинутым юзером, содержащий порядок выборки файлов. Файлы  - совсем другие, что 1. Их много, это аудиосемплы, МИДИ треки.  Это режим «семплера». В КФ заданы времена и порядок запуска аудиофайлов, причем в относительных временах.  Тогда каждый КФ для перкуссии - это ничто иное, как ритмические рисунки, с изменяемым темпом, как коэффциент. Управление файлами может быть и с МИДИ входа, и даже от МИДИ файла. "Чужие" миди файлы никогда не пользуем или упрощаем прежде!  Потом пишется редактор на СИ с визуализацией и созданием драм-патернов. На выходе - КФ.txt. Перенос на СД карту. 

 Оба способа требуют 2 шелдов, прошу помочь тестить:)).

Итого Девайс – бюджетный аудио\миди комбайн с независимыми аудио выходами, внутренней маршрутизацией и с режимом семплера. Область применения – корпоративные вечеринки, рестораны.

Почему я цепляюсь за семплер? Потому что типовый GM MIDI, и иные не содержат фраз, эффектов, коротких муз.фрагментов. Нужен типа Korg Microsampler.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну, когда нужны "фразы, эффекты...", то можно банально разделить поток на несколько каналов. Вряд ли музыкальная композиция содержит все 16.

Если все-таки все ш каналов заняты:

Среди стандартных MIDI кодов (СС) примерно половина свободных, т.е. неопределенных. Можно использовать только их. Тогда при грамотной фильтрации MIDI сообщений у нас получается 16 стандартных музыкальных канадов (содержащих только стандартные номера команд) и 16 каналов прочего назначения, содержащие только нестандартные CC коды.

По поводу двух шилдов, пожалуй, - да. Я не разбирался с библиотекой для SD, но мне кажется, что на одной карте можно одновременно открыть только один файл. Тогда, чтобы использовать две карты, нужно два шилда. Ну и vs1053, насколько я понимаю, тоже нужно два: для фоновой музыки и для эффектов, реализуемых через mp3. А то и все три: фоновое аудио MP3, эффекты MP3 и звуки MIDI.

В принципе, для озвучки корпоративов может хватить и MIDI от vs1053.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Говоря, о "фразах, эффектах...", я подразумевал, что  типовой набор GM MIDI хоть и содержит некие эффекты, типа хлопков, апплодисментов, геликптера и т.п. этого не достаточно. Надо иметь возможность писать любые короткие семплы, и выбирать их по МИДИ. Конечно, 16 миди каналов "за глаза" ))) Любыми командами, хоть СС, хоть иными... Вопрос только в наличии этих аудио файлов в устройстве.  Задачи качественного МИДИ синтезатора нет. ИМХО запустить МИДИ на шилде не сложно, по сравнению с задачей двух- потокового: аудио +МИДИ. Ок. Под фоновой аудио понимаем МИНУС, под эффектами - ??  имхо неудачный термин ... лучше: "клик темпа" прописанный на МИДи файле. "Клик" формируется как GM MIDI семпл любого ударного.  Под звуками МИДИ - семплы VS направляемые в 1 или 2 канал. Итого 2 шелда и 2 карты. Может проще все же такие термины использовать? А то запутаемся. Хотя....вот где ваша правота: интересно наряду с кликом темпа, выводить голосовые подсказки музыканту типа" сейчас надо переключить то-то... играем песню... ". Но тогда требуется третья плата.  И тогда, даже в 1 моем варианте без КФ не обойтись. Давайте, этого делать не будем. Т.е. семплерный реджим при "минусе"  не нужен.

Исправлено!!

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Можно использовать любую терминологию. Но делать это продуктивно можно лишь при условии, что терминология понятна всем участникам обсуждения. А здесь есть некоторые проблемы. Например, я не знаю, что такое "клик темпа". Потом, я совершенно запутался в многобразии каналов, например, хотелось бы знать, что такое:

- 1 канал,

- 2 канал,

- второй аудио канал (хотелось бы знать и про первый, хотя непосредственно он не упоминается, но раз есть второй...)

- 1 или 2 каналы MIDI - это из тех 16 предусмотренных стандартом или нумерация используется в другом смысле?

- второй служебный канал (хотелось бы и про первый служебный)

Ну и кое-что по аббревиатурам: VS, DAW...

КФ - это, если я правильно понимаю, конфигурационный файл?

Ну и на мой взгляд на одном шилде запустить одновременно и MIDI и MP3 невозможно.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Каналы - это отдельные аудио выхода: основной или первый слышим аудиторией, служебный или второй - это только в наушник музыканту, как правило - барабанщику. Клик - короткий щелчок, по которому музыкант держит темп композиции, примерно 4-240 шелчков минуту.  Период клика - плавает.

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

DAW  - редактор на компе, где раполагаются треки/дорожки одна над другой. Каждая дорожка может быть сохранена в отдельный файл, как МИДИ, так и МП3.

КФ- да. И не надо на одном - пусть 2 шелда.

Вы все это знаете, просто, я просто сам все видимо запутал))) 

Кстати, "клик"  - это частный случай "МиДИ звука". 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

По поводу каналов: "первый" и "второй" как-то соотносятся с "левый" и "правый"?

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

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

ПС: про декодер клика надо забыть((( реально костыль... даже стыдно:)))  Типа компаратор, счетчик, реле.... Все равно без МК не обойтись, а МК проще МИДИ сигнал расшифровать))) Спасибо!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Первый - он имеется в готовом виде или его надо составлять по ходу из фрагментов?

Аналогично служебный?

То, что в начале обсуждения фигурировало как канал с аудиометками, это то же самое, что и современный второй/служебный или его роль и принцип формирования сейчас изменились?

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Первый... служебный... если имеется ввиду не физический канал как гнездо, а инфа которая из него выходит, то они готовые полностью. Т.е. я не вижу необходимости экономить память, и давать запуск многих кусков по меткам времени из КФ. Хотя согласен, это более профессиональный подход. Есть просто 2 одинаковых по продолжительности МП3 и МИДИ файла.

Кстати, большой недостаток тот, что часто семплы должны звучать одновременно, т.е. музыка или ритм МНОГОГОЛОсный. У нас этого не получается..... Но и не надо))). Это по семплерного режиму.

Да, канал с аудиометками канул в прошлое, вместо него МИДИ. Принцип формирования - в DAW проставляется мышкой или иными средствами.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

В защиту семплерного режима: по идее - это чужеродная функция. Из "динамического программного автомата" (композиция, программа, концерт) девайс превращается в "статический звуковой модуль", как любой синтезатор, ждущий управления юзером.  С другой стороны, грех не воспользоваться СД картой и возможностью произвольной выборки файлов=семплов... с зацикливанием, программным управлением громкостью, ревером, эхо и т.п.  Поэтому и мусолим все вместе))) 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если у нас заранее все предопределено, то почему бы сразу не смикшировать все в два раздельных аудиоканала? И проблемы одновременно звучащих сэмплов не будет.

И, кстати, если речь идет о воспроизведении готовых файлов, почему бы не взять что-нибудь подешевле типа dfpleer'а? Тем более, последний, если не ошибаюсь, не требуйт ресурсов от основного контроллера, а самостоятельно работает с SD картой. 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

В ход пошли фотки:)) Ни с одного дешевого плеера я не смог добиться быстрого открытия МР3 файла с момента его выборки.  (Может просто недоработал(((...)  Тогда никакой синхронизации даже 2-х файлов не получится. Потом, вопрос: dfplayer же только на основной канал? ведь они МИДИ не читает. А качество звука тогда? Плохое.  Также не понял про "смикшировать все в 2 разных аудоканала"... Речь про семплерный режим? Я сейчас жалею, что вообще о нем много говорим. Давайте, решать 1 задачу только - 2 карты 2 шелда - один -качественный аудио. Второй - МИДИ (те. тоже только VS1053). Синхронный запуск пары файлов с обеих. Как думаете::)) 

Новизна устройства: Современная танцевальная музыка не требует такого устройства. Напротив, она сама задает темп, он постоянен. Более сложные композиции, в т.ч. классика требуют дирижера, подсказывающего изменение темпа.  Еще более сложные случаи, когда  часть композиции заканчивается, наступает пауза на несколько секунд, а новая часть должна начаться в новом темпе.  Как нескольким музыкантам вместе его заранее "услышать"?  Для этого и делается шкала с метками времени по всей композиции и применяются  наушники. Вторая задача - управление техникой. Это нужно при концепции "человек - оркестр", когда руки и ноги заняты инструментом. Мой сайт об этом тут: https://www.madesynth.com/

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А почему не посмотреть в сторону какой-нить малины? У нее и памяти дофига и софт, наверняка, какой-то уже имеется.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если мы говорим о том, что все готовится заранее, то:

- быстро открывается файл или медленно - роли не играет. Главное, чтобы время открытьия было всегда одно и то же. Зная это время, мы знаем, насколько раньше надо подать сигнал на его открытие.

- "смикшировать" - подразумевается, что если не нужно вносить изменений в процессе исполнения, то максимум работы переносится на ПК. Т.е. именно там происходит все сведение, а Ардуина уже только проигрывает записанное, сама ничего не микшируя.

То есть основная идея такая: используются два аудиоплеера (каждый со своей SD картой) и один модуль SD. Т.е. всего 3 SD карты. С двух из них воспроизводится с каждой свое аудио (желательно автономно - без вмешательства центрального МК), а с третьей сам МК читает MIDI и раздает команды.

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

Вопрос только в одном: если качество звука dfplayer'а неудовлетворительное, его нельзя использовать для основного канала.

Но и в этом случае, думаю, проще будет: vs1053 + dfplayer + SD-slot. Таким образом мы избавляемся от проблемы подключения двух vs1053 одновременно.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

sadman41 пишет:

А почему не посмотреть в сторону какой-нить малины? У нее и памяти дофига и софт, наверняка, какой-то уже имеется.

Дорого, и в чужом софте (прикладном) не охота копаться... Тут потом наращивать еще будем. И там все равно 2-х аудио каналов нет. 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

andriano пишет:

- время открытьия было всегда одно и то же.

Сложно экспериментально это время определить, сопоставить с 10-15 мс и т.п. Разные файлы, битрейты  дадут разное время. 

andriano пишет:

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

Сведение простейшее. Это только расстановка на МИДИ треке или меток изменения времени (темпа), или команд СС на управление оборудованием. В полном смысле сведение - как работа с звуковыми характеристиками микса-аудиофайла не требуется вообще. 

vs1053 с СД картой аудио - основной канал.  SD-slot - содержит МИДИ файл, читаемый ардуиной. Выход МИДИ с ардуино. dfplayer - как второй отдельный канал аудио. Все отлично, если с файл dfplayer воспроизведется по метками МИДИ без задержек. 

 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Переосмыслил.. поначалу не понял((( Да, можно именно смикшировать треки на ПК заранее: 1 основной аудио,  2 - аудио клик, в виде щелчка, 3 - МИДИ для управления. Т.е. не надо будет читать МИДИ и периодически запускать семпл "клика" с dfplayer во второй аудиоканал. (Хотя, если там прямое чтение, то м.б. и получится запуск его с периодом 1/240 мин. Файл на VS1053 у меня запускался минимум с периодом 1/80 мин). Это имелось в виду? Но надо м.б. все же упреждать момент запуска файла клика относительно основного до 10 мс. ИМХО, это неудобно - надо тестить, от класса карты м.б. будет зависеть даже..... Что касается МИДИ, то момент/фаза управления оборудованием не столь критичен (200..300 мс). 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740 пишет:

Сложно экспериментально это время определить, сопоставить с 10-15 мс и т.п.

Чего ж тут сложного?

И зачем сопоставлять с 10-15 мс?

Цитата:

Разные файлы, битрейты  дадут разное время. 

Вот с этим надо повнимательнее. Т.е. отделить действительные проблемы от беспочвенных страхов.

Отчего может быть разное время?

1. Если файлы будут записаны в разных местах карты. Решение - всегда писать только на чистую карту.

2. Если файлы будут иметь разный битрейт. Сомнительно. Нужно бы проверить. Но если даже "да", то кто мешает все файлы при подготовке приводить к одному битрейту?

3. Если файлы будут иметь разную длину. Крайне сомнительно. По крайней мере я не вижу, из-за чего так может быть. Но если так - выяснить зависимость и учитывать ее при определении моментов старта файлов.

4. Если задержки у vs1053 и dfplayer'а различны. Не страшно - определяем характеристики обоих и вычисляем для каждого индивидуальное время старта.

5. Если воспроизведение со временем разойдется, т.е. если темп воспроизведения у файлов будет разный. Такого нельзя исключать и с двумя vs1053 или двумя dfplayer'ами. Но можно определить разницу темпов воспроизведения и соответственно пересэмплировать файлы (точнее, файл dfplayer'а, чтобы качество основного не ухудшилось).

6. Рассинхронизация со временем аудио и MIDI. Корректируются константы, по которым определяется темп MIDI.

Ну вот, что мне пришло в голову, если есть еще какие причины - перечисляйте.

 

Да, и еще я не уверен, что Вы поняли основную мысть насчет синхронизации. Покажу на примере.

Пусть у нас есть файл 1, воспроизведение которого начнется через N мс после подачи команды, файл 2, воспроизведение которого запоздает на M мс, и пусть для MIDI тоже есть своя задержка, скажем, Q мс.

находим P = max(N, M, Q)

Создаем новый MIDI файл, в котором все команды старого MIDI будут сдвинуты от начала на (P-Q) мс, а команды воспроизведения 1-го и 2-го файлов сдвинуты от начала на (P-N) мс и (P-M) мс соответственно.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Как работать с СД в части временных характеристик чтения\записи файлов я вообще не знаю …. Полный пробел(((  

Мое мнение: Т1 – время задержки открытия файла. Т2 – время от момента открытия аудиофайла до момента, когда слышится первый музыкальный звук. (Важно, потому что вопрос именно в субъективном восприятии синхронности аудиоинформации). Т2 можно недопускать на ПК при подготовке файлов.

Вы предлагается делать ресемплирование (перезапись) аудио (вообще трудоемко)... и измерение смещения, т.е. задержки? Типа, после команды чтения, запускаем таймер и меряем время до первого МИДИ сообщения? Ну можно. А для аудио как? По первому «пику»? Или это функции библиотеки? 

И вот еще что: бывают случаи, когда Т2 является необходимым. Т.е. сначала слышим аудио клик по 2 каналу, настраиваемся "в мозгу" на темп, а аудио идет позднее. Но аудио файл то запускаем одновременно, просто вначале он «пустой».

Все очень сложно так, имхо. 

 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Как работать с СД в части временных характеристик чтения\записи файлов я вообще не знаю …. Полный пробел(((  

Мое мнение: Т1 – время задержки открытия файла. Т2 – время от момента открытия аудиофайла до момента, когда слышится первый музыкальный звук. (Важно, потому что вопрос именно в субъективном восприятии синхронности аудиоинформации). Т2 можно недопускать на ПК при подготовке файлов.

Вы предлагается делать ресемплирование (перезапись) аудио (вообще трудоемко)... и измерение смещения, т.е. задержки? Типа, после команды чтения, запускаем таймер и меряем время до первого МИДИ сообщения? Ну можно. А для аудио как? По первому «пику»? Или это функции библиотеки? 

И вот еще что: бывают случаи, когда Т2 является необходимым. Т.е. сначала слышим аудио клик по 2 каналу, настраиваемся "в мозгу" на темп, а аудио идет позднее. Но аудио файл то запускаем одновременно, просто вначале он «пустой».

Все очень сложно так, имхо. 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Как измерить необходимые временные характеристики, я писал в п.2. сообщения №10. Как работать с ними - в сообщении №38. В принципе, измерить можно и по-другому. Только Ардуинкой и без зацикливания: подаете аналоговый сигнал с выхода плеера со смещением на аналоговый вход Ардуинки. И измеряете время с момента _перед_ командой открытия файла до появления синусоиды на аналоговом входе.

2. Да, измерять можно и Т1 и Т2, но я привел методику для Т2, т.к. на мой взгляд именно оно представляет интерес.

3. Ресемплирование - это вообще отдельно. А по командам: вообще все прописывается в MIDI файле. В том числе команда на воспроизведение 1-го и и команда на воспроизведение 2-го файлов - это тоже MIDI команды. И их следует расположить в MIDI файле в нужное время. Как - я расписал в посте №38.

4. Ну так без проблем. Принцип тот же: располагаем в MIDI файле команду на запуск воспроизведения в нужное время с учетом задержки (т.е. вставляем ее в момент времени раньше - на величину задержки).

И в заключение вернусь к функции КФ (как Вы его обозвали). Как раз в нем и должны быть прописаны как времена, на которые включается воспроизведение каждого из аудиофайлов, так и задержки характерные для каждого из плееров. Естественно, понадробится программа на ПК, которая на основе предварительного MIDI файла и КФ создает новый MIDI файл (упрощенный - для Ардуино) - уже с командами на включение воспроризведения в нужное время.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Думаю, теперь уже все понятнее)) МИДИ трек - работает также как диспетчер, нивелирую аппаратные задержки, путем упреждений относительно фазы выбранной как исходная. Также выполняет и функцию по ТЗ - метки управления ВНЕШНИМ оборудование, и клик (или все же отдельный аудио будет). Предполагается что константы задержек примерно одинаковые для всех чипов и СД карт одного вида. Т1 убирается (или делается постоянным, регламентируется) на ПК.  Идея универсальна и перекладывает аппратные "изъяны" на программирование, что есть хорошо. Мерять задержки можно тестами, как описали, доводка - методом тыка и подбора. Никаких временных файлов не создаем, ничего не пишем на карту при эксплуатации. 

при этом сам МИДи файл создается на ПК пользователем. Как прописывать в него фазы запуска? а) давать шаблон - неудобно б) КФ в помощь. Так?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Думаю, не следует предполагать, что задержки окажутся одинаковыми для всех чипов. И, на мой взгляд, с измерения задержек и следовало бы начать, т.к. это даст пищу для дальнейшего планирования.

Я все больше склоняюсь к мысли, что Ардуина должна читать файл, содержащий MIDI команды, но предельно упрощенный по сравнению со стандартным MIDI файлом. Практика показывает, что написать программу, которая добывает нужные данные из файла стандартного формата, намного проще, чем программу, которая создает файл стандартного формата по имеющимся данным. А посему, думаю, целесообразно отказаться от идеи копировать MIDI формат.

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

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

andriano,  истекшее время тестил процесс создания 2-3 файлов на ПК. Уточнял у музыкантов потребности по темпу, в итоге - ТЗ. Коммерческого интереса нет, но интересно и мне, и моим друзьям. Ни один дешевый плеер у меня не работает((. Пресмотрел кучу роликов и датаШитов. Если песня - то еще вопроизводится кое-как. Если короткий семпл - то куча шумов и иной темп (а роликов таких нет). Якобы, делаю конвертацию из WAV в формат нечитаемый DfPlayer-ами/СД картами. Тестю их 3-4 вида, разные классы СД. Mini плеер точно не пойдет, т.к. в него очень неудобно вставляется СД карта. Нет ли советов? Проект актуален. А МИДИ....  конь на дороге не валялся еще... и со времением туго(((  Читал ваши топики тут про кэширование... про многоканальные аудио. Но, что-то больше никто сабжем не владеет(( 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015
  1. Может промодулировать ВЧ пачками основной канал и потом детектировать как-то эти пачки? Итого останется один файл.
  2. Многоканальное аудио, типа 5 в 1, и отказаться от управления оборудованием. Но чем читать?
  3. Использовать VS1053+Ардуино и еще одну такую же пару. Удорожание не значительное (вместо пары SD и «косячный» dfplayer ) , а перспективность по МИДИ синтезатору \ семплеру выше.
  4. Связку 2-х файлов научился делать на ПК. МИДИ «выдается» только типовой. Теперь надо утилиту писать, вставляющую «задержки» + упрощающие формат.  Есть библы чтения типового МИДИ Ардуиной, а чтение «своего упрощенного» формата надо писать с нуля.

      Увидел, что мои  dfplayer какие-то устаревшие: карточка надевается и потом сверху защелкивается крышкой – очень трудоемко и часто нет контакта.   Заказал пару обновленных  – ждать 3 недели.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

0. Да, только что проверил: то, что я посоветовал, оказалось невыполнимым - при кодированиив MP3 кодер добавляет в начало паузу примерно 47 мс. А 5 мс файл вообще корежит. Нет, в принципе можно и так, как я советовал, но к задержке из-за открытия файла добавятся еще 47 мс паузы в самом файле. В принципе, конечно, все эти задержки можно учесть, но не факт, что длина паузы всегда будет одной и той же.

1. Промодулировать можно, но в MP3 этого все равно не окажется. В звуковой файл более или менее стандартного формата нельзя поместить ультразвук. По крайней мере, в MP3. Можно только в WAV с частотой выборки 96 или 192 кГц. 

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

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

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Если модулировать, то думаю, это очень неплохое решение! Если, конечно, не внесет слышимых артефактов в основной канал. Wav вместо MP3 везде ( в т.ч. и в идее семплера) можно заменить. 32 Гб хватит. Если модулировние некодированное, то декодер проще. Если только клик, (без фазы управления) то пропуски (ошибка декодера) не нанесут "урона". Если же все же использовать счетчик кликов, т.е. определение фазы композиции,то это более критично. Если 2 пакета модуляции применить, и 2 декодера, (скажем на STM, если нужно пошустрее все вычислять), то ошибка уменьшится в 2 раза. Если кодировать модуляцию (как?), то для композиции в 10 минут: 200 темп Х 10 = 2000 - надо 11 разрядов. 

Что касается библиотек, я тоже не люблю их, но поскольку программирую плохо – то вынужден использовать. Но стараюсь «упростить» их, когда они не очень сложные. Если поможете – давайте писать с нуля…

Утилиту упрощения (если все же нужно) с МИДИ на С++ на ПК, думаю, напишу – есть опыт чтения МИДИ файла и его парсинг.

И я за эксперименты с полноценным МИДИ файлом в VS1053. МИДИ файл (кроме файла цифровых меток) будем использовать в ряде случаев, ВМЕСТО аудио основного канала. К примеру, это караоке. Тогда метки – это команды на переключение выводимого на экран текста песни в нужном месте.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

andriano пишет:

Для использования в качестве MIDI-синтезатора в чип догружается небольшая (десятки байт) программка, которая позволяет воспроизводить звуки сразу по мере поступления MIDI-команд, а не по внутренним часам как в случае воспроизведения MIDI файла.

Можете дать ссылку об этом? Нужна ли доработка моего "красного шелда", где НЕТ МИДИ входа? Или это как раз и решает проблему чисто софтово? 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740 пишет:

Если модулировать, то думаю, это очень неплохое решение! Если, конечно, не внесет слышимых артефактов в основной канал. Wav вместо MP3 везде ( в т.ч. и в идее семплера) можно заменить. 32 Гб хватит. Если модулировние некодированное, то декодер проще. Если только клик, (без фазы управления) то пропуски (ошибка декодера) не нанесут "урона". Если же все же использовать счетчик кликов, т.е. определение фазы композиции,то это более критично. Если 2 пакета модуляции применить, и 2 декодера, (скажем на STM, если нужно пошустрее все вычислять), то ошибка уменьшится в 2 раза. Если кодировать модуляцию (как?), то для композиции в 10 минут: 200 темп Х 10 = 2000 - надо 11 разрядов. 

Я как-то пропустил мимо сознания термин "модуляция". Посчитал, что речь идет просто о добавлении в звуковой сигнал ультразвука. В этом случае звуковой сигнал отделяыется от сигнала управления просто фильтром. А вот как это решить с использованием именно модуляции, притом на относительно низкой частоте - не знаю. С вопросами модуляции я никогда не сталкивался, может, здесь и есть простое решение, но оно мне неизвестно.

По поводу замены MP3 на WAV: это неизбежно будет сопровождаться кратным увеличением величины потока данных. Справится ли с этим Ардуина? Максимальный битрейт vs1053b подэйташиту 384 kbps. Для CD на 44100 это 44100*16=705600 или 706 kbps. Если мы повышаем частоту дискретизации до 96 кГц, это уже более 1.5 Mbps.

И, самое главное, непонятно - зачем.

Синхронизацию между звуковой дорожкой и управляющим сигналом можно сделать и гораздо проще.

Цитата:

Что касается библиотек, я тоже не люблю их, но поскольку программирую плохо – то вынужден использовать. Но стараюсь «упростить» их, когда они не очень сложные. Если поможете – давайте писать с нуля…

Ну, я думаю, ни для кого не секрет, что:

- практически у каждого здесь существуют собственные проекты,

- все эти проекты выполняются в основном во внеслужебное время (я, например, хоть и пенсионер, но - работающий),

- больше всего не хватает именно времени.

Я попытался за вечер подправить библиотеку под использование одновремено двух шилдов, но не получилось. Возникли принципиальные сложности. Не то, чтобы они оказались непреодолимыми, но их преодоление требует с одной стороны более внимательного изучения стандарта С++ (это не мой родной язык), а с другой - изучения заголовочных файлов и библиотек Ардуино. А это уже не на 1-2 вечера. В общем здесь - я пас.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Я понял. Перечитал вчера и весь пост... Вы смотрите вперед более чем я....  Ок. МИДИ ведь вы же запустили от клавы? Гугл выдает ссылки на realTime MIDI путем софта, но везде требуется GPIO. У Вас точно была такая же плата как у меня? GPIO портов нет и МИДИ входа нет? Если другая, - я не стану даже "копать"  вопрос, просто куплю на ЕБЕЕ другую. Но ...