Например TDA7294

Форум РадиоКот • Просмотр темы - MIDI плейер для AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 25, 2024 13:41:52

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 116 ]    , , , , 5,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Чт сен 28, 2017 09:33:18 
Грызет канифоль

Зарегистрирован: Чт апр 16, 2009 14:23:59
Сообщений: 274
Рейтинг сообщения: 0
поскажите по формату мелодии на выходе программы:
Код:
{
        [тиков таймера подождать до этого события]
        [канал]
        [нота или 0 === отключить]
    }
typedef struct
    {
        //highest bit is highest for channel index
        uint8_t m_noteNumber;
        ///15-3 bits - Delta value, 2,1,0 bits - channel index
        uint16_t m_delta;
    } TPlayerStateChange;

const TPlayerStateChange s_melody_events[123] = {
   { 42, 9 },//1-1
   { 30, 10 },//1-2
   { 49, 128 },//16-0
   { 0, 128 },//16-0
   { 56, 8 }, //1-0
   { 44, 9 },//1-1
   { 68, 266 },//33-2
   { 57, 8 },//1-0
   { 45, 9 },//1-1
   { 69, 266 },//33-2
   { 54, 8 }, //1-0
...

вот в комментариях я выписал значения delta и Nch:
как проигрывается данный файл?
1) ждем 1 тик таймера с fдискретизации
2) выдаем в канал PWM ноту №42
3) ждем еще 1 тик? или сразу добавляем на выход ноту №30?
4)ждем 16 тиков
5)....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Чт сен 28, 2017 10:27:04 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 6
Рейтинг сообщений: 28
Зарегистрирован: Вт окт 25, 2011 17:39:42
Сообщений: 160
Откуда: Киев
Рейтинг сообщения: 1
1) Так, только тики 255Гц.
2) минимальное значение тиков - 1, это сделано для того, чтобы плейер не обрабатывал несколько нот на одном событии. Даже если по нотам было по-другому, это незаметно при прослушивании. Значение тиков 0 обозначает конец мелодии.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Чт сен 28, 2017 11:07:27 
Грызет канифоль

Зарегистрирован: Чт апр 16, 2009 14:23:59
Сообщений: 274
Рейтинг сообщения: 0
ясно , спасибо. Хотелось еще уточнить:
после того как обработано событие, например, { 42, 9 },//1-1, это значит, что нота 42 будет присутствовать на выходе до тех пор, пока не появится новое значение на 1м канале либо {0, 0b...001} ?
накидал в виде диаграммы, правильно ли я понял?
вместо частоты просто номер ноты поставил


Вложения:
dia.png [18.08 KiB]
Скачиваний: 512
Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Чт сен 28, 2017 11:55:33 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 6
Рейтинг сообщений: 28
Зарегистрирован: Вт окт 25, 2011 17:39:42
Сообщений: 160
Откуда: Киев
Рейтинг сообщения: 1
Нота на канале звучит, пока не будет установлена другая нота на этот канал, или не придет событие отключения на этот канал(нота=0).
На диаграмме все каналы включились одновременно, так быть не может - задержка минимум 1 тик.
И я не понял, что обозначает диаграмма Вых.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Чт сен 28, 2017 13:35:18 
Грызет канифоль

Зарегистрирован: Чт апр 16, 2009 14:23:59
Сообщений: 274
Рейтинг сообщения: 0
ой, со стартом оплошал :oops: , но идею понял верно.
под выходом подразумевал sample , который потом отскалировать согласно CHANNEL_COUNT


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Пт сен 29, 2017 23:29:45 
Грызет канифоль

Зарегистрирован: Чт апр 16, 2009 14:23:59
Сообщений: 274
Рейтинг сообщения: 0
а вот еще вопрос возник:
Код:
uint16_t s_noteFreqEx[ 12 ] = { 0xFCDF, 0xEEAE, 0xE147, 0xD4A3, 0xC8B4, 0xBD70, 0xB2CE, 0xA8C4, 0x9F4B, 0x965C, 0x8DEB, 0x85F3 };

uint16_t inline Player_GetNoteFreqAdd( uint8_t _noteNumber )
{
    uint8_t noteIndex;
    uint8_t noteDiv;
   
    noteIndex = 132 - 1 - _noteNumber;
    noteDiv =   noteIndex / 12;  //how many octaves down
    noteIndex = noteIndex - 12 * noteDiv;
    return s_noteFreqEx[ noteIndex ] >> noteDiv;
}           

возьмем, например, ноту №42 из таблицы http://img.radiokot.ru/files/47221/4xp1cfzuz.png
№42=92Гц
если считать по данному алгоритму:
Код:
noteIndex = 132 - 1 - 42=89;
    noteDiv =   89 / 12 = 7 //how many octaves down
    noteIndex = 89 - 12 * 7 = 5;
    return s_noteFreqEx[ 5 ] >> 7 = 0xBD70 / 2^7 = 48496 / 127 = 378 Гц;

