Soundkarte mittels port.dll auslesen

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Soundkarte mittels port.dll auslesen

Beitrag von dl5ndh »

Hallo,
ich probiere vergeblich, mittels der Bibliothek "port.dll", Sounddaten aus der Soundkarte auszulesen.
Ich habe einen Laptop mit Win7 und einer (vermtl.) Onboard-Soundkarte.
Ich nutze PureBASIC v 4.40

Das Problem besteht schon am Beginn des Programmes, daß mir die Variable Sound_Vorhanden
den Wert -1 anzeigt, also so tut, als wäre im Laptop keine Soundkarte vorhanden. Vermutlich
werden deshalb auch keine Sounddaten in den Speicherbereich geschrieben und in der Console
auch nicht ausgegeben, weil eben keine daten im Speicherbereich drin sind.

Kann mir jemand schreiben, welchen Fehler ich mache? Danke

Gerhard

Anbei der Quelltext und danach die Beschreibung der "PORT.DLL" Soundkartenbefehle:

Code: Alles auswählen

;Soundkarte auslesen
InitSound()
OpenConsole()

If OpenLibrary(0,"port.dll")<>0
    Sound_Vorhanden = CallFunction(0,"SOUNDIS");Prüft, ob eine Soundkarte vorhanden ist (0=JA, -1=NEIN)
    MessageRequester("",Str(Sound_Vorhanden))
Else
    MessageRequester("PureFFT Fehler","PORT.DLL nicht gefunden")
EndIf
    *SoundIN = AllocateMemory(44100) 
    Ergebnis = CallFunction(0,"SOUNDIN",*SoundIN,44100); Liest die Soundkartendaten als 8-Bit (BYTE) oder 16-Bit (WORD) ein
    MessageRequester("",Str(Ergebnis))


For i = 1 To 22050 Step 2
    WORT.w = PeekW(*SoundIN)
    PrintN(Str(WORT))
Next i

Repeat
Until Inkey()<>""
Hier noch die Soundkartenbefehle der "port.dll":

Soundkarte:
===========

SOUNDIS
Stellt fest, ob eine Soundkarte vorhanden ist
Parameter: keine
Rückgabe: 0 oder -1 bzw. True oder False

Deklaration in Java:
public static native boolean soundis() throws PortDLLWrapperException;

Deklaration in C/C++:
typedef int (CALLBACK* LPFNDLLFUNC)();
char szFuncName[] = "SOUNDIS";

Deklaration in Delphi:
Function SOUNDIS:Boolean; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Function SOUNDIS Lib "Port" () As Integer


SOUNDCAPIN
Die Soundkartenaufnahme-Eigenschaften werden in einer MessageBox
ausgegeben.
Parameter: keine
Rückgabe: keine

Deklaration in Java:
public static native void soundcapin() throws PortDLLWrapperException;

Deklaration in C/C++:
typedef int (CALLBACK* LPFNDLLFUNC)();
char szFuncName[] = "SOUNDCAPIN";

Deklaration in Delphi:
Procedure SOUNDCAPIN; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Sub SOUNDCAPIN Lib "Port" ()


SOUNDCAPOUT
Die Soundkartenwiedergabe-Eigenschaften werden in einer MessageBox
ausgegeben.
Parameter: keine
Rückgabe: keine

Deklaration in Java:
public static native void soundcapout() throws PortDLLWrapperException;

Deklaration in C/C++:
typedef int (CALLBACK* LPFNDLLFUNC)();
char szFuncName[] = "SOUNDCAPOUT";

Deklaration in Delphi:
Procedure SOUNDCAPOUT; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Sub SOUNDCAPOUT Lib "Port" ()


SOUNDIN
Startet eine Soundaufnahme (mono) und legt die Daten in den übergebenen
Pufferspeicher ab.
Parameter: Speicher und Speichergröße (in Bytes)
Rückgabe: keine

Deklaration in Java:
public static native int[] soundin(int length) throws PortDLLWrapperException;

Deklaration in C/C++:
typedef int (CALLBACK* LPFNDLLFUNC)(BYTE*,DWORD);
char szFuncName[] = "SOUNDIN";

Deklaration in Delphi:
Procedure SOUNDIN(Puffer: Pchar; Size: DWORD); stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Sub SOUNDIN Lib "Port" (ByVal A$, ByVal Gr As Long)


