mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			138 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
EnableExplicit
 | 
						|
 | 
						|
; ##################################################### Includes ####################################################
 | 
						|
 | 
						|
XIncludeFile "Includes/AudioOut.pbi"
 | 
						|
 | 
						|
; ##################################################### Prototypes ##################################################
 | 
						|
 | 
						|
; ##################################################### Structures ##################################################
 | 
						|
 | 
						|
; ##################################################### Constants ###################################################
 | 
						|
 | 
						|
#Samplerate = 44100
 | 
						|
 | 
						|
; ##################################################### Structures ##################################################
 | 
						|
 | 
						|
Structure Main
 | 
						|
  *AudioOut
 | 
						|
  
 | 
						|
  Quit.i
 | 
						|
EndStructure
 | 
						|
Global Main.Main
 | 
						|
 | 
						|
Structure Main_Window
 | 
						|
  ID.i
 | 
						|
  
 | 
						|
  TrackBar.i [10]
 | 
						|
EndStructure
 | 
						|
Global Main_Window.Main_Window
 | 
						|
 | 
						|
; ##################################################### Variables ###################################################
 | 
						|
 | 
						|
Global Frequency.d = 1000
 | 
						|
Global Amplitude.d = 0.25
 | 
						|
 | 
						|
; ##################################################### Procedures ##################################################
 | 
						|
 | 
						|
Procedure Main_Window_Open()
 | 
						|
  Main_Window\ID = OpenWindow(#PB_Any, 0, 0, 800, 100, "AudioOut Example", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
 | 
						|
  
 | 
						|
  If Main_Window\ID
 | 
						|
    
 | 
						|
    Main_Window\TrackBar[0] = TrackBarGadget(#PB_Any, 10, 10, 780, 30, 0, 20000)
 | 
						|
    SetGadgetState(Main_Window\TrackBar[0], Frequency)
 | 
						|
    
 | 
						|
    Main_Window\TrackBar[1] = TrackBarGadget(#PB_Any, 10, 40, 780, 30, 0, 1000)
 | 
						|
    SetGadgetState(Main_Window\TrackBar[1], Amplitude*1000)
 | 
						|
    
 | 
						|
  EndIf
 | 
						|
EndProcedure
 | 
						|
 | 
						|
Procedure Notifier_CallBack(*AudioOut)
 | 
						|
  Protected *Temp, Temp_Size.i
 | 
						|
  Static Rotation.d
 | 
						|
  
 | 
						|
  While AudioOut::GetQueuedBlocks(*AudioOut) <= 3
 | 
						|
    
 | 
						|
    Temp_Size = AudioOut::GetBufferBlocksize(*AudioOut)
 | 
						|
    If Temp_Size > 0
 | 
						|
      *Temp = AllocateMemory(Temp_Size)
 | 
						|
      
 | 
						|
      Define Left.d, Right.d, i
 | 
						|
      For i = 0 To Temp_Size / 4 - 1
 | 
						|
        Left = Sin(Rotation) * Amplitude
 | 
						|
        Right = Sin(Rotation) * Amplitude
 | 
						|
        
 | 
						|
        PokeW(*Temp + i*4    , Left*32767)
 | 
						|
        PokeW(*Temp + i*4 + 2, Right*32767)
 | 
						|
        
 | 
						|
        Rotation + 2.0*#PI / #Samplerate * Frequency
 | 
						|
      Next
 | 
						|
      
 | 
						|
      AudioOut::Write_Data(Main\AudioOut, *Temp, Temp_Size)
 | 
						|
      
 | 
						|
      FreeMemory(*Temp)
 | 
						|
    EndIf
 | 
						|
    
 | 
						|
  Wend
 | 
						|
EndProcedure
 | 
						|
 | 
						|
; ##################################################### Initialisation ##############################################
 | 
						|
 | 
						|
Main_Window_Open()
 | 
						|
 | 
						|
AudioOut::GetDevices()
 | 
						|
 | 
						|
ForEach AudioOut::Device()
 | 
						|
  Debug PeekS(AudioOut::@Device()\szPname)
 | 
						|
Next
 | 
						|
 | 
						|
Main\AudioOut = AudioOut::Initialize(#WAVE_MAPPER, #Samplerate, 2, 16, @Notifier_CallBack())
 | 
						|
 | 
						|
If Not Main\AudioOut
 | 
						|
  Debug AudioOut::GetError()
 | 
						|
  End
 | 
						|
EndIf
 | 
						|
 | 
						|
Notifier_CallBack(Main\AudioOut)
 | 
						|
 | 
						|
; ##################################################### Main ########################################################
 | 
						|
 | 
						|
Repeat
 | 
						|
  
 | 
						|
  Repeat
 | 
						|
    Select WaitWindowEvent(100)
 | 
						|
      Case #PB_Event_Gadget
 | 
						|
        Select EventGadget()
 | 
						|
          Case Main_Window\TrackBar[0]
 | 
						|
            Frequency = GetGadgetState(Main_Window\TrackBar[0])
 | 
						|
            Debug Frequency
 | 
						|
            
 | 
						|
          Case Main_Window\TrackBar[1]
 | 
						|
            Amplitude = GetGadgetState(Main_Window\TrackBar[1]) / 1000
 | 
						|
            
 | 
						|
        EndSelect
 | 
						|
        
 | 
						|
      Case #PB_Event_CloseWindow
 | 
						|
        Main\Quit = #True
 | 
						|
        
 | 
						|
      Case 0
 | 
						|
        Break
 | 
						|
    EndSelect
 | 
						|
  ForEver
 | 
						|
  
 | 
						|
Until Main\Quit
 | 
						|
 | 
						|
; ##################################################### End #########################################################
 | 
						|
 | 
						|
AudioOut::Deinitialize(Main\AudioOut)
 | 
						|
 | 
						|
; IDE Options = PureBasic 5.30 Beta 2 (Windows - x64)
 | 
						|
; CursorPosition = 109
 | 
						|
; FirstLine = 79
 | 
						|
; Folding = -
 | 
						|
; EnableUnicode
 | 
						|
; EnableThread
 | 
						|
; EnableXP
 |