Создание микшера или эквалайзера в графике Turbo C++

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

Вот картинка:

И моя попытка:

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <graphics.h>

void main(){
    int gd = DETECT, gm;
    initgraph(&gd,&gm, “D:\\TC\\BGI”);
    randomize();
    int x = 100;
    int y,a; 
    setfillstyle(2,GREEN);

    do{
        delay(100);
        y = random(150);
        if ((200-y) >=a){ 
            setfillstyle(2,BLACK);
            bar (x,200-y,x+20,a); 
        } 
        else { 
            bar (x,200,x+20,200-y); 
        }  
        a = 200-y; 
    }
    while(!kbhit());
    getch(); 
    closegraph(); 
}

person Jirudojian Baaresu    schedule 27.07.2017    source источник
comment
ну, с вводом random этого будет трудно добиться. потому что без инициализации начального числа в каждом кадре он будет сильно мерцать, а вместе с ним и будет статичным. Для плавного моделирования вы можете создать набор случайных синусоидальных волн в начале, а затем просто повторять их каждый кадр... Другой вариант - использовать вашу текущую реализацию и интерполировать между состояниями с течением времени...   -  person Spektre    schedule 07.08.2017


Ответы (1)


Вы должны делать это повторно в своем основном цикле:

  1. вычислить положение баров

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

    если это фильтры GUI для настройки полосовых фильтров, вам нужно добавить для них интерфейс, например, «переместить» их с помощью мыши или что-то в этом роде. для этого нам нужно больше информации ...

    Если столбцы представляют собой спектрограмму, вам нужно выполнить ДПФ для некоторого окна входного сигнала, которое движется со временем.

  2. очистить буфер

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

  3. рендеринг баров для буферизации

    эту часть вы утверждаете, что уже реализовали, поэтому нет необходимости в объяснениях.

  4. буфер рендеринга на экран

    Это последний шаг обратной/двойной буферизации, чтобы избежать мерцания.

  5. подождать/поспать некоторое время

  6. определить условие выхода

    если активно, то остановите цикл, в противном случае снова перейдите к #1...

Если вы хотите сделать мышь GUI, вам нужно добавить обработчики событий мыши. Я думаю, что в Borland Turbo C++ для этого были некоторые библиотеки, но, если я ошибаюсь, вы можете использовать INT 33h для периодического сканирования состояния мыши самостоятельно с помощью опроса (что далеко не идеально, но будет работать для стартеры) или подключите свой собственный обработчик мыши.

Вот некоторые связанные вещи для чтения:

person Spektre    schedule 27.07.2017