3 #include <ardour/sndfile_helpers.h>
9 const char * const sndfile_header_formats_strings[SNDFILE_HEADER_FORMATS+1] = {
12 N_("raw (no header)"),
13 N_("PAF (Ensoniq Paris)"),
16 N_("W64 (64 bit WAV)"),
20 int sndfile_header_formats[SNDFILE_HEADER_FORMATS] = {
30 const char * const sndfile_bitdepth_formats_strings[SNDFILE_BITDEPTH_FORMATS+1] = {
39 int sndfile_bitdepth_formats[SNDFILE_BITDEPTH_FORMATS] = {
47 const char * const sndfile_endian_formats_strings[SNDFILE_ENDIAN_FORMATS+1] = {
48 N_("Little-endian (Intel)"),
49 N_("Big-endian (Mac)"),
53 int sndfile_endian_formats[SNDFILE_ENDIAN_FORMATS] = {
59 sndfile_header_format_from_string (string str)
61 for (int n = 0; sndfile_header_formats_strings[n]; ++n) {
62 if (str == sndfile_header_formats_strings[n]) {
63 return sndfile_header_formats[n];
70 sndfile_bitdepth_format_from_string (string str)
72 for (int n = 0; sndfile_bitdepth_formats_strings[n]; ++n) {
73 if (str == sndfile_bitdepth_formats_strings[n]) {
74 return sndfile_bitdepth_formats[n];
81 sndfile_endian_format_from_string (string str)
83 for (int n = 0; sndfile_endian_formats_strings[n]; ++n) {
84 if (str == sndfile_endian_formats_strings[n]) {
85 return sndfile_endian_formats[n];
92 sndfile_data_width (int format)
94 int tval = format & 0xf;
97 case SF_FORMAT_PCM_S8:
98 case SF_FORMAT_PCM_U8:
100 case SF_FORMAT_PCM_16:
102 case SF_FORMAT_PCM_24:
104 case SF_FORMAT_PCM_32:
106 case SF_FORMAT_FLOAT:
107 return 1; // heh, heh
109 // we don't handle anything else within ardour
115 sndfile_major_format(int format)
117 static map<int, string> m;
120 SF_FORMAT_INFO format_info;
122 sf_command(0, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int));
123 for (int i = 0; i < count; ++i){
124 format_info.format = i;
125 sf_command (0, SFC_GET_FORMAT_MAJOR,
126 &format_info, sizeof (format_info));
127 m[format_info.format & SF_FORMAT_TYPEMASK] = format_info.name;
131 map<int, string>::iterator p = m.find(format & SF_FORMAT_TYPEMASK);
133 return m[format & SF_FORMAT_TYPEMASK];
140 sndfile_minor_format(int format)
142 static map<int, string> m;
145 SF_FORMAT_INFO format_info;
147 sf_command(0, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int));
148 for (int i = 0; i < count; ++i){
149 format_info.format = i;
150 sf_command (0, SFC_GET_FORMAT_SUBTYPE,
151 &format_info, sizeof (format_info));
152 m[format_info.format & SF_FORMAT_SUBMASK] = format_info.name;
156 map<int, string>::iterator p = m.find(format & SF_FORMAT_SUBMASK);
158 return m[format & SF_FORMAT_SUBMASK];