SOUNDOUT
Startet eine Soundwiedergabe (mono) der Daten des übergebenen Pufferspeichers.
Parameter: Speicher und Speichergröße (in Bytes)
Rückgabe: keine

Deklaration in Java:
public static native void soundout(int[] buffer) throws PortDLLWrapperException;

Deklaration in C/C++:
typedef int (CALLBACK* LPFNDLLFUNC)(BYTE*,DWORD);
char szFuncName[] = "SOUNDOUT";

Deklaration in Delphi:
Procedure SOUNDOUT(Puffer: Pchar; Size: DWORD); stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Sub SOUNDOUT Lib "Port" (ByVal A$, ByVal Gr As Long)


SOUNDGETRATE
Erfagt die eingestellte Abtastfrequenz.
Parameter: keine
Rückgabe: Abtastfrequenz in Samples/Sekunde, z.B. 11025;

Deklaration in Java:
public static native int soundgetrate() throws PortDLLWrapperException;

Deklaration in C/C++:
typedef WORD (CALLBACK* LPFNDLLFUNC)();
char szFuncName[] = "SOUNDGETRATE";

Deklaration in Delphi:
Function SOUNDGETRATE: WORD; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Function SOUNDGETRATE Lib "Port" () As Integer


SOUNDSETRATE
Stellt eine Abtastfrequenz ein.
Parameter: Abtastfrequenz in Samples/Sekunde
Rückgabe: Vorige Abtastfrequenz in Samples/Sekunde. z.B. 11025;

Deklaration in Java:
public static native int soundsetrate(int rate) throws PortDLLWrapperException;

Deklaration in C/C++:
typedef DWORD (CALLBACK* LPFNDLLFUNC)(DWORD);
char szFuncName[] = "SOUNDSETRATE";

Deklaration in Delphi:
Function SOUNDSETRATE(Rate: DWORD):DWORD; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Function SOUNDSETRATE Lib "Port" (ByVal Rate As Long) As Long


SOUNGETBYTES
Bytes pro Sample erfragen
Parameter: keine
Rückgabe: 1 oder 2. Ein Byte entspricht 8 Bits/Sample. Zwei Bytes
entsprechen 16 Bit/Sample.

Deklaration in Java:
public static native int soundgetbytes() throws PortDLLWrapperException;

Deklaration in C/C++:
typedef WORD (CALLBACK* LPFNDLLFUNC)();
char szFuncName[] = "SOUNDGETBYTES";

Deklaration in Delphi:
Function SOUNDGETBYTES: WORD; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Function SOUNDGETBYTES Lib "Port" () As Integer


SOUNDSETBYTES
Bytes pro Sample einstellen.
Parameter: 1 oder 2. Ein Byte entspricht 8 Bits/Sample. Zwei Bytes
entsprechen 16 Bit/Sample.
Rückgabe: vorige Bytes pro Sample.

Deklaration in Java:
public static native int soundsetbytes(int bytes) throws PortDLLWrapperException;

Deklaration in C/C++:
typedef DWORD (CALLBACK* LPFNDLLFUNC)(DWORD);
char szFuncName[] = "SOUNDSETBYTES";

Deklaration in Delphi:
Function SOUNDSETBYTES(Bytes: DWORD):DWORD; stdcall; external 'port.dll';

Deklaration in VB und VBA:
Declare Function SOUNDSETBYTES (ByVal Rate As Long) As Long


SOUNDBUSY
Testen, ob die Soundkarte gerade beschäftigt ist.
Parameter: keine
Rückgabe: Zustand der Soundkarte (1/0)

Deklaration in Java:
public static native boolean soundbusy() throws PortDLLWrapperException;

Deklaration in C/C++:
typedef DWORD (CALLBACK* LPFNDLLFUNC)();
char szFuncName[] = "SOUNDBUSY";
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Soundkarte mittels port.dll auslesen

Beitrag von Falko »

Ich hab's mal hierhin verschoben, da wohl dafür die Hardwareecke besser geeignet ist. Ob die Port.dll nun die Soundkarte korrekt unterstützt, kann ich laut der Beschreibung von B.Kainka nicht herauslesen. Angeblich soll diese nun auch unter Vista funktionieren. Ich kann an deinem Code keinen Fehler finden. Funktionieren tut's bei meiner Soundonboard von Asus P5QL-Pro leider auch nicht.

