WinMM.decls Wave In/Out
Übersicht

![]() |
Markus2Betreff: WinMM.decls Wave In/Out |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber ohne Ganrantie ![]() 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" |
||
![]() |
IronstormErstklassiger Contest-Veranstalter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Blitzmaker
Damit kannste z.B. ein Microfon etc. abfragen und den Pegel für visuelle Effekte nutzen 8) |
||
![]() |
Toby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie mache ich des genau des mikrofon einzubinden, welche von denen befehle?? | ||
Member of
Terra Multimedia |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Toby
Geht aber jetzt irgendwie nicht mehr unter XP !? Bei Win98 ging es so ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Markus2 hat Folgendes geschrieben: @Toby
Geht aber jetzt irgendwie nicht mehr unter XP !? Bei Win98 ging es so ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Sound Input Grafiklinie funktioniert bei mir unter XP! ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 . |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, is ja coool ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
#Reaper
in dem das Programm die Daten die es aus dem Netzwerk empfängt in den Sound Puffer schiebt ! |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mm..sorry, aber wie mach ich das, mit den Funktionen? ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mm..naja, versteh nicht, wie das gehen soll.. ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Yeah, danke! ![]() Werde dass dann auch mal testen, danke!!! ![]() ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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, ![]() Währ nett, wenn mir jemand ein Beispiel coden würde ![]() |
||
"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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei mir fehlt die Funktion "RtlMoveMemory".
Plz helft mir... T-Master |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die ist im 1ten post als extra code ganz unten drunter ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
T-Master hat Folgendes geschrieben: Bei mir fehlt die Funktion "RtlMoveMemory".
Plz helft mir... T-Master Steht doch ganz oben !? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group