Код:
#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)