DSP

从网上找到了一个 读取声音的程序

2019-07-13 16:37发布

  /* Ubuntu 10.04下测试通过  *  * Records several seconds of sound, then echoes it back.  * Runs until Control-C is pressed.  */   #include #include #include #include #include #include #include   #define LENGTH 3    /* how many seconds of speech to store */ #define RATE 8000   /* the sampling rate */ #define SIZE 8      /* sample size: 8 or 16 bits */ #define CHANNELS 1  /* 1 = mono 2 = stereo */   /* this buffer holds the digitized audio */ unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8];   int main() {   int fd; /* sound device file descriptor */   int arg; /* argument for ioctl calls */   int status;   /* return status of system calls */     char *audio = "/dev/audio";     /* open sound device */   fd = open(audio, O_RDWR);   if (fd < 0) {     perror("open of failed");     exit(1);   }     /* set sampling parameters */   arg = SIZE;   /* sample size */   status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);   if (status == -1)     perror("SOUND_PCM_WRITE_BITS ioctl failed");   if (arg != SIZE)     perror("unable to set sample size");     arg = CHANNELS;  /* mono or stereo */   status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);   if (status == -1)     perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");   if (arg != CHANNELS)     perror("unable to set number of channels");     arg = RATE;   /* sampling rate */   status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);   if (status == -1)     perror("SOUND_PCM_WRITE_WRITE ioctl failed");     while (1) { /* loop until Control-C */     printf("Say something:/n");     status = read(fd, buf, sizeof(buf)); /* record some sound */     if (status != sizeof(buf))       perror("read wrong number of bytes");     printf("You said:/n");     status = write(fd, buf, sizeof(buf)); /* play it back */     if (status != sizeof(buf))       perror("wrote wrong number of bytes");     /* wait for playback to complete before recording again */     status = ioctl(fd, SOUND_PCM_SYNC, 0);   if (status == -1)     perror("SOUND_PCM_SYNC ioctl failed");   } }