| |
|
|
Matthias Arlt | Hallo Leute, nach längerer Abwesenheit mal wieder was von mir. Ich hatte es schon ins RGH-Forum gestellt, nun auch hier nochmal zur Sicherheit... Aber zuerst mal nen schönen Gruss in die Runde !
Frage an unsere Modem-Experten:
Der nachfolgende Code soll als Teil einer Telefon-Software dienen...
Das Modem wird hierbei auf das Audiosignal der Telefonleitung aufgeschaltet. Meine Überlegung war nun, den Output (nach der Messagebox) in eine WAV-Datei zu schreiben bzw. an diese anzuhängen. Alle Versuche mittels @BlockWrite usw. schlugen leider fehl, da mir die saubere Filterung (readcom) nicht gelingt...
Soweit das Problem im Forum bereits angesprochen, wurde, habe ich versucht, das entsprechend einzuarbeiten, jedoch leider mit unbefriedigendem Ergebnis. Vielleicht hat hier jemand eine hilfreiche Idee oder gar ne probate Lösung. Theoretisch müsste es ja eigentlich machbar sein !
Freue mich über jeden Hinweis !
Matthias
--------------------------------------------------------------------------- Code-Auszug:
declare com%,com$,ende% declare comm#,lperror&,Byte%,szRxChar#,dwBytesRead&,ovRead# dim comm#,12 dim ovRead#,20 dim szRxChar#,65000
proc comread clear comm#,lperror&,Byte%,szRxChar#,dwBytesRead&,ovRead#,com$ external(kernel32.dll,ClearCommError,com%,addr(lperror&),comm#) dwBytesRead&=@long(comm#,4) if dwBytesRead& > 0 external(kernel32.dll,ReadFile,com%,szRxChar#,dwBytesRead&,addr(dwBytesRead&),ovRead#) Byte%=1 com$=@char$(szRxChar#,0,dwBytesRead&) return com$ endif endproc
Proc modemoutput comread print com$; endproc
proc modemCOM und Init-String ggf. anpassen com%=opencom(COM3,65000,65000) setcom(COM3:9600,N,8,1) writecom(com%,AT&FE1V1S0=0&C0&D2+MR=2;+DR=1;+ER=1;W2 ) modemoutput(com%) writecom(com%,at+fclass=8 ) modemoutput(com%) writecom(com%,at+vsm=130,8000,0,0 ) modemoutput(com%) writecom(com%,at+vls=1 ) modemoutput(com%) messagebox(Modemaufzeichnug starten,Modemtest,0) writecom(com%,at+vrx ) modemoutput(com%) endproc
Window 0,0-%MaxX,(%MaxY-50) modem
clear ende% whilenot ende% case inkey$()=~:ende%=1 modemoutput(com%) wend closecom(com%) dispose comm# dispose ovRead# dispose szRxChar# end
Anm.: Es geht um Prf 7.6 unter Win XP |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 16.08.2005 ▲ |
|
|
|
|
Michael Wodrich | [quote:f9da9fffcd=Matthias] Das Modem wird hierbei auf das Audiosignal der Telefonleitung aufgeschaltet. Meine Überlegung war nun, den Output (nach der Messagebox) in eine WAV-Datei zu schreiben bzw. an diese anzuhängen. Alle Versuche mittels @BlockWrite usw. schlugen leider fehl, da mir die saubere Filterung (readcom) nicht gelingt... [/quote:f9da9fffcd] Steh ich da jetzt auf der Leitung? Wird nicht jeder Modem-Empfang per Audiosignal auf die Telefonleitung aufgeschaltet?
Normalerweise mußt Du also nur ein richtiges Modem haben und die korrekte Baudrate etc. wissen.
Ich habe schon etliche Telefonanlagen angezapft (Hotel). Entweder man schaltet einen Puffer zwischen (nur bei exotischen Einstellungen oder viel Datenmüll erforderlich) oder man nimmt es direkt an der Schnittstelle oder per Modem auf.
Hast Du da nähere Angaben zu der Anlage?
Hast Du schon einen Datenempfang per HyperTerminal hinbekommen? HyperTerminal ist unter Zubehör - Kommunikation zu finden (muß evtl. von der Windows-CD nachinstalliert werden).
Wenn dieses Programm feste Datensatz-Strukturen anzeigt, dann spare Dir die API-Geschichten. Profan kann das auch so, allerdings steht in der Hilfe: ReadCom(). Die Funktion liefert aber einen String, heißt also ReadCom$().
Ein Tipp am Rande. Verlasse Dich niemals darauf, das auch wirklich immer klare Datensätze ankommen. Telefonanlagen verschlucken schon mal das eine oder andere Byte. Da mußt Du etliche Plausibilitätsprüfungen einbauen, damit das Programm nicht Müll verarbeitet.
Besonders wenn eine Telefonanlage abstürzt und einen Reset durchführt, landet jede Menge Diagnose-Müll auf der Leitung. Auch werden von einigen Anlagen im Zuge eines Reset Altdaten übertragen, damit das horchende Programm fehlende Buchungen nachtragen kann.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 17.08.2005 ▲ |
|
|
|
|
Matthias Arlt | Hallo Michael,
danke für Deine Erläuterungen. Ich selbst habe mich nämlich mit Terminalsoftware usw. bisher eher weniger beschäftigt. Dies gleich mal vorweg. Und klar, natürlich schaltet sich jedes Modem quasi auf das Audiosignal auf.
Mal etwas zum Hintergrund des Vorhabens: Hier geht es konkret darum, vorhandene analoge PCI-Modems für reine Telefonie-Zwecke weiterzuverwenden. Die Mehrzahl dieser Modems sind zwar voice-fähig, verfügen jedoch nicht über einen eigenen Audiochip oder -ausgang. Da ein hardwareseitiger Eingriff aus unterschiedlichen Gründen nicht gewollt ist, muss ich also softwareseitig an das Audiosignal herankommen, es also hörbar machen (wie etwa als Mithör-Funktion). Ideal wäre da natürlich, das Signal direkt an ein MCI-Device umzulenken. Da ich nicht weiss, ob und ggf. wie sowas realisierbar ist, versuche ich zunächst den Umweg über eine WAV-Datei. Prinzipiell funktioniert das ja auch, nur ist eben das Signal dann durchmischt mit besagtem Datenschrott, wie Du ja auch schreibst. Das momentane Problem ist also die Filterung (wie und nach welchen Kriterien), um letztlich ein sauberes Audio zu erhalten. Diverse Anrufbeantworter-Programme beherrschen es ja auch.
Vielleicht gibt es dafür auch noch eine andere bessere Lösung. Ich weiss es nicht oder komme momentan nicht drauf. Deshalb meine Frage...
Also zusammengefasst geht es um die saubere Auskopplung vom reinen Tonsignal.
Gruß Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 17.08.2005 ▲ |
|
|
|