使用/pulse/simple.h记录

时间:2013-05-27 23:06:29

标签: c ubuntu audio-recording pulseaudio

我正在尝试使用simple.h pulseaudio头文件将我的语音从笔记本电脑上的麦克风录制成阵列,但我似乎无法弄明白。每当我录制并重播我的录音时,它都是一声高亢的嘟嘟声,我跟着例子等,但我似乎无法解决这个问题,有人可以帮助我。 我基本上是在破解这个例子" parec-simple.c"在doxygen页面中给出。我已经尝试将buf的输出路由到stdout,然后使用libre-office calc绘制图表以查看输出是否看起来像声音,但事实并非如此。

这是我使用的代码

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

#include <pulse/simple.h>
#include <pulse/error.h>

#define BUFSIZE 1024

FILE *output; 

/* A simple routine calling UNIX write() in a loop */
void loop_write(uint8_t *data) {
  register int size = 1023;

while (size > 0) 
{
    fprintf(output,"%"SCNu8"\n",data[size]  )  ;    
        size --;
    }

}

int main(int argc, char*argv[]) {
output = fopen("/home/donnell/output", "w");

/* The sample type to use */
static const pa_sample_spec ss = {
    .format = PA_SAMPLE_S16LE,
    .rate = 41000,
    .channels = 2
};
pa_simple *s = NULL;
int ret = 1;
int error;

/* Create the recording stream */
if (!(s = pa_simple_new(NULL, argv[0], PA_STREAM_RECORD, NULL,  "record", &ss, NULL, NULL, &error))) {
    fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n",   pa_strerror(error));
    goto finish;
}

for (;;) {
    uint8_t buf[BUFSIZE];

    /* Record some data ... */
    if (pa_simple_read(s, buf, sizeof(buf), &error) < 0) {
        fprintf(stderr, __FILE__": pa_simple_read() failed: %s\n",  pa_strerror(error));
        goto finish;
    }

   /* and write it to fle*/
loop_write(buf);

}

ret = 0;

finish:

if (s)
    pa_simple_free(s);

return ret;
}

0 个答案:

没有答案