home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / Wave_Gener2149494112009.psc / WaveGenerator / Generator.cls < prev    next >
Text File  |  2009-03-31  |  3KB  |  89 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "Generator"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = False
  10. Option Explicit
  11. ' GENERATOR CLASS
  12. ' Generates the changing value for all oscillators
  13.  
  14. ' Event raised at the end of each cycle
  15. Public Event CycleSync(ByRef Angle!)
  16. Attribute CycleSync.VB_Description = "Fires at the end of each full cycle"
  17.  
  18. ' Public properties
  19. Public Angle!
  20. Attribute Angle.VB_VarDescription = "Waveform angle (0 to 2pi)"
  21. Public Frequency!
  22. Attribute Frequency.VB_VarDescription = "Repeat rate of generator"
  23. Public Value!
  24. Attribute Value.VB_VarDescription = "Current waveform value per Frequency and Shape"
  25. Public Shape As WaveType
  26. Attribute Shape.VB_VarDescription = "Determines waveform option"
  27.  
  28. ' Angle rises from 0 to MAX (2 * Pi) in sawtooth fashion
  29. Private Const MAX! = 6.28318530717958
  30. Attribute MAX.VB_VarDescription = "2 * Pi"
  31. ' Sample rate setting
  32. Private Const RATE! = MAX / 1000
  33. Attribute RATE.VB_VarDescription = "Increment factor"
  34.  
  35. Public Sub Tick()
  36. Attribute Tick.VB_Description = "Increments Angle per Frequency"
  37. ' Waveform incrementing routine
  38.  
  39.   ' Increment angle
  40.   Angle = Angle + (RATE * Frequency)
  41.   
  42.   ' Test for end of cycle (user may adjust Angle from event)
  43.   If Angle > MAX Then
  44.     'Angle = 0
  45.     Angle = Angle - MAX
  46.     RaiseEvent CycleSync(Angle)
  47.   End If
  48.   
  49.   ' Determine wave Value per selected shape
  50.   Select Case Shape
  51.   Case WaveType.wgSinusoidal
  52.       Value = Sin(Angle) * MAX
  53.       
  54.   Case WaveType.wgTriangular
  55.       ' First quarter: value rises from 0 to MAX
  56.       If Angle < (MAX * 0.25) Then
  57.           Value = Angle * 4
  58.       ' Second & third quarter: value falls from MAX to -MAX
  59.       ElseIf Angle > (MAX * 0.75) Then
  60.           Value = (Angle - MAX) * 4
  61.       ' Fourth quarter: value rises from -MAX to 0
  62.       Else
  63.           Value = (MAX + MAX) - (Angle * 4)
  64.       End If
  65.   
  66.   Case WaveType.wgSquare
  67.       ' First half: value is at MAX
  68.       If Angle < (MAX / 2) Then
  69.         Value = MAX
  70.       ' Second half: value is at -MAX
  71.       Else
  72.         Value = -MAX
  73.       End If
  74.   
  75.   Case Else ' WaveType.SawTooth
  76.       Value = Angle
  77.   End Select
  78.  
  79. End Sub
  80.  
  81. Friend Property Get UnitValue() As Single
  82. Attribute UnitValue.VB_Description = "Returns Angle in the range of -1 to 1"
  83.   ' Returns angle in the range of -1 to 1
  84.   UnitValue = Value / MAX
  85. End Property
  86.  
  87.  
  88.  
  89.