WinMM.decls Wave In/Out

Übersicht BlitzBasic DLLs und Userlibs

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Markus2

Betreff: WinMM.decls Wave In/Out

BeitragSo, Jun 13, 2004 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber ohne Ganrantie Confused
Die Out APIs habe ich umgesetzt .

Kommt in den Userlibs Ordner als WinMM.decls
Code: [AUSKLAPPEN]

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

;MR 13.06.2004
waveOutGetNumDevs%() : "waveOutGetNumDevs"
waveOutGetDevCaps%(uDeviceID,WaveOutCapsPointer*,WaveOutCapsStructSize) : "waveOutGetDevCapsA"
waveOutSetVolume%(uDeviceID,dwVolume) : "waveOutSetVolume"
waveOutGetVolume%(uDeviceID,dwVolume*) : "waveOutGetVolume"
waveOutOpen%(WaveDeviceOutputHandle*,WhichDevice,WaveFormatExPointer*,CallBack,fPlayingBoolean*,dwFlags) : "waveOutOpen"
waveOutClose%(WaveDeviceOutputHandle) : "waveOutClose"
waveOutReset%(WaveDeviceOutputHandle) : "waveOutReset"
waveOutWrite%(WaveDeviceOutputHandle,WaveOutHdrPointer*,WaveOutHdrSize) : "waveOutWrite"
waveOutPrepareHeader%(WaveDeviceOutputHandle,WaveOutHdrPointer*,WaveOutHdrSize) : "waveOutPrepareHeader"
waveOutUnprepareHeader%(WaveDeviceOutputHandle,WaveOutHdrPointer*,WaveOutHdrSize) : "waveOutUnprepareHeader"

;noch unübersetzt aus VB6
;waveOutGetPosition (ByVal hWaveOut As Long, lpInfo As MMTIME, ByVal uSize As Long) As Long
;waveOutGetErrorText Alias "waveInGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long



Das wenn man es braucht als Kernel32.decls
Code: [AUSKLAPPEN]

;.lib "kernel32.dll"
RtlMoveMemory%(Destination*,Source,Length) : "RtlMoveMemory"

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragSo, Jan 02, 2005 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Markus2. Was bringt das? Was für ein zweck hat des?
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium

Markus2

BeitragSo, Jan 02, 2005 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blitzmaker

Damit kannste z.B. ein Microfon etc. abfragen
und den Pegel für visuelle Effekte nutzen 8)

Toby

BeitragDi, Apr 12, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie mache ich des genau des mikrofon einzubinden, welche von denen befehle??
Member of
Terra Multimedia

Markus2

BeitragDi, Apr 12, 2005 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@Toby
Geht aber jetzt irgendwie nicht mehr unter XP !?
Bei Win98 ging es so Idea

Code: [AUSKLAPPEN]


;Braucht User Declares WinMM.decls

Graphics 800,600,16,2
SetBuffer FrontBuffer()

EnableDirectInput True

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

;---------------------------------------------------

WavInData = CreateBank(360)

;---------------------------------------------------

WaveHeadIn = CreateBank(56)
PokeInt WaveHeadIn,00,AddressOf(WavInData) ; lpData
PokeInt WaveHeadIn,04,360+2 ; 514 ; dwBufferLength
PokeInt WaveHeadIn,08,0  ;dwBytesRecorded; Daten im Puffer nach der Aufnahme
PokeInt WaveHeadIn,12,0  ;DWORD dwUser; Benutzerdefinierte Daten
PokeInt WaveHeadIn,16,0  ;DWORD dwFlags; dwFlags: DWord; Informationen über den Puffer:
               ;WHDR_BEGINLOOP 4 (L) Erster Puffer in der Schleife, nur für Ausgaben.
               ;WHDR_DONE 1 (L) Puffer ist abgearbeitet, Rückkehr zur Applikation.
               ;WHDR_ENDLOOP 8 (L) Letzter Puffer in der Schleife, nur für Ausgaben.
               ;WHDR_INQUEUE 10h (L) Puffer liegt zum Abspielen in der Warteschlange.
               ;WHDR_PREPARED 2 (L) Puffer wurde durch waveInPrepareHeader,waveOutPrepareHeader vorbereitet.
