Problem mit Pointer (gelöst)

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Vertex

Betreff: Problem mit Pointer (gelöst)

BeitragSo, Jan 02, 2005 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon gelöst per Type

Code: [AUSKLAPPEN]
Strict

' ----------------------------------------------------------------------------------------------------------
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

Extern "Win32"
   Function waveInGetDevCapsA(uDeviceID:Int, WaveInCapsPointer:Byte Ptr, WaveInCapsStructSize:Int)            
   Function waveInOpen(WaveDeviceInputHandle:Byte Ptr, ..
                       WhichDevice:Int, ..
                                 WaveFormatExPointer:Byte Ptr, ..
                                CallBack:Byte Ptr, ..
                                CallBackInstance:Byte Ptr, ..
                                 Flags:Int)
   Function waveInGetNumDevs()
   Function waveInClose(WaveDeviceInputHandle:Int)
   Function waveInStart(WaveDeviceInputHandle:Int)
   Function waveInReset(WaveDeviceInputHandle:Int)
   Function waveInStop(WaveDeviceInputHandle:Int)
   Function waveInAddBuffer(InputDeviceHandle:Int, WaveHdrPointer:Byte Ptr, WaveHdrStructSize:Int)                              
   Function waveInPrepareHeader(InputDeviceHandle:Int, WaveHdrPointer:Byte Ptr, WaveHdrStructSize:Int)                                                
   Function waveInUnprepareHeader(InputDeviceHandle:Int, WaveHdrPointer:Byte Ptr, WaveHdrStructSize:Int)
End Extern
' ----------------------------------------------------------------------------------------------------------

' ----------------------------------------------------------------------------------------------------------
Type TWaveHdr
    Field pData:Byte Ptr
    Field iBufferLength:Int
    Field iBytesRecorded:Int
    Field iUser:Int
    Field iFlags:Int
    Field iLoops:Int
    Field pNext:Int
    Field iReserved:Int
End Type

Local tWaveCaps:TBank
Local bNumDevices:Byte
Local iIndex:Byte
Local bCharIndex:Byte
Local bChar:Byte
Local sProductName:String
Local iDevice:Byte
Local tWaveFmt:TBank
Local iDevHandle:Int
Local tWaveData:TBank
Local tWaveHead:TWaveHdr
' ----------------------------------------------------------------------------------------------------------

' ----------------------------------------------------------------------------------------------------------
tWaveCaps = CreateBank(48)
bNumDevices = waveInGetNumDevs()
For iIndex = 0 To bNumDevices-1
   waveInGetDevCapsA(iIndex, BankBuf(tWaveCaps), 48)
   
   If PeekInt(tWaveCaps, 40) | WAVE_FORMAT_1M08 Then
      For bCharIndex = 8 To 38
         bChar = PeekByte(tWaveCaps, bCharIndex)
         If bChar = 0 Then Exit
         sProductName = sProductName+Chr(bChar)
      Next
      
      Print "("+(iIndex+1)+") "+sProductName; sProductName=""
   EndIf
Next
' ----------------------------------------------------------------------------------------------------------

' ----------------------------------------------------------------------------------------------------------
Print "Select a device"
iDevice = Asc(Input("Device"))-48
If (iDevice < 0) Or (iDevice > bNumDevices+1) Then
   Print "Index out of range"
   FlushMem ; WaitKey ; End
EndIf
' ----------------------------------------------------------------------------------------------------------

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

waveInOpen Varptr iDevHandle, iDevice-1, BankBuf(tWaveFmt), Null, Null, 0
If iDevHandle = 0 Then
   Print "Can't open device!"
   FlushMem ; WaitKey ; End
EndIf

waveInStart(iDevHandle)
tWaveData = CreateBank(512)
tWaveHead = New TWaveHdr

tWaveHead.pData         = BankBuf(tWaveData)
tWaveHead.iBufferLength = 512
waveInPrepareHeader iDevHandle, Varptr tWaveHead, 32
' ----------------------------------------------------------------------------------------------------------

' ----------------------------------------------------------------------------------------------------------
Graphics 512, 256, 0, 0
While Not KeyDown(1)
   Cls
      
   waveInAddBuffer iDevHandle, BankBuf(tWaveHead), 32
   For iIndex = 0 To 511
      DrawLine iIndex, PeekByte(tWaveData, iIndex), iIndex, 0
   Next

   Flip
Wend
' ----------------------------------------------------------------------------------------------------------

' ----------------------------------------------------------------------------------------------------------
waveInUnprepareHeader iDevHandle, tWaveHead, 32
waveInReset iDevHandle
waveInClose iDevHandle

FlushMem
End
' ----------------------------------------------------------------------------------------------------------


Inhaltlich funzt das jedoch noch nicht.

mfg olli
vertex.dreamfall.at | GitHub

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group