Jump to content

BASS Function Library (Sound and Music Functions)


BrettF
 Share

Recommended Posts

 

using latest Bass-UDF and lastest AutoIt Beta (v3.3.9.22):

#AutoIt3Wrapper_Autoit3Dir=c:\Program Files (x86)\AutoIt3\Beta
#AutoIt3Wrapper_UseX64=n

#include "Bass.au3"
#include "BassExt.au3"
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1)

Global $sFile = FileOpenDialog("Open...", "..\audiofiles", "playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)")
If @error Or Not FileExists($sFile) Then Exit


Global $iWidth = 522
Global $iHeight = 170

Global $hGui = GUICreate("FFT", $iWidth, $iHeight, -1, -1, BitOR($WS_SYSMENU, $WS_POPUP))
GUISetOnEvent($GUI_EVENT_CLOSE, "_EXIT")
_GDIPlus_Startup()
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
Global $hBmp_Buffer = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
Global $hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($hBmp_Buffer)
_GDIPlus_GraphicsSetSmoothingMode($hGfx_Buffer, 2)

Global $hBrush = _CreateFFTBrush(5, 5, $iWidth - 10, $iHeight - 10)

GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUISetState()

_BASS_Startup()
_BASS_EXT_Startup()
_BASS_Init(0, -1, 44100, 0, "")

Global $hStream = _BASS_StreamCreateFile(False, $sFile, 0, 0, $BASS_SAMPLE_FLOAT)
Global $aFFT = _BASS_EXT_CreateFFT(128, 5, 5, $iWidth - 10, $iHeight - 10, 1, True)

_BASS_ChannelPlay($hStream, True)



Global $iTimer = TimerInit()
While _BASS_ChannelIsActive($hStream)
    If TimerDiff($iTimer) > 20 Then
        $iTimer = TimerInit()
        _GDIPlus_GraphicsClear($hGfx_Buffer, 0xFF110022)

        _BASS_EXT_ChannelGetFFT($hStream, $aFFT, 2)
        If Not @error Then DllCall($ghGDIPDll, "int", "GdipFillPolygon", "handle", $hGfx_Buffer, "handle", $hBrush, "ptr", $aFFT[0], "int", $aFFT[1], "int", "FillModeAlternate")

        _GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
    EndIf
WEnd
_Exit()



Func _CreateFFTBrush($iX, $iY, $iWidth, $iHeight)
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    Local $hBrush_FFT = _GDIPlus_LineBrushCreate(0, 0, 0, $iHeight, 0, 0, 3)
    Local $aColors[5][2] = [[4]]
    $aColors[1][0] = 0xFFFF0000
    $aColors[1][1] = 0
    $aColors[2][0] = 0xFFFFAA00
    $aColors[2][1] = 0.25
    $aColors[3][0] = 0xFF00AAFF
    $aColors[3][1] = 0.5
    $aColors[4][0] = 0xFF00AAFF
    $aColors[4][1] = 1
    _GDIPlus_LineBrushSetPresetBlend($hBrush_FFT, $aColors)

    Local $hBrush_LED = _GDIPlus_LineBrushCreate(0, 0, 0, 4, 0xAA000000, 0x00000000, 0)

    _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush_FFT)
    _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush_LED)
    _GDIPlus_BrushDispose($hBrush_LED)
    _GDIPlus_BrushDispose($hBrush_FFT)
    _GDIPlus_GraphicsDispose($hContext)

    Local $hBrush = _GDIPlus_TextureCreate($hBitmap)
    _GDIPlus_BitmapDispose($hBitmap)

    DllCall($ghGDIPDll, "uint", "GdipTranslateTextureTransform", "hwnd", $hBrush, "float", $iX, "float", $iY, "int", 0)

    Return $hBrush
EndFunc   ;==>_CreateFFTBrush



Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_PAINT


