Audiosignal vorgegebener Länge aufnehmen
-
Hi;
ich habe hier einen Codeausschnitt, der unter Linux ein Audiosignal vom Standard-Audioinput aufzeichnet, in einen char-Puffer speichert und anschließend wieder abspielt:using namespace std; #define CHANNELS 1 #define RATE 16000 // sampling rate! #define AFMT AFMT_S16_LE #define FRAG 0x7fff000b static int fd; int openAudio(int mode) { int mask; int channelsT = CHANNELS; int rateT = RATE; int afmtT = AFMT; int frag = FRAG; /***** open audio device /dev/dsp*/ if ((fd = open("/dev/dsp", mode, 0)) == -1) { return(-1); } /***** check whether 16 bit recording is possible on the current sound hardware */ if (ioctl(fd, SNDCTL_DSP_GETFMTS, &mask) == -1) { return(-1); } if (!(mask & AFMT)) { return(-1); } /***** set audio recording to 16kHz, 16bit, mono */ if (ioctl(fd, SNDCTL_DSP_SETFMT, &afmtT) == -1 || afmtT != AFMT || ioctl(fd, SNDCTL_DSP_CHANNELS, &channelsT)== -1 || channelsT != CHANNELS || ioctl(fd, SNDCTL_DSP_SPEED, &rateT) == -1 || rateT != RATE || ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frag) == -1) { return(-1); } return(1); } int closeAudio() { close(fd); return(1); } int playUtterance(unsigned char *wav, long length) { fprintf(stderr, "I write %d bytes\n",length); write(fd, wav, length); return(1); } unsigned char *getUtterance(long length) { int i;int n;int retval; unsigned char * buffer_raw; buffer_raw =(unsigned char *) malloc(sizeof(unsigned char)*length); memset (buffer_raw, 0x00, length); fprintf(stderr, "I read %d bytes\n",length); if ((retval = read(fd, buffer_raw, length)) == -1) { return NULL; } fprintf(stderr, "I got %d bytes\n",retval); return buffer_raw; } int main() { unsigned char * buffer; // read if (openAudio( O_RDONLY) > 0) { fprintf(stderr, "audio opened.\n"); } long nb = 128000; // number of bytes to read... buffer = getUtterance(nb); closeAudio(); if (openAudio(O_WRONLY) > 0) { fprintf(stderr, "audio opened.\n"); } playUtterance(buffer, nb ); closeAudio(); return 0; }Nun brauche ich allerdings das ganze in Windows, d.h. eine Funktion die ein Audiosignal aufzeichnen und ausgeben kann. Versuche mich da schon seit längerem dran, aber alle Versuche mit DirectSound etc blieben bei mir erfolglos; könnte mich hier jemand mal auf den richtigen Weg schubsen?
MfG & Danke
-
Guck Dir vielleicht mal das hier an: WinAPI wavAudio
Die API ist zwar auch nicht wirklich schön, aber ich finde es irgendwie benutzbarer als DirectSound.
-
Hm danke aber da werd ich auch nicht wirklich schlau drauß : /
Oder kannst du mir ein kleines Beispiel geben, wie eine Aufnahme aussehen würde?
-
Ein konkretes Beispiel kann ich Dir auf die Schnelle leider auch nicht herbei zaubern. Aber wenn Du eine Suchmaschine Deiner Wahl mit der Suche nach
waveInOpenetc. bemühst, dann solltest Du ordentlich fündig werden.
-
alles was ich dazu finde (zb hxxp://www.techmind.org/wave/) lehnt mein compiler einfach ab; um genau zu sein will er nicht mal mmsystem.h includen:
Fehler 1 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'MMVERSION' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 103 asdfg Fehler 2 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 103 asdfg Fehler 3 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 103 asdfg Fehler 4 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 111 asdfg Fehler 5 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 111 asdfg Fehler 6 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'ms' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 121 asdfg Fehler 7 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 121 asdfg Fehler 8 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 121 asdfg Fehler 9 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sample' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 122 asdfg Fehler 10 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 122 asdfg Fehler 11 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 122 asdfg Fehler 12 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'cb' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 123 asdfg Fehler 13 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 123 asdfg Fehler 14 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 123 asdfg Fehler 15 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'ticks' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 124 asdfg Fehler 16 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 124 asdfg Fehler 17 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 124 asdfg Fehler 18 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'hour' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 129 asdfg Fehler 19 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 129 asdfg Fehler 20 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 129 asdfg Fehler 21 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'min' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 130 asdfg Fehler 22 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 130 asdfg Fehler 23 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 130 asdfg Fehler 24 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sec' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 131 asdfg Fehler 25 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 131 asdfg Fehler 26 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 131 asdfg Fehler 27 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'frame' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 132 asdfg Fehler 28 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 132 asdfg Fehler 29 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 132 asdfg Fehler 30 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'fps' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 133 asdfg Fehler 31 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 133 asdfg Fehler 32 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 133 asdfg Fehler 33 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'dummy' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 134 asdfg Fehler 34 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 134 asdfg Fehler 35 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 134 asdfg Fehler 36 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'pad' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 136 asdfg Fehler 37 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 136 asdfg Fehler 38 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 136 asdfg Fehler 39 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'songptrpos' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 143 asdfg Fehler 40 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 143 asdfg Fehler 41 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 143 asdfg Fehler 42 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 146 asdfg Fehler 43 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 146 asdfg Fehler 44 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 146 asdfg Fehler 45 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 146 asdfg Fehler 46 error C2377: 'FAR': Neudefinition; typedef kann nicht mit einem anderen Symbol überladen werden h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 146 asdfg Fehler 47 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 146 asdfg Fehler 48 error C2065: 'HDRVR': nichtdeklarierter Bezeichner h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 286 asdfg Fehler 49 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 286 asdfg Fehler 50 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'dwDCISize' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 299 asdfg Fehler 51 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 299 asdfg Fehler 52 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 299 asdfg Fehler 53 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'lpszDCISectionName' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 300 asdfg Fehler 54 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 300 asdfg Fehler 55 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 300 asdfg Fehler 56 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'lpszDCIAliasName' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 301 asdfg Fehler 57 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 301 asdfg Fehler 58 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 301 asdfg Fehler 59 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'dnDevNode' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 302 asdfg Fehler 60 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 302 asdfg Fehler 61 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 302 asdfg Fehler 62 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 63 error C2371: 'NEAR': Neudefinition; unterschiedliche Basistypen h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 64 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 65 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 66 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 67 error C2086: 'int FAR': Neudefinition h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 68 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 303 asdfg Fehler 69 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'dwDCISize' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 337 asdfg Fehler 70 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 337 asdfg Fehler 71 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 337 asdfg Fehler 72 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'lpszDCISectionName' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 338 asdfg Fehler 73 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 338 asdfg Fehler 74 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 338 asdfg Fehler 75 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'lpszDCIAliasName' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 339 asdfg Fehler 76 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 339 asdfg Fehler 77 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 339 asdfg Fehler 78 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 79 error C2371: 'NEAR': Neudefinition; unterschiedliche Basistypen h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 80 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 81 error C2143: Syntaxfehler: Es fehlt ';' vor '*' h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 82 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 83 error C2086: 'int FAR': Neudefinition h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 84 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 340 asdfg Fehler 85 error C2065: 'CALLBACK': nichtdeklarierter Bezeichner h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 357 asdfg Fehler 86 error C2065: 'DRIVERPROC': nichtdeklarierter Bezeichner h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 357 asdfg Fehler 87 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 357 asdfg Fehler 88 fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen. h:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h 357 asdfg
-
Hallo,
du darfst auch nur <windows.h> includieren, wobei das Symbol WIN32_LEAN_AND_MEAN nicht definiert sein darf.
MfG,
Probe-Nutzer