uActiveXRg[ MMVARI.ocxv
							 2004.12.25 JE3HHT X   
							 2005.03.01 JE3HHT X   

  {ActiveXRg[ MMVARI.ocxɂĉ܂B


ڎ
~~~~
	
	MMVARI.ocx̊Tv
	M`lƑM`l
	̑M̎dg
	TvOg
	MMVARIRg[̃vpeB
	MMVARIRg[̃\bh
	MMVARIRg[̃Cxg
	MMVARIRg[
	XMMVViewRg[ɂ
	XMMVViewRg[̃vpeB
	XMMVViewRg[̃\bh
	XMMVViewRg[̃Cxg
	XMMVLvlRg[ɂ
	XMMVLvlRg[̃vpeB
	XMMVLvlRg[̃\bh
	XMMVLvlRg[̃Cxg
	Ō

==========

==========
- 2004.12.25 (Ver1.00)	
- 2004.12.28 (Ver1.01)	XMMVViewRg[̃oȌC(X[EH[^tH[)
- 2004.12.29 (Ver1.02)	EXMMVARI.txt̒ǉ(TNX to JA7UDE)
			MMVARIRg[
				- bOverLevelvpeB̒ǉ
				- bPTTLinesvpeB̒ǉ
			XMMVView, XMMVLvlRg[
				- }EXNbNł̃tH[JX擾֎~
- 2005.01.08 (Ver1.03)	MMVARIRg[
				- wRxCentervpeB̒ǉ
				- bCustomFilter, dblCustomSampleFreqvpeB̒ǉ
				- wNumNotches, wNotchesvpeB̒ǉ
				- AddNotchFreq, FindNotchFreq, DeleteNotch\bh̒ǉ
				- CreateCustomFilter, DeleteCustomFilter,
				  CreateCustomFilterByKW, CreateCustomFilterByIDFT,
				  CalcCustomCharacteristic\bh̒ǉ
			XMMVViewRg[
				- wMouseChannel, wMouseNotchvpeB̒ǉ
- 2005.01.11 (Ver1.04)	MMVARIRg[
				- {̔pJiMłȂs̏C
- 2005.01.20 (Ver1.05)	XMMVLvlRg[
				- DrawCustom\bh̒ǉ
- 2005.03.01 (Ver1.06)	XMMVViewRg[
				- wWidthFreq̒200HzɕύXiȑO500Hz)

==================
MMVARI.ocx̊Tv
==================
  MMVARI.ocxVB6ŗp邱Ƃz肵OLEJX^Rg[łBMMVARI.ocxɂMBCS`̂߂MMVARIR[h̎舵\GMSK/FSK/FSK-W/BPSK̂S̃[hƁAȊÔR̃[h(bpsk/rtty/mfsk)̃TEhJ[hGWĂ܂B܂኱̂܂̃Rg[ǉĂ܂B

	MMVARI		TEhJ[hGW̖{̂łB
	XMMVView	XyNg/EH[^tH[/EF[utH[`Rg[ (܂)
	XMMVLvl		x[^Rg[(܂)
	XMMVBtn		gO{^Rg[(܂)

  {łXMMVBtnRg[ɂĂ͉܂Bp@ɂĂ͕t̃TvRei(Test)QƂĉB

@zzt@C
  ~~~~~~~~~~~~
	MMVARI.ocx	ActiveX̖{̂łBAvP[VōĔzzKvȂ̂͂̃t@CłB
	XMMVARI.txt	{
	EXMMVARI.txt	{̉p

  AvP[VMMVARI.ocxɊ܂܂邢ꂩ̃Rg[𗘗pꍇAMMVARI.ocx̔zzpbP[WɊ܂߂ĂBʏAvP[ṼJgtH_MMVARI.ocxRs[Ɨǂł傤BeXgReĩ\[XVB6ŊJꍇAMMVARI.ocx\[XtH_ɃRs[Ă܂B

  MMVARI.ocx́ANMMVARI.ocx݂tH_VariCode.tblƂÕt@C쐬܂B̃t@CɂVARICODẼe[ui[A2ڈȍ~̋Nɂ邽߂MMVARIRg[Ŏgp܂B̃t@C݂͑ȂΎIɍ쐬܂̂ŁAzzKv͂܂B

  MMVARI.ocx͈ȉ̃vbgtH[WindowsŎgpł܂B
	Windows95, 98, 98SE, ME
	WindowsNT, 2000, XP

================================
M`lƑM`l
================================
  MMVARIRg[ɂ͂X̎M`liCP, TuWjƂP̑M`lĂ܂BM`l̃`lԍ͂ÕCfbNXŕ\܂BM`lO̓C`lƌĂ΂ʂȃ`lŁAM`l̕ϒ[h`xȂǂ́AC`lƓݒeɂȂ܂B
@M`lɊ֌W鑽̃vpeB́A`lԍYɂzŒ`Ă܂izvpeBVB6̃tH[fUCiŌȂ̂ŁAIuWFNguEUŊmFƗǂm܂jB
		strMode(nIndex As Integer) As String		[h̖O
		dblSpeed(nIndex As Integer) As Double		`x

  bActivevpeBTRUEɂƁA`lO͖ŃANeBuɂȂAbRxEnabled(0)͕KTrueɂȂ܂B`lPȍ~Lɂɂ́AႦ
	bRxEnabled(1) = True
̂悤ɃvOĉB

 ANeBuɂM`lƁAɉCPUׂ͏dȂ܂B

====================
̑M̎dg
====================
  ̂Q̕@̂ꂩ܂͗ŕ𑗐Mł܂B

񓯊
~~~~~~~~
  MMVARIRg[ɑ݂z^Mobt@(2048)oRĕ𑗐M܂Bobt@̂߂Ɏ̃vpeBƃ\bhĂ܂Bڍׂ̓vpeBƃ\bh̉QƂĉB
	wBufferCount As Integer
	Function SendText(strText As String) As Integer
	Function SendCWID(strText As String) As Integer
	Function SendChar(wChar As Integer) As Integer
	Function GetSendText() As String


~~~~~~
  OnGetTxCharCxgŕ1Ԃ܂B̕@́AM荞ݏC[WŁA[U[AvP[V̑Mʂ̕1ÂođM̂ɓKĂ܂B

ŕ𑗐MȒPȗ͕t̃TvReiɋLڂĂ܂B

񓯊Ɠ͍݂ėp邱Ƃł܂BMMVARIRg[͑Mobt@𒲂ׂăobt@̎ɂ̂݁AOnGetTxCharCxg𔭐ăAvP[VɑM镶Ɖ܂B


====================
TvOg
====================
  MMVARIRg[͑̃TvOgT|[g܂BMp̃TvOg(Hz)dblSampleFreqvpeBŐݒ肵܂B܂Mp̃TvOg̕␳ldblTxOffsetvpeB(Hz)Őݒł܂BȉMMVARIRg[T|[gTvOg܂BftHg̃TvOg11025HzłB

	11025Hzn	TEhJ[hWĝPBׂẴJ[hœ삷B
	12000Hzn	ׂẴJ[hœ삷ł͂ȂATxOffset(ł̎gY)Ȃ\B
	6000Hzn	ׂẴJ[hœ삷ł͂ȂCPUׂ͌yB
	8000Hzn
	16000Hzn
	18000Hzn
	22050Hzn	TEhJ[hWĝPBɃbgȂB
	24000Hzn
	44100Hzn	TEhJ[hWĝPBɃbgȂB
	48000Hzn	fW^I/FpB

xp\Rœ삳ꍇ́A6000HznNbNIƗǂm܂B
8000HznFFT_̊֌WŁAXyNgуEH[^tH[̕\xȂ܂B
TvOg͂łύX邱Ƃł܂B

@MMVARIRg[𗘗pꍇATvOg̕덷SSTV̂悤ɃN`Jł͂܂BMƎM̃TvOg傫YĂꍇAۂ̉^p̖Ƃăg[gǂƃYƂ肪܂BMAFCK؂ɓĂꍇA܂傫Ȗɂ͂Ȃ܂񂪁AMɂ߂ĔȏꍇȂǂɃX[Yȉ^płȂȂ܂B̖ɂdblTxOffsetK؂ɐݒ肷̂ł]܂@łBȂ̃AvP[VTvOgŒ肷ꍇłAȂƂTxOffset̍ڂ݂͐ĂƂ߂܂B


================================
MMVARIRg[̃vpeB
================================

bActive As Boolean
~~~~~~~~~~~~~~~~~~
  MMVARIRg[̓Jn/I܂BTrueݒ肷ƃTEhJ[hI[vAC`l̃ftHg̕ϒ[hŎMJn܂BFalseݒ肷ƃTEhJ[hPTTpComȂǂ̃\[X͉܂B

 ̃vpeBFalseɐݒ肳ĂꍇAMMVARIRg[̃Cxg͔܂B

 MMVARIRg[j鎞ARg[ێ邷ׂẴ\[X͉܂BAvP[VI鎞ɁAIɂ̃vpeBFalseɐݒ肷Kv͂܂B

bAddStartCR As Boolean
~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƑMJnCR/LFt܂B

bAddStopCR As Boolean
~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƑMIiMɖ߂ƂjCR/LFt܂B

bATC As Boolean
~~~~~~~~~~~~~~~
  Trueݒ肷ATC(Auto timing control)@\Lɂ܂Bϒ[hrtty̏ꍇA̐ݒɊւ炸OFFłBmfsk̏ꍇ͂̐ݒɊւ炸ONłB

 bATC͏TrueɂĂƂ߂܂B

bLoopExternal As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƃTEh[vobNO[vobNɂ܂BO[vobN͑MM̃^C~OsꍇA܂͉qʐM^pɎgp܂B

bNET As Boolean
~~~~~~~~~~~~~~~
  MLAgMLAgɒǏ]܂B

bPlayBack As Boolean
~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƃTEhv[obN@\LɂȂ܂Bv[obNsɂPlayBack\bhĂяo܂B

 TEhv[obN@\LɂƁAŐV60bPCMTEhf[^Rg[ɏɕۑ܂BTvOg11025Hz̏ꍇA1.3MoCg̖̃ړIŏ܂B

bReqRX As Boolean
~~~~~~~~~~~~~~~~~
  Trueݒ肷ƃGR[_[AChtF[YɓɎIɎMɖ߂܂B

bRxEnabled(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  Trueݒ肷nIndexŎw肷M`lANeBuɂ܂BbRxEnabled(0)bActivevpeBƓłBꂩ̃`lTrueɐݒ肷ƁAbActivevpeBTrueɂȂ܂B

bSQ(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̃XP`Ԃ\܂B

bSync(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̍ĐNbN̓Ԃ\܂B

bTX As Boolean
~~~~~~~~~~~~~~
  M/M؂ւ܂BMbTXFalseɂƂׂĂ̏LZđMf܂BURg[(ш悪LȂ悤ɂ鏈)𔺂ȑM̏I҂ꍇbReqRXvpeBTrueɐݒ肵܂B

bHPF As Boolean
~~~~~~~~~~~~~~~
  Trueɐݒ肷ƎMɃnCpXtB^܂BقƂǂ̃TEhJ[hł͕svłA͉HɃn(AC)傫ĂJ[hŕKvȏꍇ܂B

bNotch As Boolean
~~~~~~~~~~~~~~~~~
  Trueɐݒ肷ƃmb`tB^ONɂ܂Bmb`tB^̎gwNotchFreqŐݒ肵܂B

 ̃vpeBVer1.02܂łƂ̌݊̂߂ɎcĂ܂BVer1.03ȍ~ł̓mb`tB^ɕ̑j~gݒł܂BVAvP[VwNotchesvpeBAAddNotchFreq, FindNotchFreq, DeleteNotch\bhg悤ɂĉB

bMetricSqMFSK As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷mfskgbNxXP`oɎg܂BFalseݒ肷ƐMS/NxXP`oɎg܂Bϒ[hmfskȊȌꍇ͉e܂B

bTreatCenterMFSK As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷mfsk̃LAg𒆐SgŎ舵܂BFalseݒ肷ƃx[Xg[LAgƂĎ舵܂B

bUOS(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`lRTTY-UOSݒ肵܂B̃vpeBRTTY[hȊOł͊֌W܂B

bPTTLock As Boolean
~~~~~~~~~~~~~~~~~~~
  Trueɐݒ肷strPTTPortŐݒ肵PTT|[gLgp܂BFalseɐݒ肷ƑM|[gI[v܂BstrPTTPort"NONE"ɐݒ肵Ăꍇ͂̃vpeB͈Ӗ܂B

bCodeMM(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`lAMBCS`pMMVARIR[h(VariJA, VariHL, VariBV, VariBŶꂩ)œ삷邩ǂ\܂B̃vpeBwCharsetvpeBƎMϒ[hɂČ肳܂B

bCodeBAUDOT(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`lABAUDOTR[h(RTTY)œ삷邩ǂ\܂B

bPTTLines(nLine As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  PTT|[gŎgpMCݒ肵܂BstrPTTPort"NONE"ݒ肳ĂꍇÃvpeB͈Ӗ܂BMC͈ȉ̂悤ɒ`܂B
	0 = pttlineRTS	RTSMC
	1 = pttlineDTR	DTRMC
	2 = pttlineTXD	TXDMC

	
	bPTTLines(pttlineRTS) = True
	bPTTLines(pttlineDTR) = False

bOverLevel(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̓͐MI[o[t[Ԃ\܂B

bCustomFilter As Boolean (RaadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MpJX^tB^쐬Ă邩ǂ\܂B

dblCustomSampleFreq As Double (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MpJX^tB^̓TvOg(Hz)\܂BCreateCustomFilter\bhQƂĉB

dblFFTSampleFreq As Double (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  FFT̃TvOg(Hz)\܂B

dblSampleFreq As Double
~~~~~~~~~~~~~~~~~~~~~~~
  MTvOg(Hz)ݒ肵܂B

dblTxOffset As Double
~~~~~~~~~~~~~~~~~~~~~
  MTvOg(Hz)AMTvOg(Hz)̃ItZbgl(Hz)Őݒ肵܂B

dblSpeed(nIndex As Integer) As Double
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̓`xݒ肵܂B

dblFreqError(nIndex As Integer) As Double (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̎Mg덷(-0.5 ` 0.5)Ԃ܂BAFCON̏ꍇA̒l͏ɂOɎ͂łB

dblBandWidth(nIndex As Integer) As Double (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̑ш敝(Hz)Ԃ܂B̑ш敝͎ۂ̓`ш敝Ƃ͈قȂ_ɗӂĉBႦ170HzVtgrtty̏ꍇ170HzԂ܂AۂɕKvȓ`ш敝͂LȂ܂B

dblTxShift As Double
~~~~~~~~~~~~~~~~~~~~
  RTTY/FSK-W[h̑MVtg(Hz)ݒ肵܂BMƑMő傫قȂVtgݒ肵ꍇAM̃̕[vobNȂȂ܂B

dblRxShift(nIndex As Integer) As Double
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`lRTTY/FSK-W[h̎MVtg(Hz)ݒ肵܂B

dwATC As Long
~~~~~~~~~~~~~
  fR[_[QƂMĐNbN␳l(ppm)ݒ肵܂BbATCTrueɂĂꍇÃvpeB͎Iɐݒ肳܂B

dwHandle As Long (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[̃IuWFNgnh\܂B̃nhXMMVLvlAXMMVViewRg[ŗp܂B

  MMVARIIuWFNgU\zƁAdwHandle̒lω邱Ƃ͂܂BĎ̂悤ɃX^eBbNȕϐɕۑlgƂł܂B

	Dim g_dwHandle As Long

	Private Sub Form_Load()
	    g_dwHandle = MMVARI.dwHandle
		|
	End Sub

	Private Sub MMVARI_OnDrawFFT(ByVal wCount As Integer, pArray As Long)
	    Call XMMVView.Draw(g_dwHandle)
	    Call XMMVLvl.Draw(g_dwHandle, 0)
	End Sub

dwSampleBase As Long (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  쒆̃TvOg̃x[Xl(Hz)\܂B̒l̓TvOǧn(1102512000̂悤Ȓl)\܂B

nBPF As Integer
~~~~~~~~~~~~~~~
  ̎MpBPF̑шݒ肵܂Bۂ̑ш敝͕ϒ[h`xŎ܂B̐ݒׂ͂Ă̎M`lɓKp܂B
	0 - L
	1 - ƍL
	2 - 
	3 - ߂񂱋

statIsPlaying As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  TEhv[obNsǂ\܂B

statLostRX As Integer
~~~~~~~~~~~~~~~~~~~~~
  MTEhǂ\܂BUoƖ3bԂ͂OȊO̒lɂȂ܂B

statLostTX As Integer
~~~~~~~~~~~~~~~~~~~~~
  MTEhǂ\܂BUoƖ3bԂ͂OȊO̒lɂȂ܂B

statSoundOpen As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  TEhJ[hI[vXe[^X\܂B
	1 - ͂ŃI[v
	2 - o͂ŃI[v
	3 - /o̗͂ŃI[v

statComOpen As Integer
~~~~~~~~~~~~~~~~~~~~~~
  PTTpCOM|[g̃I[vԂ\܂B
	0 - gp
	1 - I[v
	-1 - I[vs

strVersion As String (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[̃o[Wԍ(1.00̂悤ȕ)Ԃ܂B

strPTTPort As String
~~~~~~~~~~~~~~~~~~~~
  PTT|[g̖Oݒ肵܂BMMVARIRg[ɑgݍ݂PTT@\𗘗pȂꍇ́A"NONE"ݒ肵ĉBPTT|[gbActivevpeBTrueɐݒ肷܂ŃI[v܂B

	strPTTPort = "COM1"

  AvP[VPTTsꍇ́AOnPTTCxgg܂B

strSoundID As String
~~~~~~~~~~~~~~~~~~~~
  TEhJ[hIDԍ܂̓JX^TEh̖Oݒ肵܂B

  TEhJ[hIDԍ
	-1	}bp[i=ftHgj
	0	Pڂ̃J[h
	1	Qڂ̃J[h
	:		:
łBMƎMňقȂIDw肷Kvꍇ
	0,1
̂悤ɎMAM̏IDԍJ}ŋ؂܂B

@JX^TEhw肷ꍇ̖͂OiႦWLClientjݒ肵܂B

	strSoundID = "-1"	' TEh}bp[w肵܂iftHg)
	strSoundID = "0,1"
	strSoundID = "WLClient"

strModeList(nIndex As Integer) As String (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[ɎĂϒ̖O𓾂܂BnIndex̓[hԍ\A0wModeMax-1͈̔͂łȂ΂Ȃ܂B

	CBMode.Clear
	For i = 0 To MMVARI.wModeMax - 1 Step 1
		CBMode.AddItem (MMVARI.strModeList(i))
	Next i

  ݂̃o[WT|[gϒ[h̖OƖړI͈ȉ̒ʂłB
	GMSK		MBCS`p(HFїp)
	FSK		MBCS`p(V/UHFїp)
	FSK-W		MBCS`p(V/UHFїpAqʐMp)
	BPSK		MBCS`p(HFїp)
	bpsk		Wbpsk
	rtty-L		BAUDOT LSBp
	rtty-U		BAUDOT USBp
	mfsk-L		MFSK LSBp
	mfsk-U		MFSK USBp

MBCS`ȂꍇABPSKbpsk͓ɂȂ܂B

MMVARIRg[T|[gϒ[h͏ǉ\܂BȂ쐬AvP[VłwModeMaxstrModeListQƂāAϒ[ḧꗗ(R{{bNX)쐬Ɨǂm܂B


strMode(nIndex As Integer) As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̕ϒ[h𖼑OŐݒ肵܂BnIndexȌꍇAM`l̕ϒ[hɕύX܂B
	strMode(0) = "bpsk"

 ϒ[hύXƁA`xIɒꍇ܂BႦbpskrtty-Lɕϒ[hύXꍇA`x45.45bpsɎIɒ܂B̏ꍇOnSpeedCxg܂B


wChannels As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[\ȎM`lԂ܂B݂̃o[Wł͏ɂXłB

wModeMax As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[ɎĂϒ[h̐Ԃ܂B݂̃o[Wł͏ɂXłBX̕ϒ[h̖O𓾂ɂstrModeListvpeBQƂĉB

wCharset(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ

  nIndexŎw肷M`l̎MtHg̃LN^Zbgݒ肵܂BMMVARIRg[́ȀɌݑIĂϒ[hɏ]MBCSVARICODE`肵܂B܂bpskmfsk[hœ`QoCgP(16Bits)ɕϊ܂BMBCST|[gAvP[Vł́AMʂɐݒ肳Ă镶tHg([U[ItHg)ɏ]ẴvpeBݒ肷Ɨǂł傤B
	 	MMVARI.wCharset(0) = RxWindow.Font.Charset

@MBCSVARICODE`m肽ꍇ́AGetVariType\bhĂяo܂B

 ϒ[hrtty̏ꍇ͂̃vpeB̏ԂɊ֌WȂBAUDOTR[h̓`ł܂B

wFFTType As Integer
~~~~~~~~~~~~~~~~~~~
  FFT̐J[uݒ肵܂B
	0 - dB
	1 - U

wFFTWidth As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  FFŤvZ_\܂BׂẴTvOgł̒l2048𒴂邱Ƃ͂܂B

wWaveMax As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  EF[utH[f[^̎Wő_\܂B̒l͕ϒ[hA`xATvOgȂǂŕω܂B

wModGain As Integer
~~~~~~~~~~~~~~~~~~~
  ϒM̃fW^o̓x0`32767͈̔͂Őݒ肵܂BftHg16384łB

wRxCarrier(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̎MLAg(Hz)ݒ肵܂B

wRxCenter(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̎MLA̒Sg(Hz)\܂BbTreatCenterMFSKFalseŕϒ[hmfsk̏ꍇAwRxCarriervpeBƈقȂgɂȂ܂B

wSN(nIndex As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̎MMS/N(dB100{l)\܂B

wSoundCH As Integer
~~~~~~~~~~~~~~~~~~~
  TEh̓̓`lȉ̒lŐݒ肵܂BftHg0=MonołB
	0 - Mono
	1 - Left
	2 - Right

wSoundRxFIFO As Integer
~~~~~~~~~~~~~~~~~~~~~~~
  TEh̓FIFOobt@̌ݒ肵܂Bݒł͈͂4`32łB

wSoundTxFIFO As Integer
~~~~~~~~~~~~~~~~~~~~~~~
  TEh̏oFIFOobt@̌ݒ肵܂Bݒł͈͂4`32łB

wSQLevel(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̃XP`x(dB100{l)ݒ肵܂BftHg300(=3dB)łB

wTxCarrier As Integer
~~~~~~~~~~~~~~~~~~~~~
  M`l̃LAg(Hz)ݒ肵܂B

wMode(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̕ϒ[h[hԍŐݒ肵܂BnIndexȌꍇAM`l̕ϒ[hɕύX܂B̃vpeB̓[hԍŎw肷ȊOstrModeƓłB

	wMode(0) = 4	' bpsk

wAFCLevel As Integer
~~~~~~~~~~~~~~~~~~~~
  LAFČoS/Nx(dB)ݒ肵܂BwAFCWidth50Hzȉ̏ꍇALAFC͓삹̐ݒ͈Ӗ܂B̐ݒׂ͂Ă̎M`lŗLłB

wAFCWidth As Integer
~~~~~~~~~~~~~~~~~~~~
  AFC̋zݑш敝(}Hz)ݒ肵܂B50HzzꍇLAFC삵܂B̐ݒׂ͂Ă̎M`lŗLłB

wBufferMax As Integer
~~~~~~~~~~~~~~~~~~~~~
  z^Mobt@ɕێł関o̍ő̐Ԃ܂B݂̃o[Wł2048łB

wBufferCount As Integer
~~~~~~~~~~~~~~~~~~~~~~~
  z^Mobt@̖o̕\܂B̃vpeBɕݒ肷ꍇAo𑝂₷ݒ͂ł܂BMBCS1ƂĈ܂B
	
	' obt@̃NA
	MMVARI.wBufferCount = 0

	' 1̍폜
	MMVARI.wBufferCount = MMVARI.wBufferCount - 1

wCollectType As Integer
~~~~~~~~~~~~~~~~~~~~~~~
  EF[utH[f[^Wݒ肵܂B̃vpeB1܂2ݒ肷ƎWI^C~OOnDrawWaveCxg܂B
	0 = collectNONE	WsȂ
	1 = collectSYNC	fR[hMW
	2 = collectWAVE	EF[uMW


wNotchFreq As Integer
~~~~~~~~~~~~~~~~~~~~~
  mb`tB^̃g[g(Hz)ݒ肵܂B

 ̃vpeBVer1.02܂łƂ̌݊̂߂ɎcĂ܂BVer1.03ȍ~ł̓mb`tB^ɕ̑j~gݒł܂BVAvP[VwNotchesvpeBAAddNotchFreq, FindNotchFreq, DeleteNotch\bhg悤ɂĉB

wCWSpeed As Integer
~~~~~~~~~~~~~~~~~~~
  CWID̑xݒ肵܂Bݒ肷l10`60͈̔͂łB

wDiddleRTTY As Integer
~~~~~~~~~~~~~~~~~~~~~~
  RTTY[h̃AChɑMDiddleR[hݒ肵܂B
	0 - LTRR[h
	1 - BRKR[h

wTxState As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ݂̑M/MԂ\܂B
	0=txstateRX	M
	1=txstateTX	M
	2=txstateREQRX	ACh҂
	3=txstateWAIT	Mɐ؂ւiTEhobt@PCMf[^tbV)
	4=txstateTONE	VOg[M

wMetricMFSK(nIndex As Integer, nPhase As Integer) As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : M`lԍ
  nPhase : 0-MgbNx, 1-tF[ỸgbNx, 2-tF[ỸgbNx

  nIndexŎw肷M`lŎMĂMFSKM̃gbNx(0`2047)\܂BMFSK16(15.625 baud)ł͊tF[Y݂͑܂B

wLang As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[̃ftHǧIDԂ܂B

wDefaultCharset As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[̃ftHg̃LN^ZbgԂ܂BMBCSȊOANSI_CHARSETԂ܂B

wNumNotches As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ݍ쐬Ămb`tB^̑j~̐Ԃ܂B

wNotches(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : j~̃CfbNX

  nIndexŎw肷j~̎g(Hz)mb`tB^ɐݒ肵܂Bݍ쐬Ăj~̐wNumNotchesvpeBŎQƂł܂BnIndexwNumNotchesȏ̏ꍇAVj~gǉ܂B̃vpeB̒lɂOݒ肷ƁÃCfbNX̑j~͍폜܂B

  ȉ̗̓mb`tB^1000,1500,2000HẑR̑j~gݒ肵܂B
	MMVARI.wNotches(0) = 1000
	MMVARI.wNotches(1) = 1500
	MMVARI.wNotches(2) = 2000

  ȉ̗̓mb`tB^̍ŏ̑j~g폜܂B
	MMVARI.wNotches(0) = 0

 j~gݒ肳ĂȂCfbNX̒lǂݎƂOԂ܂B
 j~g폜ƃCfbNXƎg̊֌W͕ω܂BgCfbNX𓾂ɂFindNotchFreq\bhĂяo܂B

wNotchTaps As Integer
~~~~~~~~~~~~~~~~~~~~~
  mb`tB^̃tB^^bv11025HzɂĐݒ肵܂BftHg128łBۂ̃tB^̃^bv̓TvOgωĂ悤ɓŎIɕ␳܂BႦ΃TvOg6000HzwNotchTaps=128̏ꍇAۂ̃^bv70ɂȂ܂B

 t@C^bv傫Ƃ}sȓ𓾂邱Ƃł܂CPUׂ͑܂B

==============================
MMVARIRg[̃\bh
==============================

Sub SetTX(wCmd As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~
  M܂͎Mɐ؂ւ܂BwCmd͈ȉ̒萔`Ă܂B
	0=cmdtxRX	Mɐ؂ւ(bTX = FalseƓ)
	1=cmdtxTX	Mɐ؂ւ(bTX = TrueƓ)
	2=cmdtxREQRX	AChMɐ؂ւ(bReqRX = TrueƓ)
	3=cmdtxCW	CW[hőMɐ؂ւ(MJnɃACh̕ϒM𑗐M܂)
	4=cmdtxTONE	VOg[o

  ႦCWID̂ݑMĂɎMɖ߂ɂ́Â悤ɋLq܂B
	MMVARI.wBufferCount = 0	' Clear buffer
	Call MMVARI.SendCWID("de JE3HHT")
	Call MMVARI.SetTX(cmdtxREQRX)
	Call MMVARI.SetTX(cmdtxCW)

Function GetSendText() As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Mobt@̖o̕obt@j󂹂ɂׂēǂݏo܂B

	[]
	Dim strText As String
	strText = MMVARI.GetSendText()
	MMVARI.wBufferCount = 0
	MMVARI.SendText ("<Insert>" & strText)

Function SendText(strText As String) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Mobt@ɕǉAMobt@̖o̕Ԃ܂B̃\bhOnGetTxCharCxgŌĂяoĂ\܂BڍׂOnGetTxCharCxg̉QƂĉB

Function SendChar(wChar As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Mobt@ɂPǉAMobt@̖o̕Ԃ܂B̃\bhOnGetTxCharCxgŌĂяoĂ\܂BڍׂOnGetTxCharCxg̉QƂĉBwCharANSI܂MBCSR[hłȂ΂Ȃ܂B
  
Function SendCWID(strText As String) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Mobt@CWǉAMobt@̖o̕Ԃ܂B̃\bhOnGetTxCharCxgŌĂяoĂ\܂BڍׂOnGetTxCharCxg̉QƂĉB

  ȉ̋L͓ʂCWƂđM܂B
	@	AS
	:	SK (VA)
	;	AR
	=	BT
	]	KN


Function GetVariType(nIndex As Integer) As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`lVARICODE`𕶎ŕԂ܂B

Function PlayBack(wSec As Integer) As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wSec(b)Ŏw肷鎞ԑÕTEhv[obNs܂BwłwSec͂O`UOłBOw肷ƃv[obNI܂BbPlayBackvpeBFalsȅꍇÃt@NV͎s܂B

Sub SetClockAdjust(wTone As Integer, dblSampleFreq As Double)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wTone : 1bM̎Mg[g(Hz)
  dblSampleFreq : 1bMXLTvOg(Hz)

  MNbNr@\̊rp[^ݒ肵܂B

Sub AdjustClock(wWidth As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wWidth : XLʂ̉(0=rI)

  MNbNr@\Jn܂B̋@\𗘗pꍇ͉wWidthsNZ̃OtBbNʂĉBڍׂOnClockAdjustCxg̉QƂĉBr@\IɂwWidthOɂẴ\bhĂяo܂B

Sub AttachLongArray(pDist As Long, pSrc As Long, wSize As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  pDist : Rs[̔z̐擪
  pSrc : Rs[̔z̐擪
  wSize : Rs[

  z̓eRs[܂B̃\bhVB6̈ȉ̂悤ȃR[hƓ܂B

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Call CopyMemory(pDist, pSrc, wSize * 4)	'Windows API CopyMemory()

Function CreateVaricodeList(strName As String) As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  strName̖OVARICODẼXgt@C(eLXgt@C)쐬܂B

Function ReadFFT(pArray As Long, wCount As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  pArray : FFTf[^i[z
  wCount : i[f[^̌

  FFTf[^񓯊ɓǂݏo܂Bǂݏof[^OnDrawFFTCxgœnf[^ƓłBOnDrawFFTCxgł̃\bhĂяoĂ\܂Bt@NVɏIƎۂɓǂݏof[^̌Ԃ܂B

	Dim dwAmp(1023) As Long
	Call MMVARI.ReadFFT(dwAmp(0), 1024)


Sub AddNotchFreq(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : ǉj~g(Hz)

  mb`tB^̑j~ǉ܂Bɓj~g݂ꍇ͉܂B

	Call MMVARI.AddNotchFreq(1000)

Function FindNotchFreq(wFreq As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : j~g(Hz)

  ݍ쐬Ămb`tB^̑j~g܂Bvg݂ꍇÃCfbNX(0`)Ԃ܂BȂꍇ-1Ԃ܂B

	Dim nIndex As Integer
	nIndex = MMVARI.FindNotchFreq(1000)
	If nIndex >= 0 Then
		Call MMVARI.DeleteNotch(nIndex)
	End If

Sub DeleteNotch(nIndex As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : j~̃CfbNX

  w肵CfbNX̑j~gmb`tB^폜܂BnIndex=-1̏ꍇAׂĂ̑j~g폜mb`tB^͏ł܂B

Function CreateCustomFilter(nTaps As Integer, pCoeff As Double) As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nTaps : tB^̎
  pCoeff : Wf[^̔z(nTaps+1)

  MpJX^tB^쐬܂B̃\bhgƃAvP[V`̔Cӂ̓̃tB^쐬ł܂B쐬tB^(nTaps+1)FIRtB^ŁAMMVARIRg[ɑgݍ݂̃mb`tB^ɑւ܂(gݍ݂̃mb`tB^͎Iɏł܂)B̃tB^̓TvOgdblCustomSampleFreqvpeBŎQƂł܂B

  Wf[^̌nTaps{1łBႦnTaps=64̃tB^쐬ꍇ́A65̌Wf[^KvɂȂ܂BnTaps傫ƃtB^̐U͋}sɂȂ܂CPUp[܂B

	Dim dblCoeff[64] As Double
	' To do : dblCoeff(0 to 64)ɌWi[
	Call MMVARI.CreateCustomFilter(64, dblCoeff(0))

  FIRtB^̌WZo@͂낢Ƃ܂BDSP֘AЂQƂĉBȈՖ@ƂCreateCustomFilterByKW, CreateCustomFilterByIDFT\bhgƂł܂B

 ̃tB^̓TEhtgGh(TuTvOꂽ)ɓ܂BFFTsÕTEhM܂B
 gݍ݂̃mb`tB^ANeBuɂƁÃtB^͎Iɏł܂B

Sub DeleteCustomFilter()
~~~~~~~~~~~~~~~~~~~~~~~~
  MpJX^tB^폜܂B

Function CreateCustomFilterByKW(nType As Integer, nTaps As Integer, dblFC1 As Double, dblFC2 As Double, wDB As Integer) As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nType : tB^̎ (0-LPF, 1-HPF, 2-BPF, 3-BEF)
  nTaps : tB^̎(K)
  dblFC1 : Pڂ̃JbgItg(Hz)
  dblFC2 : Qڂ̃JbgItg(Hz)
  wDB : ҂j~̌(dB)

  MpJX^tB^nTypeŎw肷ނō쐬܂BMMVARIRg[͎w肳ꂽނƃJbgItgŃtB^̃CpXvZAwDBŕ␳WCreateCustomFilter\bhĂяo܂BwDBɂOw肷ƃtB^W̓CpX̂܂܂ɂȂ܂BLPF, HPFłdblFC2͖܂BnTaps̏ꍇ̃t@NV͎s܂B

	Dim dblF1 As Double
	Dim dblF2 As Double
	dblF1 = MMVARI.wRxCenter(0) - MMVARI.dblBandWidth(0)
	dblF2 = MMVARI.wRxCenter(0) + MMVARI.dblBandWidth(0)
	Call MMVARI.CreateCustomFilterByKW(2, 128, dblF1, dblF2, 60)

Function CreateCustomFilterByIDFT(nTaps As Integer, pFreqSamp As Double, wDB As Integer) As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nTaps : tB^̎(K)
  pFreqSamp : gUf[^̔z(nTaps/2)
  wDB : ҂j~̌(dB)

  MpJX^tB^gUf[^쐬܂BMMVARIRg[͎w肳ꂽgUf[^IDFT(UIt[Gtϊ)ɂtB^WZoAwDBŕ␳WCreateCustomFilter\bhĂяo܂BwDBɂOw肷ƃtB^W̓CpX̂܂܂ɂȂ܂BnTaps̏ꍇ̃t@NV͎s܂B
  gUf[^ɂ͌X̐Ul(0`1.0)dblCustomSampleFreq/nTaps̎g\Őݒ肵ĂȂ΂Ȃ܂BMMVARIRg[QƂ̂nTaps/2܂ł͈̔͂łBz̈ʒuXAg[gFreqƂꍇ̊֌WȉɎ܂B

	X = Freq * nTaps / dblCustomSampleFreq
	Freq = X * dblCustomSampleFreq / nTaps

	[]
	Const NumTAPS = 132
	Dim dblFreqSamp(NumTAPS / 2) As Double
	Dim i As Integer
	For i = 0 To (NumTAPS / 2) Step 1
		dblFreqSamp(i) = 0#
	Next i
	dblFreqSamp(1000# * NumTAPS / MMVARI.dblCustomSampleFreq) = 1#
	Call MMVARI.CreateCustomFilterByIDFT(NumTAPS, dblFreqSamp(0), 60)


Function CalcCustomCharacteristic(pAmp As Double, pPhase As Double, wWidth As Integer, wMaxFreq As Integer) As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  pAmp : Ui[z
  pPhase : ʑi[z
  wWidth : z̐
  wMaxFreq : vZőg(Hz)

  MpJX^tB^̎gUʑvZ܂BMpJX^tB^쐬ĂȂꍇ̃t@NV͎s܂B0`wMaxFreq(Hz)͈̔͂̎gɂwMaxFreq/wWidth̕\ŐUAʑi[܂Bz̈ʒuXAgFreqƂꍇAȉ̊֌W藧܂B

	Freq = X * wMaxFreq / wWidth
	X = Freq * wWidth / wMaxFreq

  X̔zɊi[Ul͕ʂɐ݌vꂽtB^(QC=1.0)0`1.0͈̔͂łBʑl̓WA-΁`΂͈̔͂łB

	Dim dblAmp(800-1) As Double
	Dim dblPhase(800-1) As Double
	Call MMVARI.CalcCustomCharacteristic(dblAmp(0), dblPhase(0), 800, 3000)
	' To do : ŔzdblAmp, dblPhase̓eOtBbNʂɕ`悵܂


==============================
MMVARIRg[̃Cxg
==============================

OnGetTxChar(wChar As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wChar : o镶R[h(ANSI or MBCS)

  AChGR[h钼Oɔ܂BwCharɕR[h(ANSI܂MBCS)Ƃ̕M܂BwCharɂOƃAChM܂B

	Private Sub MMVARI_OnGetTxChar(wChar As Integer)
		wChar = &H41	' A𑗐M
	End Sub

  ̃Cxg̃nhSendText\bhĂяoĂ\܂B̏ꍇwCharɕR[hݒ肵Ă͂܂B

	Private Sub MMVARI_OnGetTxChar(wChar As Integer)
		Call MMVARI.SendText ("܂")
	End Sub

 ̃Cxg̎Ⴊt̃TvReiɋLqĂ܂B

 TEhɂ̓obt@݂̂ŁAMJn̓TEhobt@eʕPCMTEhf[^쐬܂ŁAOnGetTxCharCxgAĔ܂B

 CW𑗐MꍇwCharASCIIR[h{256̒lݒ肵ĉBႦΕ'A'321ɂȂ܂B܂SendCWID\bhĂяoĂ\܂B

OnRxChar(ByVal nIndex As Integer, ByVal strChar As String, ByVal wChar As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : `lԍ
  strChar : M(BSTR)
  wChar : M(ANSI or MBCS)

  nIndexŎw肳M`lŕMƂɔ܂B͏Ɋꂽ1łB`ꂪMBCS̏ꍇł̊ʑlKv͂܂BstrCharwChar͓ʂ̌^ŕ\Ă邾ł̂ŁAQƂĂ\܂B

OnRxCarrier(nIndex As Integer, wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : `lԍ
  wFreq : Mg

  nIndexŎw肳M`l̎Mgωꍇɔ܂B̃Cxg͎M`lANeBuɂȂɂ܂B

OnTxCarrier(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : Mg

  Mgωꍇɔ܂B̃CxgMMVARIRg[ANeBuɂȂɂ܂B

OnDrawFFT(wCount As Integer, pArray As Long)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wCount : LFFTf[^̓_
  pArray : FFTf[^̔z

  XyNg`XṼ^C~OŔ܂BLFFTf[^̓_FFT_(wFFTWidth)̔ȉłBAvP[V͂̃^C~OŎg̃XyNg܂̓EH[^tH[̕`s܂B
  FFTf[^̈ʒuXƂꍇ̃g[g(Freq)Ƃ̊֌WȉɎ܂BMMVARIRg[FFT̓TvOgɂăTuTvOꍇ܂B܂MFFTTvOgdblTxOffset̉e󂯂܂̂ŁAdblFFTSampleFreqwFFTWidthQƂĕ`悷邱Ƃ߂܂B

	Freq = X * dblFFTSampleFreq / wFFTWidth
	X = Freq * wFFTWidth / dblFFTSampleFreq

  žX̃x0`10900łBFFTdB\Lɐݒ肵Ăꍇ10900100dBɂȂ܂B

Private Sub MMVARI_OnDrawFFT(ByVal wCount As Integer, pArray As Long)
	If wCount Then
		Dim fft(2047) As Long
		Call MMVARI.AttachLongArray(fft(0), pArray, wCount)
		' To do : ŔzfftQƂăXyNg/EH[^[tH[`悵ĉ.
	End If
End Sub

 ̃Cxg͓vI(wFFTWidth / dblFFTSampleFreq)b̊ԊuŔ܂BႦdblSampleFreq11025Hz̏ꍇA186msɔ܂BTEhv[obN͔Ԋu͒ZȂ܂B

 TEhJ[h̃I[vĎśA1bԊuł̃Cxg܂(wCount=0ɃZbgĂ܂)B

 MS/Nx̃Cxg̃^C~Oŕ`ł܂B


  XMMVViewRg[XMMVLvlRg[𗘗pꍇMMVARIRg[̃IuWFNgnhnOKłB

Private Sub MMVARI_OnDrawFFT(ByVal wCount As Integer, pArray As Long)
	Call XMMVView.Draw( MMVARI.dwHnalde )
	Call XMMVLvl.Draw( MMVARI.dwHandle, 0 )
End Sub


OnDrawWave(wCount As Integer, pArray1 As Long, pArray2 As Long)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wCount : Lȃf[^̌
  pArray1 : ĐNbNM܂̓fR[hMf[^̔z
  pArray2 : fR[hM܂̓EF[uM(PCMf[^)̔z

  EF[utH[`XṼ^C~OŔ܂BLȃf[^̌͕ϒ[h`xňقȂ܂AwWaveMaxvpeB̒l𒴂邱Ƃ͂܂BAvP[V͂̃^C~OŎg̊֘AXR[v̕`s܂B
  pArray1pArray2̌X̃f[^-16384`16384͈̔͂łBĐNbNMƃfR[hM͏-16384`16384͈̔͂U܂AEG[uM̃x͎MMx̉e󂯂܂iȒPAGĈ݂͗ǂACfAłjB

	wCollectType = collectSYNC		pArray1 = ĐNbNM, pArray2 = fR[hM
	wCollectType = collectWAVE		pArray1 = fR[hM, pArray2 = EF[uM

  XMMVViewRg[𗘗pꍇMMVARIRg[̃IuWFNgnhnOKłB

Private Sub MMVARI_OnDrawWave(wCount As Integer, pArray1 As Long, pArray2 As Long)
	Call XMMVView.DrawWave( MMVARI.dwHnalde )
End Sub

OnPTT(wTX As Integer)
~~~~~~~~~~~~~~~~~~~~~
  wTX : 0 - PTT OFF, 1 - PTT ON

  PTT𐧌䂷^C~OŔ܂BMMVARIRg[PTT@\𗘗pȂꍇÃ^C~OPTTM𐶐ĉB

OnNET(bNET As Integer)
~~~~~~~~~~~~~~~~~~~~~~
  bNET : NET̏

  NET̏ԂύXꂽɔ܂B

OnTxState(wState As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  M/MԂωɔ܂BwState͈ȉ̂悤ɒ`܂B
	0=txstateRX	Mɐ؂ւ
	1=txstateTX	Mɐ؂ւ
	2=txstateREQRX	ACh҂ɐ؂ւ
	3=txstateWAIT	Mɐ؂ւiTEhobt@PCMf[^tbV)
	4=txstateTONE	VOg[Mɐ؂ւ

OnMode(nIndex As Integer, mIndex As Integer, strMode As String)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : `lԍ
  mIndex : [hԍ(0`)
  strMode : [h̖O

  nIndexŎw肳M`l̕ϒ[hωꍇɔ܂B̃Cxg͎M`lANeBuɂȂɂ܂B

OnSpeed(nIndex As Integer, dblSpeed As Double)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : `lԍ
  dblSpeed : `x(Baud)

  nIndexŎw肳M`l̓`xωꍇɔ܂B̃Cxg͎M`lANeBuɂȂɂ܂B


OnTiming(nIndex As Integer, dwTiming As Long, wUnit As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndex : `lԍ
  dwTiming : ^C~Ol
  wUnit : ^C~Ol̒P (0-PPM, 1-ms100{l)

  nIndexŎw肳M`l̍ĐMNbN^C~O񂪍XVꂽꍇɔ܂B
  ϒ[hrtty̏ꍇA^C~Olms100{lɂȂA0ms͌v\܂Bϒ[hrttyȊȌꍇA^C~OlppmłB

OnPlayBack(wStat As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wStat : v[obN	0-I, 1-Jn

@TEhv[obN̊Jn/Iɔ܂B

OnClockAdjust(pArray As Long)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  pArray : xli[ꂽz (AdjustClock\bhwWidthŎw肵)

  PXL̃f[^܂_(1bԊu)Ŕ܂BAvP[V͂̃^C~OŔzpArraỹxl𖾈ÂɕϊăOtBbNʂɕ`悵܂(FAXSSTVMv̂Ɠł)B
@X̃xl͈̔͂0`16384ڈɐ݌vĂ܂Aő僌x͎MMx󒆏ԁA`[jOԂŕω܂BۂWWVM1b`bN̑ѐYɕ`悳悤ɒĉBȒPAGĈ݂͗ǂACfAłB

  ႦΉ800sNZ̉ʂɕ`悷ꍇ́A

Call SetClockAdjust(1000, 11025.0)
Call AdjustClock(800)
	|

Private Sub MMVARI_OnClockAdjust(pArray As Long)
	Dim level(800-1) As Long
	Call MMVARI.AttachLongArray(level(0), pArray, 800)
	'To do : Ŕzlevel̓e(1s)OtBbNʂɕ`悵܂B
End Sub

OnError(nErrorCode As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  MMVARIRg[ŃG[oɔ܂Bȉ̃G[R[h`Ă܂B

	1=errorLostRX		MTEh
	2=errorLostTX		MTEh
	3=errorSoundOpen	TEhJ[hI[vłȂ
	4=errorComOpen		COMI[vłȂ


==========================
MMVARIRg[
==========================
  MMVARIRg[͕̃CX^X쐬ł܂BႦ΃tH[fUCiŕMMVARIRg[tH[ɔzuƁAꂼ̃Rg[̓͊SɓƗ̂ɂȂ܂B̏Ԃ͕̃TEhJ[hvO𓯎ɓ삳Ă̂Ɠł̂ŁÂQ_ɒӂ𕥂Kv܂B

- ]^TEhhCoł͓TEhJ[h𕡐̃Rg[ŋLłȂꍇ܂B̂悤ȃTEhhCoł͈قȂMMVARIRg[TEhIDw肷ƂPăTEhI[vG[ɂȂ܂B̃TEhJ[hCXg[Ăꍇ́AقȂTEhIDw肷Ƃ̖͉ł܂B

- OCOM|[g͋Lł܂BقȂ閼OCOM|[gݒ肵ĂꍇA܂̓Rg[ɑgݍ݂PTT@\𗘗pȂꍇ̖͔͂܂B


==============================
XMMVViewRg[ɂ
==============================
  XMMVViewRg[̓XyNgAEH[^tH[\邽߂̂܂̃Rg[łBOςŒ肳Ă܂̂Ŗ{iIȃAvP[Vɂ͂߂ł܂񂪁AȒPȎsꍇɎgƕ֗m܂B

  XMMVViewRg[VB6̃tH[fUCiŃtH[ɔzu܂BzuRg[̐ɐ͂܂BႦ΃XyNgƃEH[^tH[𓯎ɕ\ꍇ́AQXMMVViewRg[tH[ɕׂĔzuƗǂł傤B܂Tu`lMp̃X[EH[^tH[́ATuEChEɔzu܂B

 XMMVViewRg[̓}EX{^̃[U[C^[tF[XIɏA֘AMMVARIRg[ɑ΂ăbZ[W𑗂܂B̓֎~ꍇAbAttachMousevpeBFalseɐݒ肵ĉB


==================================
XMMVViewRg[̃vpeB
==================================

wType As Integer
~~~~~~~~~~~~~~~~
  Rg[̕\fUCݒ肵܂B
	0=viewtypeFFT		XyNg\
	1=viewtypeWATER	EH[^tH[\
	2=viewtypeWAVE	EF[utH[\
	3=viewtypeFREQERR	AFCx[^
	4=viewtypeSMALLWATER	EH[^tH[\(XP[Ȃ)

bFollowRxFreq As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƁAMMVARIRg[̃C`l̎MgXR[vOȂ悤wBaseFreqvpeBIɒ܂B

bAttachMouse As Boolean
~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƁA}EX{^̑ɂĊ֘AMMVARIRg[ƎIɘAg܂B̃vpeBFalseݒ肷ꍇA}EXɊւ邷ׂẴ[U[C^[tF[X̓AvP[VŏȂ΂Ȃ܂B

bLSB As Boolean
~~~~~~~~~~~~~~~
  M@̃we_CLSB̏ꍇTrueݒ肵܂BdwFreqHzȌꍇ(g[gXP[\Ăꍇ)ÃvpeB͈Ӗ܂B

bWaterAGC As Boolean
~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƁAEH[^tH[\AGCKp܂B

bShowSync As Boolean
~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƁAr[̍"SYNC"̃Xe[^X\܂B

bHighQuality As Boolean
~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƁAXyNgׂ͍\܂BwWidthFreqɌʂ܂B

bShowErrorMsg As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷ƁAr[̉EMMVARIRg[ŔG[strErrorMsgvpeB̕ŕ\܂B

bWindowsMouseEvent As Boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Trueݒ肷Windows̃}EXCxgAvP[Vɒʒm܂BWindows̃}EXCxgOnWindowsXXXXX̂悤ȖOŒ`܂BWindows}EXCxg𗘗pꍇAʒm}EX̍W̓Rg[NCAg̈̃sNZʒułBϊKvȏꍇARg[̃sNZwPixelXWwPixelYWQƂĉB

ColorFFT(nIndex As Integer) As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷XyNg\ڂ̐Fݒ肵܂BnIndex͈ȉ̂悤ɒ`܂B
	0	wiF
	1	MF
	2	F
	3	XP[̐F
	4	MJ[\F
	5	MJ[\F

ColorWater(nIndex As Integer) As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷EH[^tH[\ڂ̐Fݒ肵܂BnIndex͈ȉ̂悤ɒ`܂B
	0	wiF
	1	MOF
	2	F
	3	}[J[̘g̐F
	4	M}[J[̐F
	5	M}[J[̐F
	6	MPF
	7	MQF
	8	MRF
	9	MSF
	10	MTF
	11	MUF

  MO`MU̐FƁAwWaterLevelvpeB̃xzɂāAWaterPalettevpeB256iK̐FIɐ܂B

ColorWave(nIndex As Integer) As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷EF[utH[\ڂ̐Fݒ肵܂BnIndex͈ȉ̂悤ɒ`܂B
	0	wiF
	1	MF
	2	F
	3	XP[̐F

ColorFreqErr(nIndex As Integer) As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷AFCx[^\ڂ̐Fݒ肵܂BnIndex͈ȉ̂悤ɒ`܂B
	0	wiF
	1	xF(AFC OFF)
	2	xF(AFC ON)
	3	xF(I[o[W)
	4	̐

WaterPalette(nIndex As Integer) As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷EH[^[tH[pbgݒ肵܂BnIndex0`255͈̔͂łBXMMVViewRg[FFTM256iK̃xɕϊÃpbgQƂĐFɕϊ܂B
  ColorWaterwWaterLevelvpeBɒlݒ肷ƁAWaterPalettevpeB̓e͎IɍXV܂BAvP[Ṽpbg𒼐ڐݒ肷ꍇ́AColorWaterwWaterLevelvpeBɒlݒ肵Ȃ悤ɂĉB

dwFreqHz As Long
~~~~~~~~~~~~~~~~
  Rig̎g(Hz)ݒ肵܂BႦRig̕\g14.073MHz̏ꍇA14073000ݒ肵܂B̃vpeBȌꍇAXMMVViewRg[̓g[gXP[ɕ\܂BRiggXP[ɕ\ꍇ́ÃvpeBƁAbLSBvpeBK؂ɐݒ肷Kv܂B

wBaseFreq As Integer
~~~~~~~~~~~~~~~~~~~~
  XyNg܂̓EH[^tH[̍[̃g[g(Hz)ݒ肵܂B

wWidthFreq As Integer
~~~~~~~~~~~~~~~~~~~~~
  XyNg܂̓EH[^tH[̕\(Hz)ݒ肵܂B

wWaterLevel(nIndex As Integer) As Integer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M̃x(0`255)ݒ肵܂BXMMVViewRg[́ÃvpeBWaterColorvpeB̐F256iKWaterPalettevpeB𐶐܂BftHgł͈ȉ̃xݒ肳Ă܂B
	0 = 10
	1 = 60
	2 = 134
	3 = 192
	4 = 220
	5 = 240

wWaterNoise As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  EH[^tH[`̍ۂɌomCYx(dB)\܂B

wWaterNoiseH As Integer
~~~~~~~~~~~~~~~~~~~~~~~
  EH[^tH[`̍ۂ̌omCYx(dB)̏lݒ肵܂BftHg65łB

wWaterNoiseL As Integer
~~~~~~~~~~~~~~~~~~~~~~~
  EH[^tH[`̍ۂ̌omCYx(dB)̉lݒ肵܂BftHg35łB

wCursorFreq As Integer
~~~~~~~~~~~~~~~~~~~~~~
  XyNgAEH[^tH[ʂɃg[gJ[\(Hz)\܂BOݒ肷ƃJ[\͕\܂B

wPixelXW As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Rg[̉sXZŕ\܂B

wPixelYW As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Rg[̏csXZŕ\܂B

wMouseChannel As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  }EXTu`lJ[\̏ɂ鎞ɂ̃Tu`lԍ(1`)i[܂B

wMouseNotch As Integer (ReadOnly)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  }EXmb`J[\̏ɂ鎞ɂ̃mb`ԍ(CfbNX+1)i[܂B

strMsg(nIndex As Integer) As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  r[ɃbZ[W`悵܂BbZ[W\ʒúAnIndexňȉ̂悤ɒ`܂B
	0	
	1	
	2	E
	3	E
	4	

 [JCYꂽ\ꍇARg[FontvpeB̌ɐݒ肵ĂȂ΂Ȃ܂B

strErrorMsg(nIndex As Integer) As String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  r[ɕ`悳MMVARIRg[̃G[bZ[Wݒ肵܂BnIndex͎̂悤ɒ`܂BAvP[V͂̃vpeBɃ[JCYꂽ̃bZ[Wݒ肵Ă܂B

	1=errorLostRX		MTEh
	2=errorLostTX		MTEh
	3=errorSoundOpen	TEhJ[hI[vłȂ
	4=errorComOpen		COMI[vłȂ

 [JCYꂽݒ肷ꍇARg[FontvpeB̌ɐݒ肵ĂȂ΂Ȃ܂B

================================
XMMVViewRg[̃\bh
================================

Sub Draw(dwHandle As Long)
~~~~~~~~~~~~~~~~~~~~~~~~~~
  XyNg܂̓EH[^tH[`悵܂BdwHandleMMVARIRg[̃IuWFNgnhłBKMMVARI.dwHandleŎQƂln܂BXMMVViewRg[́ÃnhɁAFFT̍\f[^(TvOgA_AgbNX)AM/MLAgAmb`gȂǂQƂĕ`悵܂B
  ̃\bhȂƂ1ȏĂяoƁA}EXNbÑ[U[C^[tF[XŎIɏA֘AMMVARIRg[ɎgύXȂǂ̗vs܂B


Sub DrawWave(dwHandle As Long)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  EF[utH[`悵܂BdwHandleMMVARIRg[̃IuWFNgnhłBKMMVARI.dwHandleŎQƂln܂BXMMVViewRg[́ÃnhɁAEF[utH[\f[^(_AgbNX)QƂĕ`悵܂B

Sub DrawSmallWater(dwHandle As Long, nIndex As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`l̃EH[^[tH[`悵܂BdwHandleMMVARIRg[̃IuWFNgnhłBXMMVViewRg[́ÃnhɁAFFT̍\f[^(TvOgA_AgbNX)AMLAgQƂĕ`悵܂B
  ̃\bhȂƂ1ȏĂяoƁA}EXNbÑ[U[C^[tF[XŎIɏA֘AMMVARIRg[ɎgύXȂǂ̗vs܂B

 ̕\fUC̓Tu`lEChẼXe[^Xo[ɔzu邱Ƃz肵Đ݌vĂ܂B
 ̕\fUCłbFollowRxFreq̏ԂɊ֌WȂɎMgXR[vɎ߂悤wBaseFreq܂B

Sub DrawFreqErr(dwHandle As Long, nIndex As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  nIndexŎw肷M`lAFCx[^\܂BdwHandleMMVARIRg[̃IuWFNgnhłBXMMVViewRg[́ÃnhɁAMMVARIRg[dblFreqErrorvpeB̏QƂĕ`悵܂B

Sub ClearWater()
~~~~~~~~~~~~~~~~
  EH[^tH[NA܂B

================================
XMMVViewRg[̃Cxg
================================

OnLMouseDown(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : g[g(Hz)

  XyNgAEH[^tH[ʂŁA}EX̍{^ꂽɔ܂B

OnLMouseUp(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : g[g(Hz)

  XyNgAEH[^tH[ʂŁA}EX̍{^ꂽɔ܂B

OnLMouseMove(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : g[g(Hz)

  XyNgAEH[^tH[ʂŁA}EX̍{^ꂽԂňړɔ܂B

OnRMouseDown(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : g[g(Hz)

  XyNgAEH[^tH[ʂŁA}EX̉E{^ꂽɔ܂B

OnRMouseUp(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : g[g(Hz)

  XyNgAEH[^tH[ʂŁA}EX̉E{^ꂽɔ܂B

OnRMouseMove(wFreq As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wFreq : g[g(Hz)

  XyNgAEH[^tH[ʂŁA}EX̉E{^ꂽԂňړɔ܂B

OnWindowsLMouseDown(wX As Integer, wY As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wX : sNZʒu(X)
  wY : sNZʒu(Y)

  Windows̃}EXCxgWM_LBUTTONDOWNŔ܂B

OnWindowsLMouseUp(wX As Integer, wY As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wX : sNZʒu(X)
  wY : sNZʒu(Y)

  Windows̃}EXCxgWM_LBUTTONUPŔ܂B

OnWindowsRMouseDown(wX As Integer, wY As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wX : sNZʒu(X)
  wY : sNZʒu(Y)

  Windows̃}EXCxgWM_RBUTTONDOWNŔ܂B

OnWindowsRMouseUp(wX As Integer, wY As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wX : sNZʒu(X)
  wY : sNZʒu(Y)

  Windows̃}EXCxgWM_RBUTTONUPŔ܂B

OnWindowsMouseMove(dwFlag As Long, wX As Integer, wY As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@dwFlag : {^̏(Windows APIQ)
  wX : sNZʒu(X)
  wY : sNZʒu(Y)

  Windows̃}EXCxgWM_MOUSEMOVEŔ܂B

=============================
XMMVLvlRg[ɂ
=============================
  XMMVLvlRg[͐Mx[^\邽߂̂܂̃Rg[łB

  XMMVLvlRg[VB6̃tH[fUCiŃtH[ɔzu܂BzuRg[̐ɐ͂܂BႦΕ̎M`lT|[gꍇ́Ã`lXMMVLvlRg[zuƗǂł傤B

  XMMVLvlRg[ɕ\郌x[^́̕ARg[̊OρiAXyNgjɂĎIɌ肳܂BRg[cɔzuꂽꍇAx[^͏㉺ɐU܂BRg[ɔzuꂽꍇAx[^͍EɐU܂B

=================================
XMMVLvlRg[̃vpeB
=================================

BackColor As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~~
  Rg[̔wiFݒ肵܂B

MaxLevel As Integer
~~~~~~~~~~~~~~~~~~~
  ő僌xS/Nl100{l(܂MFSKgbNXl)Őݒ肵܂BftHg2048(=20.48dB)łB

OffColor As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~~
  XP`JĂȂ̐M̐Fݒ肵܂B

OnColor As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~
  XP`JĂ鎞̐M̐Fݒ肵܂B

TxColor As OLE_COLOR
~~~~~~~~~~~~~~~~~~~~
  M̐M̐Fݒ肵܂B

===============================
XMMVLvlRg[̃\bh
===============================

Sub Draw(dwHandle As Long, nIndex As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  dwHandle : MMVARIRg[̃IuWFNgnh
  nIndex : \郌x̎M`l

  x[^`悵܂BdwHandleMMVARIRg[̃IuWFNgnhłBKMMVARI.dwHandleŎQƂln܂BXMMVLvlRg[́ÃnhɁAnIndexŎw肳ꂽM`l̐MxAXP`xȂǂQƂĕ`悵܂B

  ܂̃\bhȂƂ1ȏĂяoƁA}EXNbÑ[U[C^[tF[XŎIɏA֘AMMVARIRg[ɃXP`xύX̗vs܂B


Sub DrawCustom(wSig As Integer, wSq As Integer, fOver As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  wSig : Mx
  wSq : XP`x
  fOver : MI[o[t[

  x[^`悵܂B̃t@NVMMVARIRg[݂ȂꍇłgƂł܂B


===============================
XMMVLvlRg[̃Cxg
===============================

OnLMouseDown(level As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  level : Mx(dB100{l)

  }EX̍{^ꂽɔ܂B

OnLMouseUp(level As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  level : Mx(dB100{l)

  }EX̍{^ꂽɔ܂B

OnLMouseMove(level As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  level : Mx(dB100{l)

  }EX̍{^ꂽԂňړɔ܂B

OnRMouseDown(level As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  level : Mx(dB100{l)

  }EX̉E{^ꂽɔ܂B

OnRMouseUp(level As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  level : Mx(dB100{l)

  }EX̉E{^ꂽɔ܂B

OnRMouseMove(level As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  level : Mx(dB100{l)

  }EX̉E{^ꂽԂňړɔ܂B

========
Ō
========
  VB6ɂĂ͂܂̑flȂ̂ŁA{̂ActiveX쐬TvRei쐬...VB6Ɋւcȃ}jAǂ...Ƃɂ莞Ԃ܂Bt̃TvłȂ̎QlɂȂΊłB

  MMVARI.ocx̓A}`Ap̃t[\tgEGAłBp/񏤗pɊ֌WȂȂ̐ӔCɂĎRɗpAĔzzsƂł܂B̌ɂĎւ̘A͈ؕKv܂B

* pvOmfsk[hꍇAM.Greenman ZL1BPU, Nino Porcino IZ8BLY狖𓾂Kv邩m܂B

Good luck!, 73, Mako
