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 waveInOpen etc. 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


Anmelden zum Antworten