-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathwav.h
More file actions
48 lines (38 loc) · 1.45 KB
/
Copy pathwav.h
File metadata and controls
48 lines (38 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void load_wav_file(const char *filename, int16_t **samples, sf_count_t *num_samples, int *sample_rate, int *channels) {
SF_INFO sfinfo;
memset(&sfinfo, 0, sizeof(sfinfo));
SNDFILE *infile = sf_open(filename, SFM_READ, &sfinfo);
if (!infile) {
die("Failed to open input file: %s", sf_strerror(NULL));
}
*sample_rate = sfinfo.samplerate;
*channels = sfinfo.channels;
*num_samples = sfinfo.frames * sfinfo.channels;
*samples = (int16_t *)malloc(*num_samples * sizeof(int16_t));
if (!*samples) {
sf_close(infile);
die("Failed to allocate memory for input samples");
}
if (sf_read_short(infile, *samples, *num_samples) != *num_samples) {
free(*samples);
sf_close(infile);
die("Failed to read samples from input file");
}
sf_close(infile);
}
void write_wav_file(const char *filename, int16_t *samples, sf_count_t num_samples, int sample_rate, int channels) {
SF_INFO sfinfo;
memset(&sfinfo, 0, sizeof(sfinfo));
sfinfo.samplerate = sample_rate;
sfinfo.channels = channels;
sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
SNDFILE *outfile = sf_open(filename, SFM_WRITE, &sfinfo);
if (!outfile) {
die("Failed to open output file: %s", sf_strerror(NULL));
}
if (sf_write_short(outfile, samples, num_samples) != num_samples) {
sf_close(outfile);
die("Failed to write samples to output file");
}
sf_close(outfile);
}