[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++에서 사운드 파일을 읽고 쓰는 방법을 살펴보았습니다. 물론 라이브러리의 다른 기능을 사용하여 더 다양한 작업을 수행할 수 있습니다.
참고 문헌
- libsndfile 공식 문서
- C++에 음원 처리에 관한 훌륭한 글! link