Войти
ПрограммированиеФорумЗвук

Синтез звука метронома

Страницы: 1 2 Следующая »
#0
22:35, 9 апр. 2012

Есть ли какие-нибудь быстрые алгоритмы по сабжу? Или табличные? Чтоб влезло на микроконтроллер с частотой 10MHz и 1Кб флеша


#1
23:32, 9 апр. 2012

  Да, а какой микроконтроллер?

  Я когда-то давно работал с этой платой:
http://www.olimex.com/dev/msp-1121stk.html
Там есть такое. Только нет нормальных мануалов
как писать к нему проги на Си, до сих пор доки
на асме.

#2
23:38, 9 апр. 2012

attiny 2313

хотел убить сразу двух зайцев: сделать метроном для занятий на гитаре и подкачать навыки программирования на мк

#3
23:48, 9 апр. 2012

кажется я ошибся разделом. перенесите пожалста в Код->звук

#4
23:56, 9 апр. 2012

  Вот можешь вот такую схему попробовать реализовать:
http://www.olimex.com/dev/avr-mt.html
  Коды примера работы с динамиком там же:

int main()
{
  //set PORTB5 as output with high value and check state of PINB6
  PORTB = (PORTB & 0b00011111) | 0b00100000;
  DDRB  = (DDRB  & 0b00011111) | 0b00100000;
  
  while (1)
  {

    if (PINB & 0b01000000)
    {
      PORTB = PORTB | 0b00010000;
      for (i=500; i; i--);
      PORTB = PORTB & 0b11101111;
      for (i=500; i; i--);
    }
  }
  return 0;
}

#5
10:29, 10 апр. 2012

Перенёс.
А что конкретно нужно сформировать? WAV-поток? С какой частотой, битностью? Какие входные данные, кроме частоты ударов в минуту?

#6
11:07, 10 апр. 2012

Ему походу надо динамиком управлять.

#7
11:34, 10 апр. 2012

Так на динамик идут данные в каком виде?

#8
11:45, 10 апр. 2012

Mikle
Я так понял - нужно сэмулировать щелчок - т.е. либо просто подавать туда периодично напряжение (или через усилитель частоту), либо пойти дальше - и через ЦАП передавать данные wav файла (на 1Кб влезет думаю).  Но может я и ошибаюсь с задачей.

#9
12:39, 10 апр. 2012

Задача - просто тикать динамиком заданное число тиков в секунду.
Сначала хотел тики делать синусом, но этот вариант не устроил, хотелось что-нибудь более похожее на звук метронома.

Динамик управляется через ШИМ. (либо R-2R ЦАП, если частоты не хватит)

#10
13:20, 10 апр. 2012

Mikle
> Так на динамик идут данные в каком виде?
В аналоговом. В каком же ещё?

#11
13:21, 10 апр. 2012

bee buster
> хотелось что-нибудь более похожее на звук метронома.

Я бы на твоём месте взял бы записанный звук метронома и поанализировал бы его в звуковом редакторе. Чёрт его знает как точно колебания выглядят, но сдаётся мне что очень просто.

#12
13:22, 10 апр. 2012

bee buster
> Динамик управляется через ШИМ.
Через простенький фильтр, или даже без него, тупо фильтруя инерцией мембраны, что аналоговой форме вполне эквивалентно. Десяти мегагерц должно хватить.

#13
14:36, 10 апр. 2012

Вот, сходу на бейсике сделал прототип:

Function Click(ByVal TT As Long) As Integer
  Const FF As Single = 0.05
  Const DD As Single = 0.948
  Static s As Single, p As Single, t As Long, f As Single
  Dim PP As Single

  PP = p * DD + s
  s = s - p * FF
  p = PP
  t = t + 1
  If t > TT Then
    p = 32000
    s = 0
    t = 0
    f = FF
  End If
  Click = p
End Function
Эту ф-цию вызываем с частотой семплирования, её значение передаём на динамик, параметр TT определяет частоту ударов метронома, если частота семплирования 44100 гЦ, а TT = 4410, то метроном будет бить 10 раз в секунду. Константа FF определяет высоту звука, FF больше - звук выше. Константа DD определяет скорость затухания звука после удара, если DD=1-FF, то звук затухать не будет, если больше - звук нарастает, самовозбуждается, то есть DD должно быть немного меньше 1-FF.

#14
13:38, 11 апр. 2012

Во-первых где это ты видал исполнение бейсика с производительностью хотя бы 44100 операторов в секунду, не говоря о подпрограммах. А во-вторых мк вообще не потянет бейсик.

Страницы: 1 2 Следующая »
ПрограммированиеФорумЗвук

Тема в архиве.