view VibratoDemoUnit.h @ 0:a6a46af64546

first upload
author wenx <xue.wen@eecs.qmul.ac.uk>
date Wed, 10 Aug 2011 14:55:38 +0100
parents
children
line wrap: on
line source
/*
    Harmonic Visualiser

    An audio file viewer and editor.
    Centre for Digital Music, Queen Mary, University of London.
    This file copyright 2011 Wen Xue.

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version. 
*/
//---------------------------------------------------------------------------
#ifndef VibratoDemoUnitH
#define VibratoDemoUnitH
//---------------------------------------------------------------------------
/*
    VibratoDemoUnit implements the Vibrato analysis and synthesis demo GUI
      of HV.
*/

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include "AudioPac.h"
#include "WaveView.h"
#include "EventBoxUnit.h"
#include "SUThread.h"
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include "vibrato.h"
//---------------------------------------------------------------------------


class TSUThread;
const ThreadCaps=1024;

class TVibratoDemoForm : public TForm
{
__published:	// IDE-managed Components
  TPanel *Panel1;
  TPanel *Panel2;
  TSplitter *Splitter1;
  TSplitter *Splitter2;
  TPanel *Panel3;
  TPanel *Panel4;
  TPanel *Panel5;
  TSplitter *Splitter3;
  TPanel *Panel8;
  TPanel *Panel7;
  TImage *Image1;
  TPanel *Panel6;
  TImage *Image2;
  TSplitter *Splitter4;
  TPanel *Panel9;
  TSplitter *Splitter5;
  TImage *Image0;
  TSplitter *Splitter6;
  TPanel *Panel10;
  TPageControl *PageControl1;
  TTabSheet *ModOverSheet;
  TTabSheet *ModCycleSheet;
  TLabel *Label1;
  TEdit *RegEdit;
  TLabel *Label2;
  TEdit *RateEdit;
  TLabel *Label3;
  TEdit *CycleRateEdit;
  TLabel *Label4;
  TEdit *CycleDurationEdit;
  TPanel *Panel11;
  TImage *MImage1;
  TLabel *Label5;
  TEdit *CycleExtentEdit;
  TLabel *Label6;
  TEdit *CycleAvgPDEdit;
  TEdit *CyclePitchEdit;
  TPanel *Panel12;
  TImage *MImage2;
  TTabSheet *AmpOverSheet;
  TPanel *Panel13;
  TImage *AImage1;
  TTabSheet *AmpCycleSheet;
  TPanel *Panel14;
  TImage *AImage2;
  TCheckBox *PeakMarksCheck;
  TButton *RegButton;
  TPanel *Panel15;
  TImage *AImage3;
  TPanel *Panel16;
  TImage *AImage4;
  TLabel *Label7;
  TLabel *Label8;
  TLabel *Label9;
  TLabel *Label10;
  TLabel *Label11;
  TLabel *Label12;
  TLabel *Label13;
  TLabel *Label14;
  TEdit *DurationEdit;
  TSaveDialog *SaveDialog1;
	TListBox *ListBox1;
	TEdit *FEdit;
	TComboBox *FScaleCombo;
	TEdit *ThetaEdit;
  TButton *Button1;
  TCheckBox *ResidueCheck;
  TCheckBox *SFCheck;
  TCheckBox *MACheck;
  TLabel *Label15;
  void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
  void __fastcall Image2MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
  void __fastcall SFCheckClick(TObject *Sender);
  void __fastcall RegButtonClick(TObject *Sender);
  void __fastcall AImage3MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
  void __fastcall MImage1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
  void __fastcall Image2DblClick(TObject *Sender);
  void __fastcall AImage1MouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
  void __fastcall AImage1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
  void __fastcall CycleRateEditMouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y);
  void __fastcall PageControl1Change(TObject *Sender);
  void __fastcall Panel4Resize(TObject *Sender);
  void __fastcall Panel8Resize(TObject *Sender);
  void __fastcall Panel1Resize(TObject *Sender);
  void __fastcall AmpOverSheetResize(TObject *Sender);
  void __fastcall AmpCycleSheetResize(TObject *Sender);
	void __fastcall ListBox1Click(TObject *Sender);
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall Panel9Resize(TObject *Sender);
  void __fastcall Panel7Resize(TObject *Sender);
private:	// User declarations
public:		// User declarations
  __fastcall TVibratoDemoForm(TComponent* Owner);
  __fastcall ~TVibratoDemoForm();

  bool ForceUpdate;

	TSUThread* SUThread;
	int pThread;
	TSUThread* ThreadList[ThreadCaps];

  void __fastcall SUTerminate(TObject* Sender);
  DYNAMIC void __fastcall MouseWheelHandler(TMessage& Msg);
  void __fastcall Image1MouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall Image2MouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall AImage3MouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall AImage4MouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall MImage1MouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall RateEditMouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall DurationEditMouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);
  void __fastcall PitchEditMouseWheel(TObject* Sender, TShiftState Shift, int WheelDelta, const TPoint &MousePos, bool &Handled);

  int StartPos;
  TWaveAudio* WaveAudio1;
  TWaveView* WaveView1;
  TWaveAudio* WaveAudio2;
  TWaveView* WaveView2;

  TVo V;
  
  THS* HS;
  double f_c, f_ex;
  double* peaky;
  double* cyclefrs;
  double* cyclefs;
	int cyclefrcount;
  int CurrentModCycle;
  double CurrentModCycleStart;
  double CurrentModCycleEnd;
  int CurrentPartial;
  int CurrentK;
  int CurrentC;
  double FXX[64];
  double NAF[4096];
  int SX[128]; //size related to number of partials
  int SXcycle[128];
  int KX1[64]; //size related to number of frames per cycle
  int KX2[64];
  int CX1[128];  //size related to number of cycles
  int CX2[128];
  int CY1[128];
  int CY2[128];
  int SXc;
  int SXcyclec;
  int FirstStartDrag;
  int StartDrag;

  __int16* datain;

  void Copydata();
  void DrawModulator();
  void __fastcall ExternalInput();
  void FindNote();
  void Reset();
  void __fastcall SaveV();
  void __fastcall S_U(bool sf=false);
  void Synthesize();
  void UpdateDisplay(bool f0=true, bool f0s=true, bool f0d=true, bool sf=true);
  int __fastcall WaveView1CustomInfo(TObject*);
  void __fastcall WaveView1OpMode(TObject* Sender, TShiftState Shift, int& OpMode);
};
//---------------------------------------------------------------------------
extern PACKAGE TVibratoDemoForm *VibratoDemoForm;
//---------------------------------------------------------------------------
#endif