Bzw. überprüft wird ja mit der DLL, ob die Soundkarte vorhanden ist, was bei mir ebenfalls eine -1 anzeigt.

Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Soundkarte mittels port.dll auslesen

Beitrag von mk-soft »

In anderen Programmiersprachen ist in der Regler -1 ein True und 0 ein Fals.
Hat also die Soundkarte gefunden.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: Soundkarte mittels port.dll auslesen

Beitrag von Helle »

Habe mir das eben mal mit Win XP (Sound-On-Board) und einem DisAssembler angeschaut (Port.dll vom 23.02.2005). Die Funktion SOUNDIS ruft waveInGetNumDevs() auf und gibt bei einem Wert >=1 den Rückgabe-Wert -1 zurück, also (mindestens eine) Soundkarte gefunden (nichts gefunden = 0).
Abfrage-Funktionen wie "SOUNDCAPIN", "SOUNDCAPOUT", "SOUNDGETRATE" und "SOUNDGETBYTES" funktionieren. Was "SOUNDIN" bei mir speichert - ich bin noch am Grübeln.
Übrigens: Die Konsole zeigt nur die letzten Werte an; besser mit Debug und dann richtig mit Startwert 0 und i als Parameter in PeekW :mrgreen: :

Code: Alles auswählen

For i = 0 To 22048 Step 2
  Debug PeekW(*SoundIN + i)
Next i
Gruß
Helle
P.S.: Funktioniert mit Mikrofon als Aufnahme-Quelle!
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Soundkarte mittels port.dll auslesen

Beitrag von Falko »

Ich habe nun unter Vista32 auch mal experimentiert um mit der neuen Port.dll eine Aufnahme
als auch das Abspielen mal damit zu testen. Das funktioniert prima.

Code: Alles auswählen

; Globale Variablen deklaration
Global CLOSECOM.l
Global CTS.l
Global DCD.l
Global DELAY.l
Global DELAYUS.l
Global DSR.l
Global DTR.l
Global INPORT.l
Global JOYBUTTON.l
Global JOYR.l
Global JOYSTICK.l
Global JOYU.l
Global JOYV.l
Global JOYX.l
Global JOYY.l
Global JOYZ.l
Global OPENCOM.l
Global OUTPORT.l
Global READBYTE.l
Global REALTIME.l
Global RI.l
Global RTS.l
Global SENDBYTE.l
Global SOUNDBUSY.l
Global SOUNDCAPIN.l
Global SOUNDCAPOUT.l
Global SOUNDGETBYTES.l
Global SOUNDGETRATE.l
Global SOUNDIN.l
Global SOUNDIS.l
Global SOUNDOUT.l
Global SOUNDSETBYTES.l
Global SOUNDSETRATE.l
Global SOUNDIN.l
Global SOUNDOUT.l
Global TIMEINIT.l
Global TIMEINITUS.l
Global TIMEOUT.l
Global TIMEREAD.l
Global TIMEREADUS.l
Global TXD.l