где подвох?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб сен 30, 2017 15:58:51 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 6
Рейтинг сообщений: 28
Зарегистрирован: Вт окт 25, 2011 17:39:42
Сообщений: 160
Откуда: Киев
Рейтинг сообщения: 0
Эта функция возвращает значение для приращения указателя в таблицу семпла.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Пн мар 25, 2019 20:45:13 
Первый раз сказал Мяу!

Зарегистрирован: Пн ноя 15, 2010 19:17:00
Сообщений: 27
Откуда: Москва
Рейтинг сообщения: 0
Изображения в статье не грузятся.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Вс дек 01, 2019 16:07:10 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
Всё поправимо при помощи машины времени: https://web.archive.org/web/20170827061 ... al/game/51

А вообще - офигенно звучит, вспомнился атари :)

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб дек 07, 2019 12:06:40 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 6
Рейтинг сообщений: 28
Зарегистрирован: Вт окт 25, 2011 17:39:42
Сообщений: 160
Откуда: Киев
Рейтинг сообщения: 0
Копия статьи с рисунками:
http://www.deep-shadows.com/hax/wordpress/?page_id=1111


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Пт фев 04, 2022 17:04:49 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18100
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
подниму тему и обращусь к сообщению с первой страницы:
В 8-битном сэмпле, без знака, нет значения 00h (иначе сэмпл будет несимметричным).
Dmitry Dubrovenko, ты не прав, значение 0 имеет право быть.
работа таймера в режиме Fast PWM такова, что при 0 в регистре сравнения таймер формирует импульс шириной в 1 такт таймера.
а при числе 255 (ШИМ 8 бит) в регистре сравнения таймер формирует постоянную 1 на своем выходе.
таким образом, "запрещенным" числом является число 255 в регистре сравнения, а не число 0.
а идеально симметричный меандр (одинаковые длительности импульса и паузы) получаются в числе 127 в регистре сравнения.
и таким образом, таблицу синуса нужно строить относительно числа 127 (ноль синуса), а максимальные пределы изменения синуса тогда будут от 0 до 254.
при этом ширина импульса будет изменяться от 1 такта (при 0 в регистре сравнения) до 255 тактов (при 254 в регистре сравнения), и будем иметь идеальную симметрию сэмплов.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Пт фев 04, 2022 21:04:29 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2329
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
Starichok51 писал(а):
значение 0 имеет право быть.
Ну, во-первых, речь шла не о работе АВР, а о формате звукового сэмпла Unsigned.
Там используются значения от 1 до 255, а середина - 128.
Про особенности работы АВРов я изрядно подзабыл, но вот из твоих слов не вижу никаких противоречий.
Почему ты считаешь, что 255 - запрещённое состояние?
Ну будут все 256 тактов, так и что?
Главное, что б весь диапазон составлял нечётное количество уровней, тогда сэмпл будет симметричным.
Кстати, насколько помнится, в АВРах был интересный режим PWM, когда использовался не один а два "симметричных" такта.
В первом сперва шёл 0, а затем 1, а во втором - наоборот.
Таким образом результирующий импульс изменялся симметрично относительно частоты PWM.
Правда для этого её необходимо было повышать в два раза.

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб фев 05, 2022 12:43:56 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18100
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
я уже достаточно подробно все объяснил, в том числе и почему 255 - запрещенное число.
при 255 ШИМ "стоит" - на выходе держится постоянно 1. это нам не годится.
а если "середина" равна 127 - то имеем идеальный, симметричный меандр.
и изменения "туда-сюда" на 127 дадут нам диапазон от 0 до 254, всего 255 состояний - именно нечетное число.

"интересный режим" - это "PWM, Phase Correct". счетчик считает "туда и обратно". поэтому частота ШИМ получается в 2 раза ниже, чем при быстром ШИМе (Fast PWM).
и этот режим нам не подходит именно из-за того, что частота в 2 раза ниже, чем при быстром ШИМе.
и вот, в режиме "Phase Correct", как раз ноль будет запрещенным числом,так как при 0 импульс на выходе отсутствует - на выходе держится постоянно 0.
и поэтому там, как раз, серединой будет 128, а изменения на 127 "туда-сюда" дадут нужное нам нечетное число состояний от 1 до 255.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб фев 05, 2022 20:02:50 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2329
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
Starichok51 писал(а):
это нам не годится
Да почему не годиться-то?
Конечный результат будет абсолютно одинаковый используем мы диапазон от 1 до 255, или от 0 до 254.
Но в первом случае данные представлены в формате 8-bit Unsigned, а во втором их надо специально пересчитывать перед выводом в PWM.

