Однострочные (почти) мелодии на STM32

Была сделана демо плата для STM32 с сами знаете какой целью и вот подошло время для проверки ЦАП. В это время читая хабр, я заметил комментарий про однострочные мелодии. Вот источник — http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html
Здесь все описание и примеры формул и видео, а также онлайн джаваскрипт для всего этого.
Суть в том, что с определенной частотой (чаще всего 8Кгц) в ЦАП поступает значение вычесленное от инкрементируемой переменной по эмпирической “формуле”, чем-то похожей на генератор М-последовательности. Иногда получаются мелодии, вот. На выход цапа (фильтр желателен, хотя…) был подключен простой усилок и динамик.
Прога проста – настройка таймера на требуемый период срабатывания (он может быть разный), разрешение прерывания, включение ЦАП и обнуление переменной t, которую будем использовать для итерации:

RCC->APB1ENR |= RCC_APB1ENR_DACEN;
DAC->CR |= DAC_CR_EN1;
u32 t=0;
__enable_irq();
NVIC_EnableIRQ(TIM2_IRQn);
//Дальше “безконечный” цикл

Вот код в прерывании таймера №2:

void TIM2_IRQHandler(void)
{
  TIM2->SR &= ~TIM_SR_UIF;//сбросить флаг

  t++; //инкремент
  adc=t*(t>>5|t>>8)>>(t>>16);//wan1
  //некоторые не проверял еще
  ///adc=t*((t>>9|t>>8)&63&t>>4);
  ///adc=t*((t>>12|t>>8)&63&t>>4);
  ///adc=t*((t>>9|t>>13)&25&t>>6);
  ///adc=t*(t>>11&t>>8&123&t>>3);//
  ///adc=t*(t>>8*(t>>15|t>>8)&(20|(t>>19)*5>>t|t>>3));//15 sec minitunes by visy PONG
  ///adc=(-t*4095)*(255&t*(t&t>>13)>>12)+(127&t*(234&t>>8&t>>3)>>(3&t>>14));//  fg
  //adc=t*(t>>(t>>9&t>>8)&63&t>>4);//
  //adc=((t*(t>>8|t>>9)&46&t>>8)^(t&t>>13|t>>6));//Lost
  //adc=t*5&(t>>7)|t*3&(t*4>>10);//)>>(t>>16);///Crash

  DAC->DHR12R1 = adc<<4;   // загрузка в ЦАП1
}

Для STM32F100C4T6B при ЦАП1 сигнал снимается с вывода PA4 и звучит постоянно, пока есть питание. Звучание как 8-ми битная шарманка, но я лично одну мелодию себе выбрал, + ничто не мешает синтезировать свою хоть случайно, хоть из готовых или, например, с помощью генетических алгоритмов (хотя я не в курсе как это).
  • +3
  • 29 ноября 2011, 00:25
  • KT3012

Комментарии (10)

RSS свернуть / развернуть
Люблю 8-битку. А тут еще и «по формуле». +1! Заинтересовало
+1
Тут она какая-то сильно хардкорная.)
0
Компактненько :) А почему именно 8кгц?
0
Хм, «с помощью генетических алгоритмов»… Наверное, Вы что-то путаете (либо недоговариваете :) ). Генетический алгоритм предполагает наличие «Целевой функции» — тесть математической функции, которая, оценивает, в данном случае, «красоту» мелодии. А «красота» — вещь иррациональная, функцией от начальных значений ее выразить тяжело.
0
А можно из готовой мелодии получить мат. формулу, хотя бы приближенное ее подобие, типо того?
0
Это сродни получения формулы из функции, безусловно можно, если усреднить, центрировать, избавится от апериодичных участков, то может быть даже реально…
0
#define grammar_nazi_level 100500
Бля, да заебали уже своими "зделана" да сколько можно??!!! Ну набивай текст в MSWord, например, он тебе все такие места тебе подсветит. Это если пойти по самому легкому варианту.
#undef grammar_nazi_level

ну чесс слово, ну сколько можно-то? ну уж такие-то вещи уже пора выучить.
мог бы заминусовать — только за это всадил-бы по максимуму.

ну про остальной «стиль» изложения уже молчу, просто чтобы не выплеснуть очередную порцию негодования опустим подробности… %) %) %)
+1
Спасибо за найденную ошибку. В свое оправдание могу сказать, что в ворде и проверял, но чего-то не обратил внимания.
0
Прикольная штука! А ведь и правда слушабельные мелодии получаются.
0
  • avatar
  • _YS_
  • 29 ноября 2011, 18:58
Класс! Мне тоже (t*(t>>5|t>>8))>>(t>>16) понравилась.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.