forked from schnitzeltony/soundfont-cmdline-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwavtest.cc
39 lines (37 loc) · 1.05 KB
/
wavtest.cc
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
#include "iffdigest.h"
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
main(int argc, char* argv[])
{
if(argc<2) {
std::cerr<<"usage: "<<argv[0]<<" filename\n";
return 2;
}
int fd = open(argv[1], O_RDONLY);
struct stat stbuf;
fstat(fd, &stbuf);
char* data = (char*)mmap(0, stbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
IFFDigest iff(data, stbuf.st_size);
IFFChunkIterator i=iff.ck_find(iff_ckid("fmt "));
if(i==iff.ck_end()) {
std::cerr<<argv[1]<<" is not a valid WAV file.\n";
return 1;
} else {
const char* fmt = (*i).dataPtr();
unsigned short wformat = iff_u16_le(fmt);
unsigned short wchannels = iff_u16_le(fmt+2);
unsigned int smplrate = iff_u32_le(fmt+4);
std::cout<<argv[1]<<": format "<<wformat<<", "<<wchannels<<" channels, "<<smplrate<<" Hz";
if(wformat == 1) { // PCM file
std::cout<<", PCM, "<<(iff_u16_le(fmt+14))<<" bits/sample";
}
std::cout<<'\n';
}
munmap(data, stbuf.st_size);
close(fd);
return 0;
}