Audiosignal vorgegebener Länge aufnehmen
-
Hi; habe den gleichen Beitrag bereits im C++ Forum gepostet; da mir eine Lösung in C# allerdings genauso recht wäre, hier nochmal:
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
-
Falsches Forum.
Tippe auf Ansi C (using namespace std; wird ja nicht benötigt, oder?).
Simon
-
simon.gysi schrieb:
Falsches Forum.
Ich will ja wissen, wie dieser Code in C# aussehen würde
-
-
Danke für nichts
-
Erwartest du jetzt, dass wir dir den Code in C# umschreiben?
-
Erwartest du dass ich für nen google link dankbar bin?
-
Ja, wenn du schon nicht in der Lage bist selbst Google bedienen zu können, dann solltest du wenigstens dankbar sein, wenn es ein Anderer für dich tut.
-
Nein, es wird erwartet, dass Du Dich mit dem Material und den vielen Beispielcodes die sich hinter dem Link verbergen auseinander setzt und ggf. mit konkreten Fragen an die Community trittst.