[c++] 사운드 파일 읽기와 쓰기

이번 글에서는 C++로 사운드 파일을 읽고 쓰는 방법을 살펴보겠습니다.

사운드 파일 읽기

C++에서 사운드 파일을 읽으려면 libsndfile 라이브러리를 사용할 수 있습니다. 다음은 libsndfile을 사용하여 WAV 파일을 읽는 방법입니다.

#include <iostream>
#include <sndfile.h>

int main() {
    SndfileHandle file("input.wav", SFM_READ, SF_FORMAT_WAV);
    if (file.error()) {
        std::cerr << "Error: failed to open input file" << std::endl;
        return 1;
    }

    const int frames = file.frames();
    const int channels = file.channels();
    std::vector<double> data(frames * channels);
    file.readf(data.data(), frames);
    
    // 데이터를 처리하는 코드를 추가합니다.
    
    return 0;
}

위의 코드에서는 libsndfile을 사용하여 input.wav 파일을 읽고 파일에서 데이터를 읽어옵니다. 읽은 데이터는 data 벡터에 저장됩니다.

사운드 파일 쓰기

사운드 파일을 쓰려면 libsndfile을 사용할 수 있습니다. 다음은 libsndfile을 사용하여 WAV 파일을 쓰는 방법입니다.

#include <iostream>
#include <sndfile.h>

int main() {
    const int frames = 44100;  // 쓸 데이터의 프레임 수
    const int channels = 2;   // 채널 수
    std::vector<double> data(frames * channels);  // 쓸 데이터
    
    // 데이터를 채워 넣는 코드를 추가합니다.
    
    SndfileHandle file("output.wav", SFM_WRITE, SF_FORMAT_WAV | SF_FORMAT_PCM_16, channels, 44100);
    if (file.error()) {
        std::cerr << "Error: failed to open output file" << std::endl;
        return 1;
    }
    
    file.writef(data.data(), frames);
    
    return 0;
}

위의 코드에서는 libsndfile을 사용하여 output.wav 파일에 데이터를 씁니다.

결론

위 코드 예제를 통해 C++에서 사운드 파일을 읽고 쓰는 방법을 살펴보았습니다. 물론 라이브러리의 다른 기능을 사용하여 더 다양한 작업을 수행할 수 있습니다.

참고 문헌