2017-07-27 8 views
0

にミキサーやイコライザーを作成し、私はバーを作成しようとしたが、出力はただのバーで、と私は上下に視覚的なイコライザーのようなバーを移動したいが、私はそのための正確なコードを知りません。誰もそれを知っていますか?ここでターボ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(); 
} 
+0

「ランダム」入力の場合、これは達成するのが難しいでしょう。なぜなら、各フレームを初期化せずに、多くの点滅し、静的になるからです。スムーズなシミュレーションのために、最初にランダムなsin波を作成し、各フレームを反復するだけです...もう一つの選択肢は、あなたの現在の実装を使用し、時間の経過とともに状態を補間することです... – Spektre

答えて

0

あなたのメインループで繰り返しこの操作を行う必要があります。バー

  1. 計算位置

    あなたは、入力や出力のいずれかの情報を提供していませんでした。ミキサーデバイスは複数の信号を混合し、イコライザーは調整可能なバンドパスフィルターのアレイです。バーは何を表していますか?

    GUIバンドパスフィルタを設定する場合は、マウスなどで「移動」するなどのインターフェイスを追加する必要があります。そのためにはさらに詳しい情報が必要です...

    バーがスペクトログラムを表す場合、時間とともに移動する入力信号ウィンドウでDFTを実行する必要があります。

  2. 明確なバッファが

    これはバッファリングまたはダブルバッファリングバックと呼ばれています。私の記憶が正しければBGIはこれを行うことができます。アイデアは、ちらつきを避けるためにメモリにレンダリングし、画像が完成したらスクリーンにコピーすることです。

  3. あなたはまだ、説明のための必要性を実現していないと主張、この部分をバッファリングするためのバーをレンダリングします。

  4. 終了条件を検出するいくつかの時間のためにこれは

  5. 待機/スリープをちらつき避けるために、バック/ダブルバッファリングの最後のステップである

  6. をスクリーニングするためのバッファをレンダリング

    アクティブ番目の場合アンあなたがマウスGUIを作りたいなら、あなたは、マウスイベントハンドラを追加する必要があります...再び#1

に行くそうでない場合はループを停止します。私は ++ ボーランドのTurbo Cではなく、場合、私はあなたが定期的にポーリングを経由して、独自のマウスの状態をスキャンするINT 33hを使用することができます(理想からは程遠いですが、初心者のために動作します)またはフックアップ誤解午前中にそのためのいくつかのlibsがあったと思いますあなた自身のマウスハンドラ。

ここで読むためにいくつかの関連するもの: