在Linux上录制麦克风到wav或mp3文件?

kil*_*ode 2 c linux audio-recording

我不知道从哪里开始,我试图在linux上录制麦克风输入,是否有可能,我的意思是我知道一切都是linux下的文件描述符,它会像用fopen/fread读取文件一样容易吗?还有,它需要root吗?

谢谢.

Nik*_*chi 5

它当然是可能的,但它并不像从文件中读取那么简单.最简单的方法是使用一个库,例如PortAudio.PortAudio是跨平台的,使用起来相当简单.

PortAudio将允许您从麦克风录制,但它对文件格式一无所知.为此你需要另一个图书馆.我从来没有使用它,但libsndfile库可能会做你需要的.

在任何情况下,您都必须从麦克风录制并将数据存储在缓冲区中,然后将该缓冲区写入文件(通过libsndfile或类似的东西).

编辑:示例PortAudio的东西(未经测试,但你应该明白).

int main()
{
    PaStream *stream;
    /* allocate a buffer that can hold 30 seconds of audio at 44,100Hz */
    int len = 44100*30;
    float *buffer = malloc(len*sizeof(float));

    Pa_Initialize();

    /* open a default input (microphone) stream with a sampling rate of 44,100Hz */
    Pa_OpenDefaultStream(&stream, 1, 0, paFloat32, 44100, paFramesPerBufferUnspecified, NULL, NULL);
    Pa_StartStream(stream);
    Pa_ReadStream(stream, buffer, len);

    /* write buffer to a file here */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)