Синтезатор на Ардуино. 2.0

Тема в разделе "Arduino & Shields", создана пользователем Pelmen, 27 май 2019.

  1. Pelmen

    Pelmen Нуб

    Привет, я собираю синтезатор на Ардуино.
    В будущем собираюсь синтезировать более сложные звуки, но нужно с чего-то начать.
    Перейдём к задачкам.
    дядя Витя говорил: -Находите таблицу частот нот, и вписываете соответствующую цифру. Но таким методом точной звукопередачи в принципе не добиться, и всегда будут присутствовать вторичные и троичные гармоники.
    Можно ли улучшить звук ВЧ фильтром?

    Так, новый код:
    Код (C++):
    int val = 0; //сюда считываем сигнал

    void setup()
    {
        Serial.begin(9600);              //  setup serial
        pinMode(7, OUTPUT);              //  выход на светодиод
        digitalWrite(7, LOW);
        pinMode(11, OUTPUT);             //  выход на динамик
    }

    void loop()
    {
        for (int i = 0; i < 15; i  ) // цикл на 15 раз
        {
            int val = analogRead(i);
            if (val != 0)
            {
                digitalWrite(7, LOW);
                noTone(11);
               
                continue;
            }
           
            switch (i)
            {
                case 0:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 988);
                    delay(100);
                   
                    break;
                }
                case 1:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 880);
                    delay(100);
                   
                    break;
                }
                case 2:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 784);
                    delay(100);
                   
                    break;
                }
                case 3:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 698);
                    delay(100);
                   
                    break;
                }
                case 4:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 659);
                    delay(100);
                   
                    break;
                }
                case 5:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 587);
                    delay(100);
                   
                    break;
                }
                case 6:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 523);
                    delay(100);
                   
                    break;
                }
                case 7:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 494);
                    delay(100);
                   
                    break;
                }
                case 8:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 440);
                    delay(100);
                   
                    break;
                }
                case 9:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 392);
                    delay(100);
                   
                    break;
                }
                case 10:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 349);
                    delay(100);
                   
                    break;
                }
                case 11:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 329);
                    delay(100);
                    break;
                }
                case 12:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 293);
                    delay(100);

                    break;
                }
                case 13:
                {
                    digitalWrite(7, HIGH);
                    tone(11, 261);
                    delay(100);                  

                    break;
                }
                case 14:
                {
                    digitalWrite(7, HIGH);
                    tone (11, 246);
                    delay(100);

                    break;
                }

            }
        }
    }
     
  2. parovoZZ

    parovoZZ Гуру

    Нет. Нужен НЧ фильтр. ПЕРЕСТРАИВАЕМЫЙ. Причем с хорошей крутизной. На коленке без приборов не сделать.
     
  3. Pelmen

    Pelmen Нуб

    1.Перестраиваемый. Всмысле чтоб можно было делать срез меньше или больше?
    2.Без каких приборов?
     
  4. parovoZZ

    parovoZZ Гуру

    Что такое вторичные и троичные гармоники?
    Меандр состоит в основном из нечетных гармоник. Допустим, мы генерируем 500 Гц. Третья гармоника будет на частоте 1500 Гц. Допустим, мы ее задавили. А теперь мы хотим воспроизвести меандр с частотой 1500 Гц. Но 1500 Гц задавлена фильтром. Что делать?
    Что мешает генерировать сигнал с помощью нормального ЦАП? Например, с помощью малины.
     
    Daniil нравится это.
  5. Daniil

    Daniil Гуру

    Предупреждаю, что я никогда не делал синтезаторы.
    Что вам нужно?
    Если вы не слухач, то есть гармоники или их нет зачем париться?
    Если слухач, то ардуино не лучшее решение. (решений не знаю, но уверен, что такие микросхемы есть) Но придётся паять.
    Если это развлекалово и вам по кайфу выжать всё из ардуинки, то нужно думать. На что вы готовы ради синтезатора)
    Синтезировать можно разными способами.
    На разных нотах у пассивного фильтра будет разный эффект. (фильтр не перестраиваемый?)
    Можно поставить набор полосовых фильтров и снимать сигнал с нужного.
    Можно поставить перестраиваемый полосовой фильтр и просто его двигать на ту ноту, что должна играть.
    Можно генерить ужасный сигнал, у него будет забор гармоник с почти одинаковой амплитудой и опять полосовым выделять нужную.
    Можно поставить кучу генераторов и снимать сигнал с нужного.
    Можно поставить один генератор с кольцом ФАП и задавать ему нужную ноту.
    Надеюсь, мы правильно поняли слово "синтезатор".
     
  6. sslobodyan

    sslobodyan Гик

    Синтезатор должен быть полифоническим. А tone - монофоническое. Читайте о DDS - прямом цифровом синтезе частоты. Вот еще для просветления http://pic24.ru/doku.php/osa/articles/pk2_osa_piano
     
  7. otis

    otis Нерд

    Просто человек не понимает что такое синтез и как это должно работать. Все видят только вершину айсберга. В что произходит в синте при нажатии клавиш знают только единици. Маленькую атари PINK можно сделать на ардуино. А во DXсовский звук ты точно не сможешь повторить.
     
  8. parovoZZ

    parovoZZ Гуру

    А это точно синтез, а не сэмпл?
     
  9. otis

    otis Нерд

    Увы там работа 6 операторов. И при этома какой то оператор управляет другим оператором.
    Если знаешь как это работает и как делают звук то можно было много чего "насентезировать" и еще ямаховкские DXксы и прочие синты 80-90годав работали на присетах. А семплы это исходники для семплера. А это уже другая история.
     
  10. parovoZZ

    parovoZZ Гуру

    не знаю. Потому и спрашиваю.

    ну я скачал тут прогу для MIDI ударных - звучат ударные очень сочно. Очень сильно сомневаюсь, что это пресет.
     
  11. otis

    otis Нерд

    Молодец. Теперь скачай мануалы и почитай. Миди это набор команд которая объединяет работу нескольких синтезаторов. В системе есть мастер и есть слейв. Ведущий и ведомый. Как вот миди это как игра "САЙМОН ГОВОРИТ" Включи ноту ля. - Выключи ноту ля. И все.
    Миди это набор контроллеров со своими инструкциями. И миди их передает.
    Теперь постараюсь ответить на тему семл.
    Смотри. Работа синтезатора ето исполнение инструции. Инструкции это набор параметров. При этом инструкции для скрипки одни а для пианино другии.
    При этом синтезатор так же понимает инстркции и твоих барабанов. Звуковому чипу что стоит у тебя в компьютере все равно что он получает по шине данных. В покете который получит чип будут данные о типе ГОЛОСА его длительности ,высоте, уровне, и прочие. Так вот миди и есть эти инстркуции.
    Стандартный голос синтезатора это набор параметров. Есть голоса которые можно поменять. Есть голоса которые не возможно поменять.
    Сами голоса могут быть либо синтезированны. Либо за семплированы и оцифрованны в таблично волновые формы(как правило с такими голосами работают рабочие станции) что требует больших вычеслительных ресурсов. Чип твоего компьтера может и на этом работать. Все в что нужно в пакете данных.
    А по просту миди это просто управление с одного синтезатора ;секвенсора;семплера;ритм компьтера; -други миди устройством.
    Другое применение миди это создание присета. То есть используя ручки синтезатора я создал какой то оригинальный звук. В эпоху когда миди не было с сентезаторам шли такие листы бумаги где были нарисованны все ручки кнопки и прочие. Так что бы не забыть как я сделал это "шедевр"я брал ручку и просто зарисовывал положение моих ручек. А с появлением миди я создавал свой пресет с теми настройками которые я накрутил(насентезировал). И по миди я просто давал команду включи ка мой пресет. И он играл.
    Это было круто. Самый крутой синт 80-90 ямаха DX7. Ну или KORG POLI800.