Bass and Avi movie

Blitz3D Forums/Blitz3D Userlibs/Bass and Avi movie

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Found a solution.

BLZPeekInt is in the ISL lib http://www.blitzbasic.com/Community/posts.php?topic=34301
------------------------------------------------------
Graphics 800,600,32,2
SetBuffer FrontBuffer()

Const WAVE_INVALIDFORMAT = $000 ;invalid forma
Const WAVE_FORMAT_1M08   = $001 ;11.025 kHz,Mono,   8-bit
Const WAVE_FORMAT_1S08   = $002 ;11.025 kHz,Stereo, 8-bit
Const WAVE_FORMAT_1M16   = $004 ;11.025 kHz,Mono,  16-bit
Const WAVE_FORMAT_1S16   = $008 ;11.025 kHz,Stereo,16-bit
Const WAVE_FORMAT_2M08   = $010 ;22.05  kHz,Mono,   8-bit
Const WAVE_FORMAT_2S08   = $020 ;22.05  kHz,Stereo, 8-bit
Const WAVE_FORMAT_2M16   = $040 ;22.05  kHz,Mono,  16-bit
Const WAVE_FORMAT_2S16   = $080 ;22.05  kHz,Stereo,16-bit
Const WAVE_FORMAT_4M08   = $100 ;44.1   kHz,Mono,   8-bit
Const WAVE_FORMAT_4S08   = $200 ;44.1   kHz,Stereo, 8-bit
Const WAVE_FORMAT_4M16   = $400 ;44.1   kHz,Mono,  16-bit
Const WAVE_FORMAT_4S16   = $800 ;44.1   kHz,Stereo,16-bit
Const WAVE_FORMAT_PCM    = $001
Const WHDR_DONE          = $001
Const WHDR_PREPARED      = $002
Const WHDR_BEGINLOOP     = $004
Const WHDR_ENDLOOP       = $008
Const WHDR_INQUEUE       = $010

WaveFmt = CreateBank(18)
PokeShort WaveFmt,00,WAVE_FORMAT_PCM ; FormatTag
PokeShort WaveFmt,02,1               ; Channels
PokeInt   WaveFmt,04,11025           ; SamplesPerSec
PokeInt   WaveFmt,08,11025           ; AvgBytesPerSec | BlockAlign * SamplesPerSec
PokeShort WaveFmt,12,1               ; BlockAlign | (Channels * BitsPerSample) / 8 
PokeShort WaveFmt,14,8               ; BitsPerSample
PokeShort WaveFmt,16,0               ; ExtraDataSize

WaveCaps = CreateBank(48)
Dim Device(waveInGetNumDevs())
For I = 0 To waveInGetNumDevs() - 1
	waveInGetDevCaps(I,WaveCaps,48)
	If PeekInt(WaveCaps,40) And WAVE_FORMAT_1M08 Then
		For C = 8 To 39
			Char = PeekByte(WaveCaps,C)
			If Char = 0 Then Exit
			ProductName$ = ProductName$ + Chr$(Char)
		Next
		Print "(" + Str$(Dev) + ") " + ProductName$
		ProductName$ = ""
		Dev = Dev + 1
		Device(Dev) = I
	EndIf
Next 

If Dev = 0 Then
	Print "Can't find a sounddevice!"
	WaitKey : End
EndIf

Repeat
	DevUsed = Input("Select a device(0-" + Str$(Dev - 1) + "): ")
Until DevUsed => 0 And DevUsed <= Dev - 1
DevUsed = Device(DevUsed)

DevHandle = CreateBank(4)
waveInOpen(DevHandle,DevUsed,WaveFmt,0,0,0)
If PeekInt(DevHandle,0) = 0 Then
	Print "Can't open wavedevice!"
	WaitKey : End
EndIf
waveInStart(PeekInt(DevHandle,0))

WavData = CreateBank(1024)

WaveHead = CreateBank(32)
PokeInt WaveHead,00,BLZPeekInt(WavData+4) ; lpData
PokeInt WaveHead,04,1024              ; dwBufferLength
waveInPrepareHeader(PeekInt(DevHandle,0),WaveHead,32)

;SetBuffer BackBuffer()
film=OpenMovie("c:\movie.avi")

While Not KeyDown(1)
	Cls
	DrawMovie film,50,50
	waveInAddBuffer(PeekInt(DevHandle,0),WaveHead,32)
	For I = 0 To 1023
		Line I,PeekByte(WavData,I),I,0
	Next
	
	Flip
Wend
CloseMovie film

waveInUnprepareHeader(PeekInt(DevHandle,0),WaveHead,32)
waveInReset(PeekInt(DevHandle,0))
waveInClose(PeekInt(DevHandle,0))

;.lib "winmm.dll" 
;waveInGetDevCaps%(uDeviceID,WaveInCapsPointer*,WaveInCapsStructSize) : "waveInGetDevCapsA"
;waveInOpen%(WaveDeviceInputHandle*,WhichDevice,WaveFormatExPointer*,CallBack,CallBackInstance,Flags) : "waveInOpen"
;waveInGetNumDevs%() : "waveInGetNumDevs"
;waveInClose%(WaveDeviceInputHandle) : "waveInClose"
;waveInStart%(WaveDeviceInputHandle) : "waveInStart"
;waveInReset%(WaveDeviceInputHandle) : "waveInReset"
;waveInStop%(WaveDeviceInputHandle) : "waveInStop"
;waveInAddBuffer%(InputDeviceHandle,WaveHdrPointer*,WaveHdrStructSize) : "waveInAddBuffer"
;waveInPrepareHeader%(InputDeviceHandle,WaveHdrPointer*,WaveHdrStructSize) : "waveInPrepareHeader"
;waveInUnprepareHeader%(InputDeviceHandle,WaveHdrPointer*,WaveHdrStructSize) : "waveInUnprepareHeader"
;