PokeInt WaveHeadIn,20,0 ;DWORD dwLoops; dwLoops: DWord; Anzahl der Wiederholungen, nur bei Ausgaben.
PokeInt WaveHeadIn,24,0 ;struct wavehdr_tag *lpNext; lpNext: PWaveHdr; Reserviert, in Pascal ein PWaveHdr.
PokeInt WaveHeadIn,28,0 ;DWORD reserved; reserved: DWord; Reserviert.

;--------------------------------------------------- IN Device

Cls
WaveCaps = CreateBank(48)
Dim Device(waveInGetNumDevs())
Dev=0
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
FreeBank WaveCaps

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

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

DevHandleIn = CreateBank(4)
waveInOpen(DevHandleIn,DevUsed,WaveFmt,0,0,0)
If PeekInt(DevHandleIn,0) = 0 Then
 Print "Can't open input wavedevice!"
 WaitKey
 End
EndIf
DebugLog "waveInStart " + waveInStart(PeekInt(DevHandleIn,0))
DebugLog "waveInPrepareHeader " + waveInPrepareHeader(PeekInt(DevHandleIn,0),WaveHeadIn,BankSize(WaveHeadIn))

;-----------------------------------------------------

SetBuffer BackBuffer()

;-----------------------------------------------------

 ClsColor 0,0,0
 Color 255,255,0
 Local smx=GraphicsWidth()/2
 Local smy=GraphicsHeight()/2

;-----------------------------------------------------

While Not KeyHit(1)

 Cls

 Text 0,0,PeekInt(WaveHeadIn,16)

 ;If (PeekInt(WaveHeadIn,16) And 10)=10 Or (PeekInt(WaveHeadIn,16) And 2)=2 Then
  waveInAddBuffer(PeekInt(DevHandleIn,0),WaveHeadIn,BankSize(WaveHeadIn)) ;Musik vom Micro in den Buffer holen
 ;EndIf

  For i=0 To 359 Step 1
   ps=128-PeekByte(WavInData,px)
   Plot i,smy+ps
   px=px+1:If px>359 Then px=0
  Next

 Delay 20
 Flip 0
 ;Flip

 If KeyHit(31) Then SaveBuffer BackBuffer(),"Wave2D.bmp"

 ;-----------------------------------------------------

Wend

;----------------------------------------------------- Speicher wieder FREI geben !

DebugLog "waveInReset " +waveInReset(PeekInt(DevHandleIn,0))
DebugLog "waveInUnprepareHeader " +waveInUnprepareHeader(PeekInt(DevHandleIn,0),WaveHeadIn,BankSize(WaveHeadIn))
DebugLog "waveInClose " +waveInClose(PeekInt(DevHandleIn,0))

FlushKeys
WaitKey
End

;-----------------------------------------------------

Function AddressOf(Bank)
 Local Address = CreateBank(4),RetValue
 RtlMoveMemory(Address,Bank+4,4)
 RetValue = PeekInt(Address,0)
 FreeBank Address
 Return RetValue
End Function

Toby

BeitragDi, Apr 12, 2005 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:
@Toby
Geht aber jetzt irgendwie nicht mehr unter XP !?
Bei Win98 ging es so Idea


Schade, hab' vorgestern den letzten PC auf XP aufgerüstet.
Trotzdem vielen vielen dank!

Falls du ne möglichkeitfindest das es auch unter xp läuft, bitte melden!! Danke!
Member of
Terra Multimedia
 

fliege

BeitragSa, Apr 30, 2005 1:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, gibt es eine?? Gibt es denn keine andere Möglichkeit, die vielleicht sogar auf XP läuft?

Wäre sehr nett, wenn ihr helfen könntet...
Fliege
Wer weiß was kommt.. ?

Toby

BeitragDi, Nov 08, 2005 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Sound Input Grafiklinie funktioniert bei mir unter XP! Very Happy Very Happy
Ich hab nur in der Lautstärkeneinstellung das Mikrofon stummgeschalten, so dass ich minimale ausschläge gesehen hab.
Kann mir vll trotzdem noch jemand verraten ob das Programm nicht auch noch etwas Ausgeben sollte?? Oder täusche ich mich da?
Member of
Terra Multimedia

Markus2

