DirectSound functions

Share your advanced PureBasic knowledge/code with the community.
User avatar
Joakim Christiansen
Addict
Addict
Posts: 2452
Joined: Wed Dec 22, 2004 4:12 pm
Location: Norway
Contact:

Post by Joakim Christiansen »

Sweet! :wink:
I like logic, hence I dislike humans but love computers.
ricardo
Addict
Addict
Posts: 2438
Joined: Fri Apr 25, 2003 7:06 pm
Location: Argentina

Post by ricardo »

inc. wrote:
tomijan wrote:In above post should be "not nothing more", sory for mistake :oops:
tom
After investigating some time in Dshow etc. I had again a look at your code example.
The problem was that you did fill a memory buffer using the whole soundfile data where the streaming process itself just reads from that "big" memoryamount the chunks for buffering and serving to the DSoundBuffer. Honestly by this you did left the sense of a true soundfile streaming approach.

So the simple fix is just to read the chunks into the soundbuffer within the refilling loop DIRECTLY from the Soundfile and not from a previous generated full-soundfile-size temp. memoryspace.

Here's the corrected code :)

Edit: And again the problem of the forum engine when posting codes :( .... parts will be just cut off or mixed. This code still is the same size as the one above :?

Heres the code as file: StreamingViaDirectSound.pb
This example is fine, but (at least for me) prsents the SAME problem that the other ones: introduce some pops and ticks.

Im looking for a way to have access to the data being played so i can process it in real time, but until now all this examples (without doing modifications) intorduces some pops and ticks. :cry:

Any suggestion?
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

DirectSound Get Error String

Post by oryaaaaa »

DirectSound Error string return tips

Code: Select all

Procedure.s GetErrorDirectSound(result.l)
  Select result
    Case -2062548992
      ProcedureReturn "ASSERTION!"
    Case -2062548891
      ProcedureReturn "STORM_ERROR_BAD_ARGUMENT"
    Case -2062548890
      ProcedureReturn "STORM_ERROR_GAME_ALREADY_STARTED"
    Case -2062548889
      ProcedureReturn "STORM_ERROR_GAME_FULL"
    Case -2062548888
      ProcedureReturn "STORM_ERROR_GAME_NOT_FOUND"
    Case -2062548887
      ProcedureReturn "STORM_ERROR_GAME_TERMINATED"
    Case -2062548886
      ProcedureReturn "STORM_ERROR_INVALID_PLAYER"
    Case -2062548885
      ProcedureReturn "STORM_ERROR_NO_MESSAGES_WAITING"
    Case -2062548884
      ProcedureReturn "STORM_ERROR_NOT_ARCHIVE"
    Case -2062548883
      ProcedureReturn "STORM_ERROR_NOT_ENOUGH_ARGUMENTS"
    Case -2062548882
      ProcedureReturn "STORM_ERROR_NOT_IMPLEMENTED"
    Case -2062548881
      ProcedureReturn "STORM_ERROR_NOT_IN_ARCHIVE"
    Case -2062548880
      ProcedureReturn "STORM_ERROR_NOT_IN_GAME"
    Case -2062548879
      ProcedureReturn "STORM_ERROR_NOT_INITIALIZED"
    Case -2062548878
      ProcedureReturn "STORM_ERROR_NOT_PLAYING"
    Case -2062548877
      ProcedureReturn "STORM_ERROR_NOT_REGISTERED"
    Case -2062548876
      ProcedureReturn "STORM_ERROR_REQUIRES_CODEC"
    Case -2062548875
      ProcedureReturn "STORM_ERROR_REQUIRES_CODEC"
    Case -2062548874
      ProcedureReturn "STORM_ERROR_REQUIRES_CODEC"
    Case -2062548873
      ProcedureReturn "STORM_ERROR_REQUIRES_UPGRADE"
    Case -2062548872
      ProcedureReturn "STORM_ERROR_STILL_ACTIVE"
    Case -2062548871
      ProcedureReturn "STORM_ERROR_VERSION_MISMATCH"
    Case -2062548870
      ProcedureReturn "Attempt to free a memory block which is not currently allocated."
    Case -2062548869
      ProcedureReturn "This memory block has been corrupted by an out-of-bounds memory write."
    Case -2062548868
      ProcedureReturn "Attempt to free an invalid memory block."
    Case -2062548867
      ProcedureReturn "This function call is invalid because the memory manager is not currently initialized."
    Case -2062548866
      ProcedureReturn "A block of memory was allocated but never freed."
    Case -2062548865
      ProcedureReturn "A resource handle was obtained but never released."
    Case -2062548864
      ProcedureReturn "Attempt to access beyond the bounds of an array."
    Case -2062548863
      ProcedureReturn "Attempt to free a NULL pointer."
    Case -2062548862
      ProcedureReturn "The CD keys do not match."
    Case -2062548861
      ProcedureReturn "The file data is corrupt."
    Case -2062548860
      ProcedureReturn "FATAL ERROR!"
    Case -2062548859
      ProcedureReturn "The requested game type is temporarily unavailable."
    Case -2005532667
      ProcedureReturn "DDERR_ALREADYINITIALIZED"
    Case -2005532662
      ProcedureReturn "DDERR_CANNOTATTACHSURFACE"
    Case -2005532652
      ProcedureReturn "DDERR_CANNOTDETACHSURFACE"
    Case -2005532632
      ProcedureReturn "DDERR_CURRENTLYNOTAVAIL"
    Case -2005532617
      ProcedureReturn "DDERR_EXCEPTION"
    Case -2005532582
      ProcedureReturn "DDERR_HEIGHTALIGN"
    Case -2005532577
      ProcedureReturn "DDERR_INCOMPATIBLEPRIMARY"
    Case -2005532572
      ProcedureReturn "DDERR_INVALIDCAPS"
    Case -2005532562
      ProcedureReturn "DDERR_INVALIDCLIPLIST"
    Case -2005532552
      ProcedureReturn "DDERR_INVALIDMODE"
    Case -2005532542
      ProcedureReturn "DDERR_INVALIDOBJECT"
    Case -2005532527
      ProcedureReturn "DDERR_INVALIDPIXELFORMAT"
    Case -2005532522
      ProcedureReturn "DDERR_INVALIDRECT"
    Case -2005532512
      ProcedureReturn "DDERR_LOCKEDSURFACES"
    Case -2005532502
      ProcedureReturn "DDERR_NO3D"
    Case -2005532492
      ProcedureReturn "DDERR_NOALPHAHW"
    Case -2005532467
      ProcedureReturn "DDERR_NOCLIPLIST"
    Case -2005532462
      ProcedureReturn "DDERR_NOCOLORCONVHW"
    Case -2005532460
      ProcedureReturn "DDERR_NOCOOPERATIVELEVELSET"
    Case -2005532457
      ProcedureReturn "DDERR_NOCOLORKEY"
    Case -2005532452
      ProcedureReturn "DDERR_NOCOLORKEYHW"
    Case -2005532450
      ProcedureReturn "DDERR_NODIRECTDRAWSUPPORT"
    Case -2005532447
      ProcedureReturn "DDERR_NOEXCLUSIVEMODE"
    Case -2005532442
      ProcedureReturn "DDERR_NOFLIPHW"
    Case -2005532432
      ProcedureReturn "DDERR_NOGDI"
    Case -2005532422
      ProcedureReturn "DDERR_NOMIRRORHW"
    Case -2005532417
      ProcedureReturn "DDERR_NOTFOUND"
    Case -2005532412
      ProcedureReturn "DDERR_NOOVERLAYHW"
    Case -2005532392
      ProcedureReturn "DDERR_NORASTEROPHW"
    Case -2005532382
      ProcedureReturn "DDERR_NOROTATIONHW"
    Case -2005532362
      ProcedureReturn "DDERR_NOSTRETCHHW"
    Case -2005532356
      ProcedureReturn "DDERR_NOT4BITCOLOR"
    Case -2005532355
      ProcedureReturn "DDERR_NOT4BITCOLORINDEX"
    Case -2005532352
      ProcedureReturn "DDERR_NOT8BITCOLOR"
    Case -2005532342
      ProcedureReturn "DDERR_NOTEXTUREHW"
    Case -2005532337
      ProcedureReturn "DDERR_NOVSYNCHW"
    Case -2005532332
      ProcedureReturn "DDERR_NOZBUFFERHW"
    Case -2005532322
      ProcedureReturn "DDERR_NOZOVERLAYHW"
    Case -2005532312
      ProcedureReturn "DDERR_OUTOFCAPS"
    Case -2005532292
      ProcedureReturn "DDERR_OUTOFVIDEOMEMORY"
    Case -2005532290
      ProcedureReturn "DDERR_OVERLAYCANTCLIP"
    Case -2005532288
      ProcedureReturn "DDERR_OVERLAYCOLORKEYONLYONEACTIVE"
    Case -2005532285
      ProcedureReturn "DDERR_PALETTEBUSY"
    Case -2005532272
      ProcedureReturn "DDERR_COLORKEYNOTSET"
    Case -2005532262
      ProcedureReturn "DDERR_SURFACEALREADYATTACHED"
    Case -2005532252
      ProcedureReturn "DDERR_SURFACEALREADYDEPENDENT"
    Case -2005532242
      ProcedureReturn "DDERR_SURFACEBUSY"
    Case -2005532237
      ProcedureReturn "DDERR_CANTLOCKSURFACE"
    Case -2005532232
      ProcedureReturn "DDERR_SURFACEISOBSCURED"
    Case -2005532222
      ProcedureReturn "DDERR_SURFACELOST"
    Case -2005532212
      ProcedureReturn "DDERR_SURFACENOTATTACHED"
    Case -2005532202
      ProcedureReturn "DDERR_TOOBIGHEIGHT"
    Case -2005532192
      ProcedureReturn "DDERR_TOOBIGSIZE"
    Case -2005532182
      ProcedureReturn "DDERR_TOOBIGWIDTH"
    Case -2005532162
      ProcedureReturn "DDERR_UNSUPPORTEDFORMAT"
    Case -2005532152
      ProcedureReturn "DDERR_UNSUPPORTEDMASK"
    Case -2005532135
      ProcedureReturn "DDERR_VERTICALBLANKINPROGRESS"
    Case -2005532132
      ProcedureReturn "DDERR_WASSTILLDRAWING"
    Case -2005532112
      ProcedureReturn "DDERR_XALIGN"
    Case -2005532111
      ProcedureReturn "DDERR_INVALIDDIRECTDRAWGUID"
    Case -2005532110
      ProcedureReturn "DDERR_DIRECTDRAWALREADYCREATED"
    Case -2005532109
      ProcedureReturn "DDERR_NODIRECTDRAWHW"
    Case -2005532108
      ProcedureReturn "DDERR_PRIMARYSURFACEALREADYEXISTS"
    Case -2005532107
      ProcedureReturn "DDERR_NOEMULATION"
    Case -2005532106
      ProcedureReturn "DDERR_REGIONTOOSMALL"
    Case -2005532105
      ProcedureReturn "DDERR_CLIPPERISUSINGHWND"
    Case -2005532104
      ProcedureReturn "DDERR_NOCLIPPERATTACHED"
    Case -2005532103
      ProcedureReturn "DDERR_NOHWND"
    Case -2005532102
      ProcedureReturn "DDERR_HWNDSUBCLASSED"
    Case -2005532101
      ProcedureReturn "DDERR_HWNDALREADYSET"
    Case -2005532100
      ProcedureReturn "DDERR_NOPALETTEATTACHED"
    Case -2005532099
      ProcedureReturn "DDERR_NOPALETTEHW"
    Case -2005532098
      ProcedureReturn "DDERR_BLTFASTCANTCLIP"
    Case -2005532097
      ProcedureReturn "DDERR_NOBLTHW"
    Case -2005532096
      ProcedureReturn "DDERR_NODDROPSHW"
    Case -2005532095
      ProcedureReturn "DDERR_OVERLAYNOTVISIBLE"
    Case -2005532094
      ProcedureReturn "DDERR_NOOVERLAYDEST"
    Case -2005532093
      ProcedureReturn "DDERR_INVALIDPOSITION"
    Case -2005532092
      ProcedureReturn "DDERR_NOTAOVERLAYSURFACE"
    Case -2005532091
      ProcedureReturn "DDERR_EXCLUSIVEMODEALREADYSET"
    Case -2005532090
      ProcedureReturn "DDERR_NOTFLIPPABLE"
    Case -2005532089
      ProcedureReturn "DDERR_CANTDUPLICATE"
    Case -2005532088
      ProcedureReturn "DDERR_NOTLOCKED"
    Case -2005532087
      ProcedureReturn "DDERR_CANTCREATEDC"
    Case -2005532086
      ProcedureReturn "DDERR_NODC"
    Case -2005532085
      ProcedureReturn "DDERR_WRONGMODE"
    Case -2005532084
      ProcedureReturn "DDERR_IMPLICITLYCREATED"
    Case -2005532083
      ProcedureReturn "DDERR_NOTPALETTIZED"
    Case -2005532082
      ProcedureReturn "DDERR_UNSUPPORTEDMODE"
    Case -2005532081
      ProcedureReturn "DDERR_NOMIPMAPHW"
    Case -2005532080
      ProcedureReturn "DDERR_INVALIDSURFACETYPE"
    Case -2005532052
      ProcedureReturn "DDERR_DCALREADYCREATED"
    Case -2005532032
      ProcedureReturn "DDERR_CANTPAGELOCK"
    Case -2005532012
      ProcedureReturn "DDERR_CANTPAGEUNLOCK"
    Case -2005531992
      ProcedureReturn "DDERR_NOTPAGELOCKED"
    Case -2005401590
      ProcedureReturn "DSERR_ALLOCATED"
    Case -2005401570
      ProcedureReturn "DSERR_CONTROLUNAVAIL"
    Case -2005401550
      ProcedureReturn "DSERR_INVALIDCALL"
    Case -2005401530
      ProcedureReturn "DSERR_PRIOLEVELNEEDED"
    Case -2005401500
      ProcedureReturn "DSERR_BADFORMAT"
    Case -2005401480
      ProcedureReturn "DSERR_NODRIVER"
    Case -2005401470
      ProcedureReturn "DSERR_ALREADYINITIALIZED"
    Case -2005401450
      ProcedureReturn "DSERR_BUFFERLOST"
    Case -2005401440
      ProcedureReturn "DSERR_OTHERAPPHASPRIO"
    Case -2005401430
      ProcedureReturn "DSERR_UNINITIALIZED" 
  EndSelect
  ProcedureReturn "Not DirectSoundError"
EndProcedure
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

DirectSound Stream Play

Post by oryaaaaa »

DirectSound Multi Buffered Streaming Play
"error.pbi" is before post code.

Code: Select all

;--------------------------------------------------------------
;-  DirectSound Streaming Play
;   Tomijan 2006 
;   PB4 (Single Loop only)
;   
;   oryaaaa 2009
;   PB4.4 Beta3 (Multi Buffered )
;
;--------------------------------------------------------------
;

;XIncludeFile "error.pbi"

#BLOCKNUM = 4;
#DSBCAPS_LOCSOFTWARE   = $8 
#DSBCAPS_CTRLFREQUENCY = $20 
#DSBCAPS_CTRLVOLUME    = $80 
#DSBCAPS_CTRLPAN       = $40
#DSBCAPS_CTRLPOSITIONNOTIFY = $00000100
#DSBCAPS_GETCURRENTPOSITION2 =$00010000
#DSBCAPS_GLOBALFOCUS = $00008000
#DSBCAPS_PRIMARYBUFFER = $1;

#DSSCL_EXCLUSIVE = 3  
#DSSCL_NORMAL = 1     
#DSSCL_PRIORITY = 2   
#DSSCL_WRITEPRIMARY = 4 

#DD_OK = 0 
#DS_OK = 0 
;
#DSBPLAY_LOOPING         = $1
#DSBLOCK_FROMWRITECURSOR = $1
#DSBLOCK_ENTIREBUFFER    = $2

Structure DSBUFFERDESC 
  dwSize.l            
  dwFlags.l           
  dwBufferBytes.l     
  dwReserved.l        
  *lpwfxFormat        
EndStructure 
;
Structure DSBPOSITIONNOTIFY
  dwOffset.l;
  hEventNotify.l;
EndStructure 
;
Structure DIRECTSOUND
  RA_DirectSound.l
  Sound.l
  Notify.l
  secBuflen.l
  nChannels.l
EndStructure
;
;
;- Globals 
Global hWndM, hEvent
Global *mem
Global *RA_DirectSound.IDirectSound8
Global *lpPrimary.IDirectSoundBuffer
Global *lpPlayBuf.IDirectSoundBuffer
Global *lpNotify.IDirectSoundNotify

Global Dim hEvent(#BLOCKNUM+1)
Global Dim Notifications.DSBPOSITIONNOTIFY(#BLOCKNUM) 
Global DX8Sound.DIRECTSOUND

Procedure Delete(*obj.IUnknown) 
  ProcedureReturn *obj\Release() 
EndProcedure 
;
Procedure PrepareDX8Sound (*pWfx.WAVEFORMATEX) 
  Blocksize = 176400
  
  
  If OpenLibrary(0,"DSOUND.DLL")
    ;DirectSound get interface
    result.l = CallFunction(0,"DirectSoundCreate8",0,@*RA_DirectSound,0)
  EndIf
  If result = #Null
    
    ;Set Cooperative Level
    
    result = *RA_DirectSound\SetCooperativeLevel(hWndM,#DSSCL_PRIORITY) ; hwnd is the WindowID
    If result.l <> #DD_OK 
      Delete(*RA_DirectSound)
    Else 
      
      
      ; Making Primal Buffer
      
      dsbd.DSBUFFERDESC
      FillMemory(@dsbd, SizeOf(dsbd), 0)
      dsbd\dwSize        = SizeOf(dsbd) 
      dsbd\dwFlags       = #DSBCAPS_PRIMARYBUFFER 
      
      result.l = *RA_DirectSound\CreateSoundBuffer(@dsbd,@*lpPrimary,0) 
      If result.l <> #DD_OK
        Delete(*RA_DirectSound)
        Fresult = #Null
      EndIf
      ; 
      ;WAVE FORMAT (If use ACM stream, this block remove)
      *pWfx\wFormatTag = #WAVE_FORMAT_PCM
      *pWfx\nChannels = 2
      *pWfx\nSamplesPerSec = 44100
      *pWfx\nAvgBytesPerSec = 176400
      *pWfx\nBlockAlign = 4
      *pWfx\wBitsPerSample = 16
      *pWfx\cbSize = 0
      
      result = *lpPrimary\SetFormat(*pWfx)
      If result.l <> #DD_OK
        Delete(*RA_DirectSound)
        Fresult = #Null
      EndIf        
      
      ; Making Secondaly Buffer
      
      dsbd\dwFlags =  #DSBCAPS_GETCURRENTPOSITION2 | #DSBCAPS_GLOBALFOCUS | #DSBCAPS_CTRLPOSITIONNOTIFY
      dsbd\dwBufferBytes = Blocksize * #BLOCKNUM
      dsbd\lpwfxFormat = *pWfx
      ; 
      result.l = *RA_DirectSound\CreateSoundBuffer(@dsbd,@*lpPlayBuf,0) 
      If result.l <> #DD_OK
        Delete(*RA_DirectSound)
        Fresult = #Null
      EndIf
      
      ; Making Notify
      
      result.l = *lpPlayBuf\QueryInterface(?IID_DirectSoundNotify8,@*lpNotify)
      If result.l <> #DD_OK
        Delete(*RA_DirectSound)
        Fresult = #Null
      EndIf
      
      ; Making Event
      
      For I=0 To #BLOCKNUM
        hEvent(I) = CreateEvent_(#Null, #False, #False, #Null)
      Next
      
      ; Setting Notify Position
      ;
      nBlockAlign    = *pWfx\nBlockAlign;
      nSamplesPerSec = *pWfx\nSamplesPerSec;
      dwNotifySize   = nSamplesPerSec * #BLOCKNUM * nBlockAlign / #BLOCKNUM
      dwNotifySize   = dwNotifySize - (dwNotifySize % nBlockAlign)
      
      For I=0 To #BLOCKNUM
        Notifications(I)\dwOffset = dwNotifySize*(I)
        Notifications(I)\hEventNotify = hEvent(I)
      Next
      
      *lpNotify\SetNotificationPositions(#BLOCKNUM, @Notifications(0)) 
      
      DX8Sound\secBuflen   =  #BLOCKNUM * *pWfx\nAvgBytesPerSec
      DX8Sound\Sound       = *lpPlayBuf
      DX8Sound\Notify      = *lpNotify
      DX8Sound\RA_DirectSound = *RA_DirectSound
      DX8Sound\nChannels = *pWfx\nChannels
      Fresult = *lpPrimary 
    EndIf
    
  Else
    MessageRequester("Error","Please install DirectX v.8 or above",0)
    End
  EndIf
  If IsLibrary(0)
    CloseLibrary(0)
  EndIf
  ProcedureReturn Fresult
EndProcedure
;
Procedure DXSound(BufMax.l) ; ******************************************
  Protected *pWfx.WAVEFORMATEX
  *pWfx = *mem+20
  result = PrepareDX8Sound(*pWfx)
  If result
    dwLength.l    = DX8Sound\secBuflen/#BLOCKNUM
    dwLengthAll.l = DX8Sound\secBuflen
    *Sound.IDirectSoundBuffer8 = DX8Sound\Sound  
    *Sound\SetCurrentPosition(0)
    
    ; Skip noise block
    
    *clearmem = AllocateMemory(256)
    Repeat
      If CompareMemory(*mem, *clearmem, 255)
        If flag
          Break
        EndIf
      Else
        flag=1
        *mem+255
      EndIf 
    ForEver
    FreeMemory(*clearmem)
    
    For I=0 To #BLOCKNUM-2
      bufpos = I * dwLength
      wres = *Sound\Lock(bufpos, dwLength,@StreamBuffer1,@L1,@StreamBuffer2,@L2, 0 )
      If wres = #DS_OK
        CopyMemory_(StreamBuffer1,*mem,L1)
        *mem+L1
        If L2
          CopyMemory_(StreamBuffer2,*mem,L2)
        EndIf
        *mem+L2
        lres = *Sound\Unlock(StreamBuffer1,L1,StreamBuffer2,L2)
      EndIf
    Next
    
    block = #BLOCKNUM -1
    
    *Sound\play(0,0,#DSBPLAY_LOOPING)

   Repeat
      wfso = WaitForMultipleObjects_(#BLOCKNUM+1,  hEvent(), #False, #INFINITE)
      If wfso=>0 And wfso<#BLOCKNUM
        wres = *Sound\Lock(block*dwLength, dwLength,@StreamBuffer1,@Len1,@StreamBuffer2,@Len2, 0 )
        If wres = #DS_OK And Len1
          If BufMax<(Len1+*mem)
            CopyMemory_(StreamBuffer1,*mem,BufMax-*mem) 
          Else
            CopyMemory_(StreamBuffer1,*mem,Len1)
            *mem+Len1
            If Len2
              If BufMax<(Len2+*mem)
                CopyMemory_(StreamBuffer2,*mem,BufMax-*mem) 
              Else 
                CopyMemory_(StreamBuffer2,*mem,Len2)
                *mem+Len2
              EndIf
            EndIf
            lres = *Sound\Unlock(StreamBuffer1,Len1,StreamBuffer2,Len2) 
          EndIf
        EndIf
        block = (block +1 )% #BLOCKNUM
      EndIf
      If Len1=0 And Len2=0
        Break
      EndIf
    ForEver
    
    ; Ending Process
    For I=0 To #BLOCKNUM + 1
      If hEvent(I)
        CloseHandle_(hEvent(I))
      EndIf
    Next
    If *lpNotify
      *lpNotify\Release()
    EndIf
    If *lpPlayBuf
      *lpPlayBuf\Release()
    EndIf
    If *lpPrimary
      *lpPrimary\Release()
    EndIf
    If *RA_DirectSound
      Delete(*RA_DirectSound) 
    EndIf
  EndIf
EndProcedure
;
;
f=ReadFile(0,OpenFileRequester("Select WAV file", "", "*.wav",0))
If f
  *mem = AllocateMemory(Lof(0))
  *mem2 = *mem
  ReadData(0,*mem,Lof(0))
  wave.WAVEFORMATEX
  FileSeek(0,20)
  ReadData(0,@wave,SizeOf(WAVEFORMATEX))
  CloseFile(0)
  hWndM = OpenWindow(0,0,0,20,20,"Sound",#PB_Window_ScreenCentered)
  DXSound(*mem+MemorySize(*mem))
  FreeMemory(*mem2)
  CloseWindow(0)
EndIf
End
;
DataSection 
  IID_DirectSoundBuffer8:  ; DSOUND.h 
  Data.l $6825A449 
  Data.w $7524,$4D82 
  Data.b $92,$0F,$50,$E3,$6A,$B3,$AB,$1E 
  
  IID_DirectSoundNotify8:
  Data.l $B0210783
  Data.w $89CD, $11D0
  Data.b $AF,$08,$00,$A0,$C9,$25,$CD,$16
  
EndDataSection
Last edited by oryaaaaa on Mon Sep 21, 2009 9:07 am, edited 1 time in total.
Post Reply