; Init-Funktion
ProcedureDLL PORTDLL_Init()
Shared DLL.l
DLL = LoadLibrary_("PORT.DLL")
If DLL
CLOSECOM = GetProcAddress_(DLL, "CLOSECOM")
CTS = GetProcAddress_(DLL, "CTS")
DCD = GetProcAddress_(DLL, "DCD")
DELAY = GetProcAddress_(DLL, "DELAY")
DELAYUS = GetProcAddress_(DLL, "DELAYUS")
DSR = GetProcAddress_(DLL, "DSR")
DTR = GetProcAddress_(DLL, "DTR")
INPORT = GetProcAddress_(DLL, "INPORT")
JOYBUTTON = GetProcAddress_(DLL, "JOYBUTTON")
JOYR = GetProcAddress_(DLL, "JOYR")
JOYSTICK = GetProcAddress_(DLL, "JOYSTICK")
JOYU = GetProcAddress_(DLL, "JOYU")
JOYV = GetProcAddress_(DLL, "JOYV")
JOYX = GetProcAddress_(DLL, "JOYX")
JOYY = GetProcAddress_(DLL, "JOYY")
JOYZ = GetProcAddress_(DLL, "JOYZ")
OPENCOM = GetProcAddress_(DLL, "OPENCOM")
OUTPORT = GetProcAddress_(DLL, "OUTPORT")
READBYTE = GetProcAddress_(DLL, "READBYTE")
REALTIME = GetProcAddress_(DLL, "REALTIME")
RI = GetProcAddress_(DLL, "RI")
RTS = GetProcAddress_(DLL, "RTS")
SENDBYTE = GetProcAddress_(DLL, "SENDBYTE")
SOUNDBUSY = GetProcAddress_(DLL, "SOUNDBUSY")
SOUNDCAPIN = GetProcAddress_(DLL, "SOUNDCAPIN")
SOUNDCAPOUT = GetProcAddress_(DLL, "SOUNDCAPOUT")
SOUNDGETBYTES = GetProcAddress_(DLL, "SOUNDGETBYTES")
SOUNDGETRATE = GetProcAddress_(DLL, "SOUNDGETRATE")
SOUNDIN = GetProcAddress_(DLL, "SOUNDIN")
SOUNDIS = GetProcAddress_(DLL, "SOUNDIS")
SOUNDOUT = GetProcAddress_(DLL, "SOUNDOUT")
SOUNDSETBYTES = GetProcAddress_(DLL, "SOUNDSETBYTES")
SOUNDSETRATE = GetProcAddress_(DLL, "SOUNDSETRATE")
SSOUNDIN = GetProcAddress_(DLL, "SSOUNDIN")
SSOUNDOUT = GetProcAddress_(DLL, "SSOUNDOUT")
TIMEINIT = GetProcAddress_(DLL, "TIMEINIT")
TIMEINITUS = GetProcAddress_(DLL, "TIMEINITUS")
TIMEOUT = GetProcAddress_(DLL, "TIMEOUT")
TIMEREAD = GetProcAddress_(DLL, "TIMEREAD")
TIMEREADUS = GetProcAddress_(DLL, "TIMEREADUS")
TXD = GetProcAddress_(DLL, "TXD")
EndIf
EndProcedure
; End-Funktion
ProcedureDLL PORTDLL_End()
Shared DLL.l
FreeLibrary_(DLL)
EndProcedure
; Allgemeine Funktionen
ProcedureDLL.l CLOSECOM()
ProcedureReturn CallFunctionFast(CLOSECOM)
EndProcedure

ProcedureDLL.l CTS()
ProcedureReturn CallFunctionFast(CTS)
EndProcedure

ProcedureDLL.l DCD()
ProcedureReturn CallFunctionFast(DCD)
EndProcedure

ProcedureDLL.l P_Delay(a.l)
ProcedureReturn CallFunctionFast(DELAY,a)
EndProcedure

ProcedureDLL.l DELAYUS(a.l)
ProcedureReturn CallFunctionFast(DELAYUS,a)
EndProcedure

ProcedureDLL.l DSR()
ProcedureReturn CallFunctionFast(DSR)
EndProcedure

ProcedureDLL.l DTR(a.l)
ProcedureReturn CallFunctionFast(DTR,a)
EndProcedure

ProcedureDLL.l INPORT(a.l)
ProcedureReturn CallFunctionFast(INPORT,a)
EndProcedure

ProcedureDLL.l JOYBUTTON()
ProcedureReturn CallFunctionFast(JOYBUTTON)
EndProcedure

ProcedureDLL.l JOYR()
ProcedureReturn CallFunctionFast(JOYR)
EndProcedure

ProcedureDLL.l JOYSTICK(a.l,b.l,c.l,d.l,e.l,f.l,g.l)
ProcedureReturn CallFunctionFast(JOYSTICK,a,b,c,d,e,f,g)
EndProcedure

ProcedureDLL.l JOYU()
ProcedureReturn CallFunctionFast(JOYU)
EndProcedure

ProcedureDLL.l JOYV()
ProcedureReturn CallFunctionFast(JOYV)
EndProcedure

ProcedureDLL.l JOYX()
ProcedureReturn CallFunctionFast(JOYX)
EndProcedure

ProcedureDLL.l JOYY()
ProcedureReturn CallFunctionFast(JOYY)
EndProcedure