Starichok51 писал(а):
этот режим нам не подходит именно из-за того, что частота в 2 раза ниже
Опять же, что в этом страшного?
Вы путаете частоту PWM и частоту квантования.

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб фев 05, 2022 20:18:08 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18100
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
опять-таки, ты задаешь вопрос, когда я чётко написал ПОЧЕМУ не годится.
и в прошлый раз я всё четко расписал, но взялся задавать вопросы, как будто не понял написанного мной.
мне совершенно не приходится ничего пересчитывать при диапазоне от 0 до 254 в режиме "быстрого" ШИМ.
ничего я не путаю.
я прекрасно различаю частоту сэмплирования частоту ШИМ, которая и воспроизводит звук.
конешно, ничего страшного нет в том, что в режиме Phase Correct частота в 2 раза ниже, но лично мне это не нравится.
и в режиме Phase Correct с диапазоном от 1 до 255 тоже не нужно ничего пересчитывать.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб фев 05, 2022 20:39:33 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2329
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
Starichok51 писал(а):
я чётко написал ПОЧЕМУ не годится
Отнюдь.
Ты написал, что при 255 будет полное заполнение, но ПОЧЕМУ ты считаешь, что оно не годиться, не сказал.


Starichok51 писал(а):
не приходится ничего пересчитывать

Как же не приходится, если данные храняться в диапазоне 1-255, а ты используешь 0-254?
Нужен банальный декремент каждого байта.

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Сб фев 05, 2022 21:16:06 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18100
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
не годится потому, что полное заполнение нарушает форму (симметрию) выходного сигнала ШИМ.
с полным заполнением из-за нарушения симметрии будет подмагничивание динамика. хотя, на слух это обнаружить практически невозможно.
нам нужно, чтобы ширина импульса изменялась от 1 такта таймера до 255 тактов.
то есть, при 255 тактах импульса должна быть пауза в 1 такт.
соответственно, при 1 такте импульса должна быть пауза в 255 тактов.
и никаких полных заполнений не допускается.
тогда будет абсолютная симметрия генерируемого синуса.
у меня данные синуса хранятся в диапазоне 0-254 - пересчитывать ничего не надо. и середина диапазона, как я уже сказал = 127.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Вс фев 06, 2022 13:55:46 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 163
Зарегистрирован: Вс янв 09, 2011 16:51:39
Сообщений: 2329
Откуда: Санкт-Ленинград
Рейтинг сообщения: 0
Starichok51 писал(а):
полное заполнение нарушает форму (симметрию)
Господь с тобой! Что ж ты такое говоришь-то? :)
Подмагничивание у тебя возникнет, если ты не уберёшь постоянную составляющую из РЕЗУЛЬТИРУЮЩЕГО сигнала (и без разницы, будешь ты менять от 0 до 254, или от 1 до 255, ибо это будет в диапазоне от 0 до Uпит МК). А для этого задаются минимальной частотой сигнала и ставят ФВЧ. Но это - уже аппаратная особенность и к формату хранения сэмпла не имеющая отношения.

Starichok51 писал(а):
нам нужно, чтобы ширина импульса изменялась от 1 такта таймера до 255 тактов
Да не нужно нам этого.
Нам нужно, что б динамический диапазон составлял 255 значений и только, вот тогда и будет симметрия.

Starichok51 писал(а):
у меня данные синуса хранятся в диапазоне 0-254
А где ты их берёшь-то?
Все редакторы создают звуковые файлы в формате 1-255.
Следовательно, всё-равно конвертировать приходится.
И так понимаю, ты ещё никакой арифметики с ними не производил. :wink:

_________________
ICQ нет, и, в ближайшее время, не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Вс фев 06, 2022 14:30:10 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
подадим минимум диапазона на ШИМ - увидим редкие короткие импульсы. подадим максимум - увидим постоянную единицу. (для рассматриваемого режима ШИМ). несимметрия очевидна. какие еще вопросы?
кстати, динамический диапазон для 1-байтного формата не 255 зачений, а 127.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MIDI плейер для AVR
СообщениеДобавлено: Вс фев 06, 2022 15:12:22 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18100
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Dmitry Dubrovenko писал(а):
А где ты их берёшь-то?
Все редакторы создают звуковые файлы в формате 1-255.
а мне не нужны редакторы. мне программа на С++ делает все расчеты.
причем, на любое количество сэмплов (шагов) синуса, но всегда со смещением 127 нуля синуса.
я сам задаю число шагов и величину смещения нуля синуса.
у меня был даже вариант, где синус состоял из 122 шагов, чтобы при дельта=1 выходная частота была 256 Гц.
а несимметрию при значении 128 ты легко можешь посмотреть в том же Протеусе.
создай простенькую программу с таймером в режиме "быстрого" ШИМ (8 бит), и осциллографом увидишь, что при числе 128 длительность импульса больше длительности паузы.
а при числе 127 длительность импульса точно равна длительности паузы.

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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 116 ]    , , , , 5,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: alex-551 и гости: 95


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y