linux使用c++录制一段3秒录音
要在Linux上使用C++录制一段3秒录音,可以使用PortAudio库来实现。PortAudio是一个跨平台的音频处理库,可以用于录制和播放音频。
以下是一个简单的C++代码示例,使用PortAudio库录制3秒钟的音频:
#include <iostream>
#include <portaudio.h>
#define SAMPLE_RATE 44100
#define NUM_CHANNELS 1
#define FRAMES_PER_BUFFER 512
typedef struct {
    float* buffer;
    unsigned long framesRecorded;
} paData;
static int recordCallback(const void* inputBuffer, void* outputBuffer,
                          unsigned long framesPerBuffer,
                          const PaStreamCallbackTimeInfo* timeInfo,
                          PaStreamCallbackFlags statusFlags,
                          void* userData) {
    paData* data = (paData*)userData;
    const float* in = (const float*)inputBuffer;
    float* out = &data->buffer[data->framesRecorded];
    for (unsigned i = 0; i < framesPerBuffer; i++) {
        *out++ = *in++;
    }
    data->framesRecorded += framesPerBuffer;
    return paContinue;
}
int main() {
    PaError err = Pa_Initialize();
    if (err != paNoError) {
        std::cerr << "Error initializing PortAudio: " << Pa_GetErrorText(err) << std::endl;
        return 1;
    }
    PaStream* stream;
    paData data;
    data.buffer = new float[SAMPLE_RATE * NUM_CHANNELS * 3];
    data.framesRecorded = 0;
    err = Pa_OpenDefaultStream(&stream,
                               NUM_CHANNELS,
                               0,
                               paFloat32,
                               SAMPLE_RATE,
                               FRAMES_PER_BUFFER,
                               recordCallback,
                               &data);
    if (err != paNoError) {
        std::cerr << "Error opening stream: " << Pa_GetErrorText(err) << std::endl;
        return 1;
    }
    err = Pa_StartStream(stream);
    if (err != paNoError) {
        std::cerr << "Error starting stream: " << Pa_GetErrorText(err) << std::endl;
        return 1;
    }
    std::cout << "Recording..." << std::endl;
    Pa_Sleep(3000);
    err = Pa_StopStream(stream);
    if (err != paNoError) {
        std::cerr << "Error stopping stream: " << Pa_GetErrorText(err) << std::endl;
        return 1;
    }
    err = Pa_CloseStream(stream);
    if (err != paNoError) {
        std::cerr << "Error closing stream: " << Pa_GetErrorText(err) << std::endl;
        return 1;
    }
    err = Pa_Terminate();
    if (err != paNoError) {
        std::cerr << "Error terminating PortAudio: " << Pa_GetErrorText(err) << std::endl;
        return 1;
    }
    std::cout << "Recording finished." << std::endl;
    // 在这里可以对录制的音频数据进行处理或保存
    delete[] data.buffer;
    return 0;
}
在编译和运行代码之前,请确保已经安装了PortAudio库,并使用以下命令编译代码:
g++ -o record record.cpp -lportaudio
然后运行可执行文件:
./record
代码将录制3秒钟的音频,并将其保存在data.buffer数组中。你可以在代码的最后对录制的音频数据进行处理或保存
原文地址: https://www.cveoy.top/t/topic/ioZK 著作权归作者所有。请勿转载和采集!