Soundkarte mittels port.dll auslesen
Verfasst: 10.07.2010 10:47
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:
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";
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()<>""
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";