ProcedureDLL.l JOYZ()
ProcedureReturn CallFunctionFast(JOYZ)
EndProcedure

ProcedureDLL.l OPENCOM()
ProcedureReturn CallFunctionFast(OPENCOM)
EndProcedure

ProcedureDLL.l OUTPORT(a.l,b.l)
ProcedureReturn CallFunctionFast(OUTPORT,a,b)
EndProcedure

ProcedureDLL.l P_ReadByte()
ProcedureReturn CallFunctionFast(READBYTE)
EndProcedure

ProcedureDLL.l REALTIME(a.l)
ProcedureReturn CallFunctionFast(REALTIME,a)
EndProcedure

ProcedureDLL.l RI()
ProcedureReturn CallFunctionFast(RI)
EndProcedure

ProcedureDLL.l RTS(a.l)
ProcedureReturn CallFunctionFast(RTS,a)
EndProcedure

ProcedureDLL.l SENDBYTE(a.l)
ProcedureReturn CallFunctionFast(SENDBYTE,a)
EndProcedure

ProcedureDLL.l SOUNDBUSY()
ProcedureReturn CallFunctionFast(SOUNDBUSY)
EndProcedure

ProcedureDLL.l SOUNDCAPIN()
ProcedureReturn CallFunctionFast(SOUNDCAPIN)
EndProcedure

ProcedureDLL.l SOUNDCAPOUT()
ProcedureReturn CallFunctionFast(SOUNDCAPOUT)
EndProcedure

ProcedureDLL.l SOUNDGETBYTES()
ProcedureReturn CallFunctionFast(SOUNDGETBYTES)
EndProcedure

ProcedureDLL.l SOUNDGETRATE()
ProcedureReturn CallFunctionFast(SOUNDGETRATE)
EndProcedure

ProcedureDLL.l SOUNDIN(a.l,b.l)
ProcedureReturn CallFunctionFast(SOUNDIN,a,b)
EndProcedure

ProcedureDLL.l SOUNDIS()
ProcedureReturn CallFunctionFast(SOUNDIS)
EndProcedure

ProcedureDLL.l SOUNDOUT(a.l,b.l)
ProcedureReturn CallFunctionFast(SOUNDOUT,a,b)
EndProcedure

ProcedureDLL.l SOUNDSETBYTES(a.l)
ProcedureReturn CallFunctionFast(SOUNDSETBYTES,a)
EndProcedure

ProcedureDLL.l SOUNDSETRATE(a.l)
ProcedureReturn CallFunctionFast(SOUNDSETRATE,a)
EndProcedure


ProcedureDLL.l TIMEINIT()
ProcedureReturn CallFunctionFast(TIMEINIT)
EndProcedure

ProcedureDLL.l TIMEINITUS()
ProcedureReturn CallFunctionFast(TIMEINITUS)
EndProcedure

ProcedureDLL.l TIMEOUT(a.l)
ProcedureReturn CallFunctionFast(TIMEOUT,a)
EndProcedure

ProcedureDLL.l TIMEREAD()
ProcedureReturn CallFunctionFast(TIMEREAD)
EndProcedure

ProcedureDLL.l TIMEREADUS()
ProcedureReturn CallFunctionFast(TIMEREADUS)
EndProcedure

ProcedureDLL.l TXD(a.l)
ProcedureReturn CallFunctionFast(TXD,a)
EndProcedure

;Soundkarte auslesen

InitSound()
OpenConsole()
PORTDLL_Init()

If SOUNDIS()= -1
  Debug SOUNDCAPIN()
    *Sounds.c = AllocateMemory(22048)
  MessageRequester("Aufnahme Soundcard","Aufnahme starten")
  SOUNDIN(*Sounds,22048) 
  MessageRequester("Wiedergabe Soundcard","Wiedergabe starten")
  SOUNDOUT(*Sounds,22048)
  CreateFile(0,"Test.wav")
     WriteData(0,@Sounds,22048)
  CloseFile(0)
Else
    MessageRequester("PureFFT Fehler","PORT.DLL nicht gefunden")
EndIf
    

Repeat
Until Inkey()<>""
PORTDLL_End()
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Soundkarte mittels port.dll auslesen