Func _Exit()
    _BASS_StreamFree($hStream)
    _BASS_Free()

    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGfx_Buffer)
    _GDIPlus_BitmapDispose($hBmp_Buffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
EndFunc   ;==>_Exit

 

Thank you, eucalyptus. Many differences from >UEZ's script of November 6th.  Are these differences the result of coding using Autoit Beta v3.3.9.22 instead of release 3.3.8.1? If not, would you mind posting your version that is compatible with 3.3.8.1?

Link to comment
Share on other sites

to be compatible with 3.3.8.1, add these functions to the script:

; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iPixelFormat = $GDIP_PXF32ARGB, $iStride = 0, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "handle*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If $aResult[0] Then Return SetError(10, $aResult[0], 0)

    Return $aResult[6]
EndFunc   ;==>_GDIPlus_BitmapCreateFromScan0


; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_LineBrushCreate($nX1, $nY1, $nX2, $nY2, $iARGBClr1, $iARGBClr2, $iWrapMode = 0)
    Local $tPointF1, $tPointF2, $aResult
    $tPointF1 = DllStructCreate("float;float")
    $tPointF2 = DllStructCreate("float;float")
    DllStructSetData($tPointF1, 1, $nX1)
    DllStructSetData($tPointF1, 2, $nY1)
    DllStructSetData($tPointF2, 1, $nX2)
    DllStructSetData($tPointF2, 2, $nY2)
    $aResult = DllCall($ghGDIPDll, "int", "GdipCreateLineBrush", "struct*", $tPointF1, "struct*", $tPointF2, "uint", $iARGBClr1, "uint", $iARGBClr2, "int", $iWrapMode, "handle*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If $aResult[0] Then Return SetError(10, $aResult[0], 0)

    Return $aResult[6]
EndFunc   ;==>_GDIPlus_LineBrushCreate


; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_LineBrushSetPresetBlend($hLineGradientBrush, $aInterpolations)
    Local $iI, $iCount, $tColors, $tPositions, $aResult
    $iCount = $aInterpolations[0][0]
    $tColors = DllStructCreate("uint[" & $iCount & "]")
    $tPositions = DllStructCreate("float[" & $iCount & "]")
    For $iI = 1 To $iCount
        DllStructSetData($tColors, 1, $aInterpolations[$iI][0], $iI)
        DllStructSetData($tPositions, 1, $aInterpolations[$iI][1], $iI)
    Next
    $aResult = DllCall($ghGDIPDll, "int", "GdipSetLinePresetBlend", "handle", $hLineGradientBrush, "struct*", $tColors, "struct*", $tPositions, "int", $iCount)
    If @error Then Return SetError(@error, @extended, False)
    If $aResult[0] Then Return SetError(10, $aResult[0], False)

    Return True
EndFunc   ;==>_GDIPlus_LineBrushSetPresetBlend


; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_TextureCreate($hImage, $iWrapMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "int", "GdipCreateTexture", "handle", $hImage, "int", $iWrapMode, "handle*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If $aResult[0] Then Return SetError(10, $aResult[0], 0)

    Return $aResult[3]
EndFunc   ;==>_GDIPlus_TextureCreate
Link to comment
Share on other sites

Thank you, eucalyptus.  I added the functions and it compiles without errors. But when I run it I get a blank bluish-black rectangle. When I run it from SciTE I get the following error, which must be erroneous because I have only the 32-bit AutoIt installed.

 

>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "D:Documents!Current ProjectssjecoattrainingSound visualizerEuk-approved FFT.au3" /UserParams   
+>21:19:30 Starting AutoIt3Wrapper v.2.1.2.9    Environment(Language:0409  Keyboard:00000409  OS:WIN_8/  CPU:X64 OS:X64)
>Running AU3Check (1.54.22.0)  from:C:Program Files (x86)AutoIt3
+>21:19:30 AU3Check ended.rc:0
>Running:(3.3.8.1):C:Program Files (x86)AutoIt3autoit3.exe "D:Documents!Current ProjectssjecoattrainingSound visualizerEuk-approved FFT.au3"   
--> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop

!Bass.dll is for 32bit only!
Run/compile Script at 32bit
+>21:19:33 AutoIt3.exe ended.rc:0
>Exit code: 0    Time: 3.742

 

I may not have Bass UDF v10.  Most of the files in my Bass UDF folder are dated Dec. 2011. When I click on your "Bass UDF v10 download" link the browser eventually says it can't load the page. "http://www.autoit.de/" is also dead, at least from here in the USA.

EDIT: Thank you, Wakillon.  The link you provided got me v10, and now the script changes provided by Eukalyptus works great!

Edited by timmy2
Link to comment
Share on other sites

For the sake of closure here's Eukalyptus' FTT Visualizer script that's compatible with AutoIt v3.3.8.1. 

Anyone willing to tell me how to modify it so it'll display audio played by another AutoIt script using SoundPlay? In other words, I need it to display the FFT of audio being played by another script.

The reason? I want to change the audio level at specific times in my main script and SoundSetWaveVolume only changes the volume for the script that's playing the audio file. It's either that or I'll need to use IPC to send volume changes to this script, and that's way beyond my skill level.

#AutoIt3Wrapper_UseX64=n

#include "Bass.au3"
#include "BassExt.au3"
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1)

Global $sFile = FileOpenDialog("Open...", "..\audiofiles", "playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)")
If @error Or Not FileExists($sFile) Then Exit


Global $iWidth = 522
Global $iHeight = 170

Global $hGui = GUICreate("FFT", $iWidth, $iHeight, -1, -1, BitOR($WS_SYSMENU, $WS_POPUP))
GUISetOnEvent($GUI_EVENT_CLOSE, "_EXIT")
_GDIPlus_Startup()
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
Global $hBmp_Buffer = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
Global $hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($hBmp_Buffer)
_GDIPlus_GraphicsSetSmoothingMode($hGfx_Buffer, 2)

Global $hBrush = _CreateFFTBrush(5, 5, $iWidth - 10, $iHeight - 10)

GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUISetState()

_BASS_Startup()
_BASS_EXT_Startup()
_BASS_Init(0, -1, 44100, 0, "")

Global $hStream = _BASS_StreamCreateFile(False, $sFile, 0, 0, $BASS_SAMPLE_FLOAT)
Global $aFFT = _BASS_EXT_CreateFFT(128, 5, 5, $iWidth - 10, $iHeight - 10, 1, True)

_BASS_ChannelPlay($hStream, True)



Global $iTimer = TimerInit()
While _BASS_ChannelIsActive($hStream)
    If TimerDiff($iTimer) > 20 Then
        $iTimer = TimerInit()
        _GDIPlus_GraphicsClear($hGfx_Buffer, 0xFF110022)

        _BASS_EXT_ChannelGetFFT($hStream, $aFFT, 2)
        If Not @error Then DllCall($ghGDIPDll, "int", "GdipFillPolygon", "handle", $hGfx_Buffer, "handle", $hBrush, "ptr", $aFFT[0], "int", $aFFT[1], "int", "FillModeAlternate")

        _GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
    EndIf
WEnd
_Exit()



Func _CreateFFTBrush($iX, $iY, $iWidth, $iHeight)
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    Local $hBrush_FFT = _GDIPlus_LineBrushCreate(0, 0, 0, $iHeight, 0, 0, 3)
    Local $aColors[5][2] = [[4]]
    $aColors[1][0] = 0xFFFF0000
    $aColors[1][1] = 0
    $aColors[2][0] = 0xFFFFAA00
    $aColors[2][1] = 0.25
    $aColors[3][0] = 0xFF00AAFF
    $aColors[3][1] = 0.5
    $aColors[4][0] = 0xFF00AAFF
    $aColors[4][1] = 1
    _GDIPlus_LineBrushSetPresetBlend($hBrush_FFT, $aColors)

    Local $hBrush_LED = _GDIPlus_LineBrushCreate(0, 0, 0, 4, 0xAA000000, 0x00000000, 0)

    _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush_FFT)
    _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iWidth, $iHeight, $hBrush_LED)
    _GDIPlus_BrushDispose($hBrush_LED)
    _GDIPlus_BrushDispose($hBrush_FFT)
    _GDIPlus_GraphicsDispose($hContext)

    Local $hBrush = _GDIPlus_TextureCreate($hBitmap)
    _GDIPlus_BitmapDispose($hBitmap)

    DllCall($ghGDIPDll, "uint", "GdipTranslateTextureTransform", "hwnd", $hBrush, "float", $iX, "float", $iY, "int", 0)

    Return $hBrush
