Код:
#WAVE_BUFFER_SIZE = 44100 * 4
#WAVE_TICK_PRECS = 0.0000000000000000001
Define WaveIn, WaveOut
Define WaveNoizeBoolean = 1
Define WaveNoizeVolumeLevel.d = 0.00001
Define WaveNoizeMergeLevel.d = 0.4986750000000000001
Define WaveNoizeSeparation.d = 1 - WaveNoizeMergeLevel
Define WaveNoizeShapeModulation = 1
Define WaveNoizePanopticum = 1
Define WaveSinusBoolean = 1
Define WaveSinusVolumeLevel.d = 0.5
Define WaveSinusTempoPrevious.d
Define WaveSinusFrequency.d = 20
Define WaveSquareBoolean = 1
Define WaveSquareVolumeLevel.d = 0.001965
Define WaveSquareTempoPrevious.d
Define WaveSquareFrequency = 20
Define WaveTriangleBoolean = 1
Define WaveTriangleVolumeLevel.d = 0.6
Define WaveTriangleTempoPrevious.d
Define WaveTriangleFrequency.d = 20
Define WaveSawBoolean = 0
Define WaveSawVolumeLevel.d = 0.5
Define WaveSawFrequency = 20
Define WaveSawDeformation.d = 0.5
Define WaveLineInBoolean = 0
Define WaveLineInVolumeLevel.d = 0.70
Define MasterHarmonicsLevel.d = 0.0025
Define MasterVolumeLevel.d = 0.9896605
Define CurrentOutBuffer = 1
Define CurrentInMemoryBlock = 1
Structure WAVETICKSTEREO
First.u
Second.u
EndStructure
WaveFormatEx.WAVEFORMATEX
With WaveFormatEx
\wFormatTag = #WAVE_FORMAT_PCM
\nChannels = 2
\nSamplesPerSec = 44100
\nAvgBytesPerSec = \nSamplesPerSec * \nChannels * SizeOf(Word)
\nBlockAlign = \nChannels * SizeOf(Word)
\wBitsPerSample = 16
\cbSize = SizeOf(WAVEFORMATEX)
EndWith
Define WaveHdr1.WAVEHDR : WaveHdr2.WAVEHDR : WaveHdr3.WAVEHDR
Define WaveRecHdr1.WAVEHDR : WaveRecHdr2.WAVEHDR : WaveRecHdr3.WAVEHDR
With WaveHdr1
\lpData = AllocateMemory(#WAVE_BUFFER_SIZE)
\dwBufferLength = #WAVE_BUFFER_SIZE
\dwLoops = 1
EndWith
With WaveHdr2
\lpData = AllocateMemory(#WAVE_BUFFER_SIZE)
\dwBufferLength = #WAVE_BUFFER_SIZE
\dwLoops = 1
EndWith
With WaveHdr3
\lpData = AllocateMemory(#WAVE_BUFFER_SIZE)
\dwBufferLength = #WAVE_BUFFER_SIZE
\dwLoops = 1
EndWith
With WaveRecHdr1
\lpData = AllocateMemory(#WAVE_BUFFER_SIZE)
\dwBufferLength = #WAVE_BUFFER_SIZE
EndWith
With WaveRecHdr2
\lpData = AllocateMemory(#WAVE_BUFFER_SIZE)
\dwBufferLength = #WAVE_BUFFER_SIZE
EndWith
With WaveRecHdr3
\lpData = AllocateMemory(#WAVE_BUFFER_SIZE)
\dwBufferLength = #WAVE_BUFFER_SIZE
EndWith
Define *CurrentInPointer.WAVETICKSTEREO = WaveRecHdr1\lpData
Global Dim *CurrentInBuffer(3)
*CurrentInBuffer(1) = WaveRecHdr1\lpData + #WAVE_BUFFER_SIZE
*CurrentInBuffer(2) = WaveRecHdr2\lpData + #WAVE_BUFFER_SIZE
*CurrentInBuffer(3) = WaveRecHdr1\lpData + #WAVE_BUFFER_SIZE
Procedure GenerateWaveLine(*Buffer)
Shared WaveNoizeShapeModulation, WaveNoizePanopticum
Shared WaveNoizeBoolean, WaveSinusBoolean, WaveSquareBoolean, WaveTriangleBoolean, WaveSawBoolean, WaveLineInBoolean
Shared WaveNoizeVolumeLevel, WaveNoizeMergeLevel, WaveNoizeSeparation
Shared WaveSinusVolumeLevel, WaveSinusFrequency, WaveSinusTempoPrevious
Shared WaveSquareVolumeLevel, WaveSquareFrequency, WaveSquareTempoPrevious
Shared WaveTriangleVolumeLevel, WaveTriangleFrequency, WaveTriangleTempoPrevious
Shared WaveSawVolumeLevel, WaveSawFrequency, WaveSawDeformation
Shared *CurrentInPointer, CurrentInMemoryBlock, WaveLineInVolumeLevel
Shared MasterVolumeLevel, MasterHarmonicsLevel
wSin.d = 2 * #PI * WaveSinusFrequency
wSquare.d = 2 * #PI * WaveSquareFrequency
wTriangle.d = 2 * #PI * WaveTriangleFrequency
*u16CurrentTick.WAVETICKSTEREO = *Buffer
*Overflow = *u16CurrentTick + #WAVE_BUFFER_SIZE
While (*u16CurrentTick < *Overflow)
If (WaveNoizeBoolean = 1)
If (WaveNoizePanopticum = 1)
FirstChannelPanMeter.d = 1
SecondChannelPanMeter.d = 0.99
WaveNoizePanopticum = 2
Else
FirstChannelPanMeter = 0.99
SecondChannelPanMeter = 1
WaveNoizePanopticum = 1
EndIf
NoizeTickValueFirst.d = (Random(65535) - WaveNoizeShapeModulation) * WaveNoizeVolumeLevel * FirstChannelPanMeter
If (NoizeTickValueFirst <= 0)
NoizeTickValueFirst = #WAVE_TICK_PRECS
EndIf
NoizeTickValueSecond.d = (Random(65535) - WaveNoizeShapeModulation) * WaveNoizeVolumeLevel * FirstChannelPanMeter
If (NoizeTickValueSecond <= 0)
NoizeTickValueSecond = #WAVE_TICK_PRECS
EndIf
NoizeAverage.d = 0.5 * (NoizeTickValueFirst + NoizeTickValueSecond)
NoizeTickValueFirst = (NoizeTickValueFirst * WaveNoizeSeparation) + (NoizeAverage * WaveNoizeMergeLevel)
NoizeTickValueSecond = (NoizeTickValueSecond * WaveNoizeSeparation) + (NoizeAverage * WaveNoizeMergeLevel)
Else
NoizeTickValueFirst = 0.5 * 65536
NoizeTickValueSecond = 0.5 * 65536
EndIf
If (WaveSinusBoolean = 1)
tSin.d = GeneratorCounter / 44100 + WaveSinusTempoPrevious
SinusTickValue.d = ((0.5 *(Sin(wSin * tSin) + 1)) * 65535 * WaveSinusVolumeLevel)
EndIf
If (WaveSquareBoolean = 1)
tSquare.d = GeneratorCounter / 44100 + WaveSquareTempoPrevious
SinWT.d = Sin(wSquare * tSquare)
If (SinWT >= 0)
SquareTickValueSigned.d = (32767 * WaveSquareVolumeLevel)
Else
SquareTickValueSigned = - (32768 * WaveSquareVolumeLevel)
EndIf
SquareTickValue.d = SquareTickValueSigned + 32767.5
EndIf
If (WaveTriangleBoolean = 1)
tTriangle = 44100 / WaveTriangleFrequency
xTriangle = (((GeneratorCounter - tTriangle / 4) % tTriangle) + tTriangle) % tTriangle - (0.5 * tTriangle)
TriangleTickValue.d = 4 * 32768 / tTriangle * Abs(xTriangle) - 32768
TriangleTickValue + 32767.5
TriangleTickValue * WaveTriangleVolumeLevel
EndIf
If (WaveSawBoolean = 1)
tSaw = 44100 / WaveSawFrequency
SawTickValue = 2 * (32768 * WaveSawVolumeLevel)
SawTickValue * ((GeneratorCounter + tSaw) % tSaw) / tSaw - (32768 * WaveSawVolumeLevel)
If (SawPhase = 0)
SawTickValue + Random(Abs(SawTickValue * WaveSawDeformation))
SawPhase = 1
Else
SawTickValue - Random(Abs(SawTickValue * WaveSawDeformation))
SawPhase = 0
EndIf
EndIf
BusCount = WaveNoizeBoolean + WaveSinusBoolean + WaveSquareBoolean + WaveTriangleBoolean + WaveSawBoolean + WaveLineInBoolean
If (BusCount = 0)
BusCount = 1
EndIf
FirstChannelTickValue.d = (NoizeTickValueFirst + SinusTickValue + SquareTickValue + TriangleTickValue + SawTickValue + *CurrentInPointer\First) / BusCount * MasterVolumeLevel
SecondChannelTickValue.d = (NoizeTickValueSecond + SinusTickValue + SquareTickValue + TriangleTickValue + SawTickValue + *CurrentInPointer\Second) / BusCount * MasterVolumeLevel
If (FirstChannelTickValue < 0)
FirstChannelTickValue = 0
EndIf
If (SecondChannelTickValue < 0)
SecondChannelTickValue = 0
EndIf
If (MasterHarmonicsPhase = 0)
FirstChannelTickValue + (Random(FirstChannelTickValue) * MasterHarmonicsLevel)
SecondChannelTickValue + (Random(SecondChannelTickValue) * MasterHarmonicsLevel)
MasterHarmonicsPhase = 1
Else
FirstChannelTickValue - (Random(FirstChannelTickValue) * MasterHarmonicsLevel)
SecondChannelTickValue - (Random(SecondChannelTickValue) * MasterHarmonicsLevel)
MasterHarmonicsPhase = 0
EndIf
DeformationOperationId = Random(2)
If (DeformationOperationId = 0)
*u16CurrentTick\First = Int(Round(FirstChannelTickValue, #PB_Round_Nearest))
*u16CurrentTick\Second = Int(Round(SecondChannelTickValue, #PB_Round_Nearest))
ElseIf (DeformationOperationId = 1)
*u16CurrentTick\First = Int(Round(FirstChannelTickValue, #PB_Round_Up))
*u16CurrentTick\Second = Int(Round(SecondChannelTickValue, #PB_Round_Up))
Else
*u16CurrentTick\First = Int(Round(FirstChannelTickValue, #PB_Round_Down))
*u16CurrentTick\Second = Int(Round(SecondChannelTickValue, #PB_Round_Down))
EndIf
If (WaveNoizeShapeModulation = 1)
WaveNoizeShapeModulation = 0
EndIf
*CurrentInPointer + SizeOf(WAVETICKSTEREO)
*CurrentInPointerBuffer = *CurrentInBuffer(CurrentInMemoryBlock)
*CurrentInOverflow = *CurrentInPointerBuffer + #WAVE_BUFFER_SIZE
While (*CurrentInPointer >= *CurrentInOverflow)
*CurrentInPointer = *CurrentInPointerBuffer
Wend
GeneratorCounter + 1
*u16CurrentTick + SizeOf(WAVETICKSTEREO)
Wend
*u16CurrentTick.WAVETICKSTEREO = *Buffer
WaveSinusTempoPrevious = tSin
WaveSquareTempoPrevious = tSquare
EndProcedure
Procedure WaveOutOpenCallback(hwo, Message, Instance.l, Param1.l, Param2.l)
Shared WaveOut
Shared CurrentOutBuffer
Shared WaveHdr1, WaveHdr2, WaveHdr3
If (Message = #WOM_DONE)
If (CurrentOutBuffer = 1)
waveOutWrite_ (WaveOut, @WaveHdr2, SizeOf(WAVEHDR))
GenerateWaveLine(WaveHdr2\lpData)
CurrentOutBuffer = 2 ;Next
ElseIf (CurrentOutBuffer = 2)
waveOutWrite_ (WaveOut, @WaveHdr3, SizeOf(WAVEHDR))
GenerateWaveLine(WaveHdr3\lpData)
CurrentOutBuffer = 3 ;Next
Else
waveOutWrite_ (WaveOut, @WaveHdr1, SizeOf(WAVEHDR))
GenerateWaveLine(WaveHdr1\lpData)
CurrentOutBuffer = 1 ;Next
EndIf
EndIf
EndProcedure
Procedure WaveInCallback(hwi, Message, Instance.l, Param1.l, Param2.l)
Shared WaveRecHdr1, WaveRecHdr2, WaveRecHdr3, CurrentInMemoryBlock, *CurrentInPointer
If (Message = #WIM_DATA)
CurrentInMemoryBlock + 1
If (CurrentInMemoryBlock = 1)
*CurrentInPointer = WaveRecHdr1\lpData
ElseIf (CurrentInMemoryBlock = 2)
*CurrentInPointer = WaveRecHdr2\lpData
ElseIf (CurrentInMemoryBlock = 3)
*CurrentInPointer = WaveRecHdr3\lpData
ElseIf (CurrentInMemoryBlock > 3)
CurrentInMemoryBlock = 1
EndIf
EndIf
EndProcedure
Procedure SetSliderPosition(SliderObj, FloatValue.d)
SetGadgetState(SliderObj, FloatValue * 580)
EndProcedure
Macro SetEditValue(EditorObj, FloatValue)
SetGadgetText(EditorObj, StrD(FloatValue))
EndMacro
Procedure.d GetSliderValue(SliderObj)
ProcedureReturn GetGadgetState(SliderObj) / 580
EndProcedure
Procedure IsValidStrFloat(LpStrValue$)
If (StrD(ValD(LpStrValue$)) = LpStrValue$)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d GetEditValue(EditorGadget)
LpStrValue$ = RemoveString (GetGadgetText(EditorGadget), " ")
If (LpStrValue$ = "")
LpStrValue$ = "0"
EndIf
LpStrValue$ = ReplaceString (LpStrValue$, ",", ".")
If (Right(LpStrValue$, 1) = ".")
LpStrValue$ + StrD(#WAVE_TICK_PRECS)
EndIf
If (IsValidStrFloat(LpStrValue$))
ProcedureReturn ValD(LpStrValue$)
EndIf
ProcedureReturn 0
EndProcedure
Procedure GenerateWaveInSilence()
For i = 1 To 3
FillMemory(*CurrentInBuffer(i), #WAVE_BUFFER_SIZE, 0, #PB_Word)
Next
EndProcedure
waveOutOpen_(@WaveOut, #WAVE_MAPPER, @WaveFormatEx, @WaveOutOpenCallback(), 0, #CALLBACK_FUNCTION | #WAVE_ALLOWSYNC)
waveInOpen_ (@WaveIn, #WAVE_MAPPER, @WaveFormatEx, @WaveOutOpenCallback(), 0, #CALLBACK_FUNCTION)
GenerateWaveLine(WaveHdr1\lpData)
GenerateWaveLine(WaveHdr2\lpData)
GenerateWaveLine(WaveHdr3\lpData)
waveOutPrepareHeader_(WaveOut, @WaveHdr1, SizeOf(WAVEHDR))
waveOutPrepareHeader_(WaveOut, @WaveHdr2, SizeOf(WAVEHDR))
waveOutPrepareHeader_(WaveOut, @WaveHdr3, SizeOf(WAVEHDR))
waveInPrepareHeader_(WaveIn, @WaveRecHdr1, SizeOf(WAVEHDR))
waveInPrepareHeader_(WaveIn, @WaveRecHdr2, SizeOf(WAVEHDR))
waveInPrepareHeader_(WaveIn, @WaveRecHdr3, SizeOf(WAVEHDR))
WndMain = OpenWindow(#PB_Any, 0, 0, 720, 350, "Noize Generator Frequency Modulationable", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Panel = PanelGadget(#PB_Any, 1, 1, 720, 500)
AddGadgetItem(Panel, -1, "Noize")
TextGadget(#PB_Any, 5, 5, 150, 25, "Level:")
cSliderNoizeVolume = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditNoizeVolume = StringGadget (#PB_Any, 585, 30, 125, 25, "")
TextGadget(#PB_Any, 5, 70, 150, 25, "Merge Channels:")
cSliderNoizeMerge = TrackBarGadget(#PB_Any, 5, 95, 580, 25, 1, 580)
cEditNoizeMerge = StringGadget (#PB_Any, 585, 95, 125, 25, "")
cCheckNoize = CheckBoxGadget(#PB_Any, 5, 120, 75, 25, "ON")
If (WaveNoizeBoolean)
SetGadgetState(cCheckNoize, #PB_Checkbox_Checked)
EndIf
SetSliderPosition (cSliderNoizeVolume, WaveNoizeVolumeLevel)
SetSliderPosition (cSliderNoizeMerge, WaveNoizeMergeLevel)
SetEditValue (cEditNoizeVolume, WaveNoizeVolumeLevel)
SetEditValue (cEditNoizeMerge, WaveNoizeMergeLevel)
AddGadgetItem(Panel, -1, "Sinus")
TextGadget(#PB_Any, 5, 5, 150, 25, "Frequency:")
cSliderSineFreq = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditSineFreq = StringGadget (#PB_Any, 585, 30, 125, 25, "")
TextGadget(#PB_Any, 5, 70, 150, 25, "Level:")
cSliderSineVolume = TrackBarGadget(#PB_Any, 5, 95, 580, 25, 1, 580)
cEditSineVolume = StringGadget (#PB_Any, 585, 95, 125, 25, "")
cCheckSine = CheckBoxGadget(#PB_Any, 5, 120, 75, 25, "ON")
If (WaveSinusBoolean)
SetGadgetState(cCheckSine, #PB_Checkbox_Checked)
EndIf
SetSliderPosition (cSliderSineFreq, WaveSinusFrequency / 44100 / 2)
SetSliderPosition (cSliderSineVolume, WaveSinusVolumeLevel)
SetEditValue (cEditSineFreq, WaveSinusFrequency)
SetEditValue (cEditSineVolume, WaveSinusVolumeLevel)
AddGadgetItem(Panel, -1, "Square")
TextGadget(#PB_Any, 5, 5, 150, 25, "Frequency:")
cSliderSquareFreq = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditSquareFreq = StringGadget (#PB_Any, 585, 30, 125, 25, "")
TextGadget(#PB_Any, 5, 70, 150, 25, "Level:")
cSliderSquareVolume = TrackBarGadget(#PB_Any, 5, 95, 580, 25, 1, 580)
cEditSquareVolume = StringGadget (#PB_Any, 585, 95, 125, 25, "")
cCheckSquare = CheckBoxGadget(#PB_Any, 5, 120, 75, 25, "ON")
If (WaveSquareBoolean)
SetGadgetState(cCheckSquare, #PB_Checkbox_Checked)
EndIf
SetSliderPosition (cSliderSquareFreq, WaveSquareFrequency / 44100 / 2)
SetSliderPosition (cSliderSquareVolume, WaveSquareVolumeLevel)
SetEditValue (cEditSquareFreq, WaveSquareFrequency)
SetEditValue (cEditSquareVolume, WaveSquareVolumeLevel)
AddGadgetItem(Panel, -1, "Triangle")
TextGadget(#PB_Any, 5, 5, 150, 25, "Frequency:")
cSliderTriangleFreq = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditTriangleFreq = StringGadget (#PB_Any, 585, 30, 125, 25, "")
TextGadget(#PB_Any, 5, 70, 150, 25, "Level:")
cSliderTriangleVolume = TrackBarGadget(#PB_Any, 5, 95, 580, 25, 1, 580)
cEditTriangleVolume = StringGadget (#PB_Any, 585, 95, 125, 25, "")
cCheckTriangle = CheckBoxGadget(#PB_Any, 5, 120, 75, 25, "ON")
If (WaveTriangleBoolean)
SetGadgetState(cCheckTriangle, #PB_Checkbox_Checked)
EndIf
SetSliderPosition (cSliderTriangleFreq, WaveTriangleFrequency / 44100 / 2)
SetSliderPosition (cSliderTriangleVolume, WaveTriangleVolumeLevel)
SetEditValue (cEditTriangleFreq, WaveTriangleFrequency)
SetEditValue (cEditTriangleVolume, WaveTriangleVolumeLevel)
AddGadgetItem(Panel, -1, "Saw")
TextGadget(#PB_Any, 5, 5, 150, 25, "Frequency:")
cSliderSawFreq = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditSawFreq = StringGadget (#PB_Any, 585, 30, 125, 25, "")
TextGadget(#PB_Any, 5, 70, 150, 25, "Level:")
cSliderSawVolume = TrackBarGadget(#PB_Any, 5, 95, 580, 25, 1, 580)
cEditSawVolume = StringGadget (#PB_Any, 585, 95, 125, 25, "")
cCheckSaw = CheckBoxGadget(#PB_Any, 5, 120, 75, 25, "ON")
If (WaveSawBoolean)
SetGadgetState(cCheckSaw, #PB_Checkbox_Checked)
EndIf
SetSliderPosition (cSliderSawFreq, WaveSawFrequency / 44100 / 2)
SetSliderPosition (cSliderSawVolume, WaveSawVolumeLevel)
SetEditValue (cEditSawFreq, WaveSawFrequency)
SetEditValue (cEditSawVolume, WaveSawVolumeLevel)
AddGadgetItem(Panel, -1, "Line In")
TextGadget(#PB_Any, 5, 5, 150, 25, "Level:")
cSliderLineInVolume = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditLineInVolume = StringGadget(#PB_Any, 585, 30, 125, 25, "")
cCheckLineIn = CheckBoxGadget(#PB_Any, 5, 70, 75, 25, "ON")
If (WaveLineInBoolean)
SetGadgetState(cCheckLineIn, #PB_Checkbox_Checked)
waveInStart_ (WaveIn)
EndIf
SetSliderPosition(cSliderLineInVolume, WaveLineInVolumeLevel)
SetEditValue(cEditLineInVolume, WaveLineInVolumeLevel)
AddGadgetItem(Panel, -1, "Mixer")
TextGadget(#PB_Any, 5, 5, 150, 25, "Harmonics:")
cSliderMixerHarms = TrackBarGadget(#PB_Any, 5, 30, 580, 25, 1, 580)
cEditMixerHarms = StringGadget(#PB_Any, 585, 30, 125, 25, "")
TextGadget(#PB_Any, 5, 70, 150, 25, "Level:")
cSliderMixerVolume = TrackBarGadget(#PB_Any, 5, 95, 580, 25, 1, 580)
cEditMixerVolume = StringGadget (#PB_Any, 585, 95, 125, 25, "")
SetSliderPosition (cSliderMixerHarms, MasterHarmonicsLevel)
SetSliderPosition (cSliderMixerVolume, MasterVolumeLevel)
SetEditValue (cEditMixerHarms, MasterHarmonicsLevel)
SetEditValue (cEditMixerVolume, MasterVolumeLevel)
waveOutWrite_(WaveOut, @WaveHdr1, SizeOf(WAVEHDR))
While #True
WndEvent = WaitWindowEvent()
Select WndEvent
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case cSliderNoizeVolume
WaveNoizeVolumeLevel = GetSliderValue(cSliderNoizeVolume)
SetEditValue(cEditNoizeVolume, WaveNoizeVolumeLevel)
Case cEditNoizeVolume
WaveNoizeVolumeLevel = GetEditValue(cEditNoizeVolume)
SetSliderPosition(cSliderNoizeVolume, WaveNoizeVolumeLevel)
Case cSliderNoizeMerge
WaveNoizeMergeLevel = GetSliderValue(cSliderNoizeMerge)
SetEditValue(cEditNoizeMerge, WaveNoizeMergeLevel)
Case cEditNoizeMerge
WaveNoizeMergeLevel = GetEditValue(cEditNoizeMerge)
SetSliderPosition(cSliderNoizeMerge, WaveNoizeMergeLevel)
Case cCheckNoize
If (GetGadgetState(cCheckNoize) = #PB_Checkbox_Checked)
WaveNoizeBoolean = 1
Else
WaveNoizeBoolean = 0
EndIf
Case cSliderSineFreq
WaveSinusFrequency = 44100 / 2 * GetSliderValue(cSliderSineFreq)
SetEditValue(cEditSineFreq, WaveSinusFrequency)
Case cEditSineFreq
WaveSinusFrequency = GetEditValue(cEditSineFreq)
SetSliderPosition(cSliderSineFreq, WaveSinusFrequency / (44100 / 2))
Case cSliderSineVolume
WaveSinusVolumeLevel = GetSliderValue(cSliderSineVolume)
SetEditValue(cEditSineVolume, WaveSinusVolumeLevel)
Case cEditSineVolume
WaveSinusVolumeLevel = GetEditValue(cEditSineVolume)
SetSliderPosition(cSliderSineVolume, WaveSinusVolumeLevel)
Case cCheckSine
If (GetGadgetState(cCheckSine) = #PB_Checkbox_Checked)
WaveSinusBoolean = 1
Else
WaveSinusBoolean = 0
EndIf
Case cSliderSquareFreq
WaveSquareFrequency = 44100 / 2 * GetSliderValue(cSliderSquareFreq)
SetEditValue(cEditSquareFreq, WaveSquareFrequency)
Case cEditSquareFreq
WaveSquareFrequency = GetEditValue(cEditSquareFreq)
SetSliderPosition(cEditSquareFreq, WaveSquareFrequency / (44100 / 2))
Case cSliderSquareVolume
WaveSquareVolumeLevel = GetSliderValue(cSliderSquareVolume)
SetEditValue(cEditSquareVolume, WaveSquareVolumeLevel)
Case cEditSquareVolume
WaveSquareVolumeLevel = GetEditValue(cEditSquareVolume)
SetSliderPosition(cSliderSquareVolume, WaveSquareVolumeLevel)
Case cCheckSquare
If (GetGadgetState(cCheckSquare) = #PB_Checkbox_Checked)
WaveSquareBoolean = 1
Else
WaveSquareBoolean = 0
EndIf
Case cSliderTriangleFreq
WaveTriangleFrequency = 44100 / 2 * GetSliderValue(cSliderTriangleFreq)
SetEditValue(cEditTriangleFreq, WaveTriangleFrequency)
Case cEditTriangleFreq
WaveTriangleFrequency = GetEditValue(cEditTriangleFreq)
SetSliderPosition(cSliderTriangleFreq, WaveTriangleFrequency / (44100 / 2))
Case cSliderTriangleVolume
WaveTriangleVolumeLevel = GetSliderValue(cSliderTriangleVolume)
SetEditValue(cEditTriangleVolume, WaveTriangleVolumeLevel)
Case cEditTriangleVolume
WaveTriangleVolumeLevel = GetEditValue(cEditTriangleVolume)
SetSliderPosition(cSliderTriangleVolume, cEditTriangleVolume)
Case cCheckTriangle
If (GetGadgetState(cCheckTriangleeck) = #PB_Checkbox_Checked)
WaveTriangleBoolean = 1
Else
WaveTriangleBoolean = 0
EndIf
Case cSliderSawFreq
WaveSawFrequency = 44100 / 2 * GetSliderValue(cSliderSawFreq)
SetEditValue(cEditSawFreq, WaveSawFrequency)
Case cEditSawFreq
WaveSawFrequency = GetEditValue(cEditSawFreq)
SetSliderPosition(cSliderSawFreq, WaveSawFrequency / (44100 / 2))
Case cSliderSawVolume
WaveSawVolumeLevel = GetSliderValue(cSliderSawVolume)
SetEditValue(cEditSawVolume, WaveSawVolumeLevel)
Case cEditSawVolume
WaveSawVolumeLevel = GetEditValue(cEditSawVolume)
SetSliderPosition(cSliderSawVolume, WaveSawVolumeLevel)
Case cCheckSaw
If (GetGadgetState(cCheckSaw) = #PB_Checkbox_Checked)
WaveSawBoolean = 1
Else
WaveSawBoolean = 0
EndIf
Case cSliderLineInVolume
WaveLineInVolumeLevel = GetSliderValue(cSliderLineInVolume)
SetEditValue(cEditLineInVolume, WaveLineInVolumeLevel)
Case cEditLineInVolume
WaveLineInVolumeLevel = GetEditValue(cEditLineInVolume)
SetSliderPosition(cSliderLineInVolume, WaveLineInVolumeLevel)
Case cCheckLineIn
If (GetGadgetState(cCheckLineIn) = #PB_Checkbox_Checked)
WaveLineInBoolean = 1
waveInStart_(WaveIn)
Else
WaveLineInBoolean = 0
waveInStop_(WaveIn)
GenerateWaveInSilence()
EndIf
Case cSliderMixerHarms
MasterHarmonicsLevel = GetSliderValue(cSliderMixerHarms)
SetEditValue(cEditMixerHarms, MasterHarmonicsLevel)
Case cEditMixerHarms
MasterHarmonicsLevel = GetEditValue(cEditMixerHarms)
SetSliderPosition(cSliderMixerHarms, MasterHarmonicsLevel)
Case cSliderMixerVolume
MasterVolumeLevel = GetSliderValue(cSliderMixerVolume)
SetEditValue(cEditMixerVolume, MasterVolumeLevel)
Case cEditMixerVolume
MasterVolumeLevel = GetEditValue(cEditMixerVolume)
SetSliderPosition(cSliderMixerVolume, MasterVolumeLevel)
EndSelect
EndSelect
;waveOutWrite_ (WaveOut, @WaveHdr1, SizeOf(WAVEHDR))
If (WaveLineInBoolean)
waveInAddBuffer_(WaveIn, @WaveRecHdr1, SizeOf(WAVEHDR))
EndIf
;Delay(5)
;waveOutWrite_ (WaveOut, @WaveHdr2, SizeOf(WAVEHDR))
If (WaveLineInBoolean)
waveInAddBuffer_(WaveIn, @WaveRecHdr2, SizeOf(WAVEHDR))
EndIf
;Delay(5)
;waveOutWrite_ (WaveOut, @WaveHdr3, SizeOf(WAVEHDR))
If (WaveLineInBoolean)
waveInAddBuffer_(WaveIn, @WaveRecHdr3, SizeOf(WAVEHDR))
EndIf
;Delay(5)
Wend
waveInStop_(WaveIn)
waveOutUnprepareHeader_(WaveOut, @WaveHdr1, SizeOf(WAVEHDR))
waveOutUnprepareHeader_(WaveOut, @WaveHdr2, SizeOf(WAVEHDR))
waveOutUnprepareHeader_(WaveOut, @WaveHdr3, SizeOf(WAVEHDR))
waveInUnprepareHeader_(WaveIn, @WaveRecHdr1, SizeOf(WAVEHDR))
waveInUnprepareHeader_(WaveIn, @WaveRecHdr2, SizeOf(WAVEHDR))
waveInUnprepareHeader_(WaveIn, @WaveRecHdr3, SizeOf(WAVEHDR))
waveInClose_ (WaveIn)
waveOutClose_ (WaveOut)
В звуке - щелчки. Как избавится от них? Писал пару лет назад по-приколу...
Отредактировано PSY (20.09.2023 11:07:15)