Beitrag von Martin66119 »

Guten Morgen,

ich habe soeben mal den Code bei meinem Netbook mit Windows 7 getestet. Klappt prima!!!!

Nun habe ich aber noch zwei Fragen (wenigstens im Moment).

1) Wenn ich das richtig verstehe, sind am Anfang des Programms alle Parameter, Variabeln, die die port.dll unterstützt declariert einschließlich der Proceduren für die Parameterübergabe.
Wenn nicht! Wo kann ich alles zur Verwendung z.B. der Com-Schnittstelle finden.

2) Wenn ich nun länger aufzeichen möchte, muss ich dann im Codeteile

If SOUNDIS()= -1
Debug SOUNDCAPIN()
*Sounds.c = AllocateMemory(22048)
MessageRequester("Aufnahme Soundcard","Aufnahme starten")
SOUNDIN(*Sounds,22048)
MessageRequester("Wiedergabe Soundcard","Wiedergabe starten")
SOUNDOUT(*Sounds,22048)
CreateFile(0,"Test.wav")
WriteData(0,@Sounds,22048)
CloseFile(0)
Else


die 22048 durch eine größere Zahl ersetzen?

Vielen Dank für die Hilfe!!!!!

Martin
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Re: Soundkarte mittels port.dll auslesen

Beitrag von Falko »

Das sind eigentlich nur Samples/Sekunde. In diesem Falle wären es zwei Sekunden.
Vermutlich habe ich da noch einen Fehler, da du ja schon geschrieben hattest,
11025 Samples/Sekunde. Du kannst diese einfach multiplizieren und schon hast du eine längere Zeit, die unterstützt wird. Ich hatte 11024 * 2 genommen, das wären die 22048. Geht aber trotzdem. Die Funktion kannst du ja noch abändern:

Code: Alles auswählen

....
If SOUNDIS()= -1
  Debug SOUNDCAPIN()
    *Sounds.c = AllocateMemory(11025*3) ; würde dann 3 Sekunden entsprechen
  MessageRequester("Aufnahme Soundcard","Aufnahme starten")
  SOUNDIN(*Sounds,11025*3)
  MessageRequester("Wiedergabe Soundcard","Wiedergabe starten")
  SOUNDOUT(*Sounds,11025*3)
  CreateFile(0,"Test.wav")
     WriteData(0,@Sounds,11025*3)
  CloseFile(0)
Else
    MessageRequester("PureFFT Fehler","PORT.DLL nicht gefunden")
EndIf

....
Die Deklarationen habe ich einfachhalber mit dem PBLibMaker erzeugt, den du hier im Forum vorfinden kannst. Evtl. müsste man noch einige Variablen anpassen.

Für die RS232 sind ja die Proceduren auch definiert.
Ob dort Strings vorkommen müssen, müsste man ausprobieren.
evtl. muss aber hier und da noch eine Anpassung wegen Strings etc. vorgenommen werden.

Wenn du die aktuell letzte PB-Version ab 4 hast, braucht man für RS232 keine extra port.dll, da diese Funktionen in PB schon vorhanden sind.

Gruß Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Soundkarte mittels port.dll auslesen

Beitrag von Martin66119 »

Hallo Falko,

vielen Dan für deine Antwort.

Leider muss ich noch eine Frage nachschieben!

Wenn man das Programm startet, kommt noch eine Anzeig mit Infos über die Soundkarte. Kann man diese Info abschalten?

Warum kann man denn die WAV-Datei nicht mit dem Mediaplayer abspielen?

Grüße
Martin
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Soundkarte mittels port.dll auslesen

Beitrag von Martin66119 »

Und noch eine Frage hinterher!!!

Und wo finde ich den PBLibMaker. Ich habe mit "PBLibMaker" gesucht, aber nichts finden können.

Martin
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Soundkarte mittels port.dll auslesen

Beitrag von Martin66119 »

Ich habes gefunden, wieso die Box mit der Meldung der Soundkarteneinstellungen kommt

SOUNDCAPIN
Die Soundkartenaufnahme-Eigenschaften werden in einer MessageBox
ausgegeben.
Parameter: keine
Rückgabe: keine

Grüße
Martin

PS.: Zuerst sollte ich alles lesen und dann schreiben :oops:
Antworten