BeitragDi, Nov 08, 2005 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
@Toby,
Befehle für eine Sound Ausgabe siehste oben .
Genaue Erklärung findest du in der MSDN,
also Microsoft Developer Network Seiten .
http://msdn.microsoft.com/
Oder mal eine API Guide suchen und angucken .
 

#Reaper

Newsposter

BeitragFr, März 24, 2006 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, is ja coool Very Happy
frage: angenommen, ich würde die Daten nun über das Netz senden, wie könnte ich das dann wieder ausgeben?
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Markus2

BeitragFr, März 24, 2006 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
#Reaper
in dem das Programm die Daten die es aus dem Netzwerk empfängt in
den Sound Puffer schiebt !
 

#Reaper

Newsposter

BeitragSa, März 25, 2006 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
mm..sorry, aber wie mach ich das, mit den Funktionen? Sad
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Markus2

BeitragSa, März 25, 2006 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Code siehe oben , die Sound Ausgabe ist ähnlich .

Ließ am besten mal auf den Microsoft Seiten nach .
Links sollte eigentlich ne Baumansicht sein ...

http://msdn.microsoft.com/libr...27.xml.asp
 

#Reaper

Newsposter

BeitragMi, März 29, 2006 9:23
Antworten mit Zitat
Benutzer-Profile anzeigen
mm..naja, versteh nicht, wie das gehen soll.. Sad
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Toby

BeitragSa, Apr 22, 2006 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja jetzt schaumal:
ich bin zwar ein absoluter Noob, aber soweit schau ich glaube ich durch.
Und so eine Netzwerk telefonie würde mich auch interessieren also:

Das Programm von Markus2 ist ja ne klasse Vorlage:

Soweit ich das richtig verstehe wird miot
Code: [AUSKLAPPEN]
waveInAddBuffer(PeekInt(DevHandleIn,0),WaveHeadIn,BankSize(WaveHeadIn))


Das Signal vom Mikrofon geholt und in eine Bank abgespeichert.
Soo in der Bank "WaveHeadIn" haben wir jetzt den Ton. Denschicken wir dann über TCP/IP.
Also Verbindung herstellen (STARTTCPSERVER,ACCEPTSTREAM etc. pp. usw.)

und dann:

Code: [AUSKLAPPEN]
WRITEBYTES WaveHeadIn, stream, 0, 359


so und jetzt braucht man nurnoch den Befehl auf dem anderen Rechner zum schreiben in den Soundbuffer, den ich leider nochnciht weiß, kann ja mir mal eienr schicken, werde ihn aber jetzt auchmal unter Markus API Links suchen: also dann sieht dass dann ungefähr so aus:

Code: [AUSKLAPPEN]
READBYTES (WaveHeadIn, stream, 0, 359)
waveout(PeekInt(DevHandleIn,0),WaveHeadIn,BankSize(WaveHeadIn));oder wie der Befehl auch immer ist


Hat das geholfen???

EDIT:
denke der Befehl heißt:
waveOutWrite mit den gleichen Parametern also:

waveOutWrite(Deviceid,Bank,Banksize)

Bin mir aber nicht sicher habe es nochnciht zum laufen gebracht!
Member of
Terra Multimedia
 

#Reaper

Newsposter

BeitragSa, Apr 22, 2006 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Yeah, danke! Smile
Werde dass dann auch mal testen, danke!!! Smile

Very Happy
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

FreetimeCoder

BeitragFr, Aug 04, 2006 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß, das es nervt wenn Noobs überflüssige Fragen stellen, aber ich hab mir alles durchgelesen und trotzdem noch keine Ahnung, wie ich den Input über die Boxen als Ton rauskriege, Crying or Very sad

Währ nett, wenn mir jemand ein Beispiel coden würde Wink
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte:
Dexterity Ball (100%)
Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz
(ehemals Uboot)
PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA
 

timmeTheOnly

BeitragDo, Aug 10, 2006 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir fehlt die Funktion "RtlMoveMemory".

Plz helft mir...
T-Master
 

#Reaper

Newsposter

BeitragDo, Aug 10, 2006 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Die ist im 1ten post als extra code ganz unten drunter Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Markus2

BeitragDo, Aug 10, 2006 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
T-Master hat Folgendes geschrieben:
Bei mir fehlt die Funktion "RtlMoveMemory".

Plz helft mir...
T-Master


Steht doch ganz oben !?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group