Question : How do I stop a PlaySound call that continues output outside the logic of the program that called it?

Below code executes correctly up to the 1st instance that should produce sound.  That is the 12th bar of the 5th cycle.  Problem is that once the sound is called the 1st time . . . it continues to sound every bar thereafter, even though the code shows it is clearly a one time event.

For C = 1 To CycPhase
        iCycStart = (AncDyBar + 1)
        iCycEnd = (AncDyBar + (CycLength - 1))      
       pBarCnt = 0
        '*********** Next I Sequence **************
        For i = iCycStart To iCycEnd
            pBarCnt = pBarCnt + 1
            '        PlayNow = PlaySound(Null, 0, 0)  'Commented out because does not work
            If pBarCnt = 12 Then
                v1(z1, i) = Bar(2, i)
                If C = 5 Then     '5th cycle
                    PlayNow = PlaySound(A, p, SND_FILENAME Or SND_ASYNC Or SND_NOWAIT)
                End If
            End If
        Next i
        AncDyBar = i
    Next C

I've tried SndPurge and the Null string as shown commented out above.  The null string stops the dll from working  altogether and the SndPurge does nothing . . . and nothing stops a repeating call to the wav file.  Below is further information to help.

Public Declare Function PlaySound _
               Lib "winmm.dll" _
               Alias "PlaySoundA" (ByVal lpszName As String, _
                                   ByVal hModule As Long, _
                                   ByVal dwFlags As Long) As Long
Public Const SND_FILENAME = &H20000     'name is a file name
Public Const SND_ASYNC = &H1                 'play asynchronously
Public Const SND_NOWAIT = &H2000          'don't wait if the driver is busy
Public Const SND_PURGE = &H40                'stop sound (longer wav)

Thank You,
spc909

Answer : How do I stop a PlaySound call that continues output outside the logic of the program that called it?

how about

PlaySound(vbNullString, 0, 0)
Random Solutions  
 
programming4us programming4us