EndFunc   ;==>_CreateFFTBrush



Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_PAINT

; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iPixelFormat = $GDIP_PXF32ARGB, $iStride = 0, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "handle*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If $aResult[0] Then Return SetError(10, $aResult[0], 0)

    Return $aResult[6]
EndFunc   ;==>_GDIPlus_BitmapCreateFromScan0


; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_LineBrushCreate($nX1, $nY1, $nX2, $nY2, $iARGBClr1, $iARGBClr2, $iWrapMode = 0)
    Local $tPointF1, $tPointF2, $aResult
    $tPointF1 = DllStructCreate("float;float")
    $tPointF2 = DllStructCreate("float;float")
    DllStructSetData($tPointF1, 1, $nX1)
    DllStructSetData($tPointF1, 2, $nY1)
    DllStructSetData($tPointF2, 1, $nX2)
    DllStructSetData($tPointF2, 2, $nY2)
    $aResult = DllCall($ghGDIPDll, "int", "GdipCreateLineBrush", "struct*", $tPointF1, "struct*", $tPointF2, "uint", $iARGBClr1, "uint", $iARGBClr2, "int", $iWrapMode, "handle*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If $aResult[0] Then Return SetError(10, $aResult[0], 0)

    Return $aResult[6]
EndFunc   ;==>_GDIPlus_LineBrushCreate


; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_LineBrushSetPresetBlend($hLineGradientBrush, $aInterpolations)
    Local $iI, $iCount, $tColors, $tPositions, $aResult
    $iCount = $aInterpolations[0][0]
    $tColors = DllStructCreate("uint[" & $iCount & "]")
    $tPositions = DllStructCreate("float[" & $iCount & "]")
    For $iI = 1 To $iCount
        DllStructSetData($tColors, 1, $aInterpolations[$iI][0], $iI)
        DllStructSetData($tPositions, 1, $aInterpolations[$iI][1], $iI)
    Next
    $aResult = DllCall($ghGDIPDll, "int", "GdipSetLinePresetBlend", "handle", $hLineGradientBrush, "struct*", $tColors, "struct*", $tPositions, "int", $iCount)
    If @error Then Return SetError(@error, @extended, False)
    If $aResult[0] Then Return SetError(10, $aResult[0], False)

    Return True
EndFunc   ;==>_GDIPlus_LineBrushSetPresetBlend


; #FUNCTION# ====================================================================================================================
; Author ........: Authenticity
; Modified.......: UEZ
; ===============================================================================================================================
Func _GDIPlus_TextureCreate($hImage, $iWrapMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "int", "GdipCreateTexture", "handle", $hImage, "int", $iWrapMode, "handle*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    If $aResult[0] Then Return SetError(10, $aResult[0], 0)

    Return $aResult[3]
EndFunc   ;==>_GDIPlus_TextureCreate



Func _Exit()
    _BASS_StreamFree($hStream)
    _BASS_Free()

    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGfx_Buffer)
    _GDIPlus_BitmapDispose($hBmp_Buffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
EndFunc   ;==>_Exit
Link to comment
Share on other sites

If I understand right you want a script to communicate with another, if it can use the UDF InterProcess.au3

Link to comment
Share on other sites

  • 1 month later...

Is it possible to make a equalizer with bass?

I've got a streaming radio program and I got a lot of request of a equalizer.

I'm looking already for many hours on the internet to find a good sample/sourcode but the nearest thing I kan find is the "Split-Lo_Mid_Hi-Mixer.au3" example.

So my question is, is it possible and how?

Link to comment
Share on other sites

  • 2 weeks later...

The latest version of the BASS.dll is 2.4.10 and was last updated in February of 2013. Although some of the add-on DLLs have been updated since then.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

This is a snippet of code that should get you started, it pulls the track and title info from a music file.

#include "Bass.au3"                 ; http://www.autoitscript.com/forum/index.php?showtopic=140594
#include "BassTags.au3"             ; http://www.autoitscript.com/forum/index.php?showtopic=83481
_Bass_Startup("Bass.dll") ; change path to where you have the dll, this has to be run first
_Bass_Tags_Startup("BassTags.dll")  ; then this one
_BASS_Init(0, -1, 44100, 0, "") 
$hMusic = _BASS_StreamCreateFile(False,<full path to music file>, 0, 0, $BASS_STREAM_DECODE) ; open a handle to the music file
$sTrackInfo = _Bass_Tags_Read($hMusic, "%IFV2(%TRCK,%TRCK,00)")  ; this reads the v2 track info from the file
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sTrackInfo = ' & $sTrackInfo & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$sTitle = _Bass_Tags_Read($hMusic, "%IFV2(%TITL,%TITL,x)") ; find the title info from the ID3 tags
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sTitle = ' & $sTitle & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

_IsPressed

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

I just wanted to say thanks for the combined effort of everyone here to make this UDF into such a multifunctional gem.

I just finished writing a little script for myself that reads recipe instructions aloud using TTS and activates the next step of the recipe by detecting 3 claps/finger snaps/etc... in a row. an utterly fantastic little addition to any kitchen which wouldn't have been possible without this UDF.

You're appreciated, thank you!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...