5 #include <ardour/sndfile_helpers.h>
12 const char * const sndfile_header_formats_strings[SNDFILE_HEADER_FORMATS+1] = {
15 N_("raw (no header)"),
16 N_("PAF (Ensoniq Paris)"),
19 N_("W64 (64 bit WAV)"),
23 const char* const sndfile_file_endings_strings[SNDFILE_HEADER_FORMATS+1] = {
34 int sndfile_header_formats[SNDFILE_HEADER_FORMATS] = {
44 const char * const sndfile_bitdepth_formats_strings[SNDFILE_BITDEPTH_FORMATS+1] = {
53 int sndfile_bitdepth_formats[SNDFILE_BITDEPTH_FORMATS] = {
61 const char * const sndfile_endian_formats_strings[SNDFILE_ENDIAN_FORMATS+1] = {
62 N_("Little-endian (Intel)"),
63 N_("Big-endian (Mac)"),
67 int sndfile_endian_formats[SNDFILE_ENDIAN_FORMATS] = {
73 sndfile_header_format_from_string (string str)
75 for (int n = 0; sndfile_header_formats_strings[n]; ++n) {
76 if (str == sndfile_header_formats_strings[n]) {
77 return sndfile_header_formats[n];
84 sndfile_bitdepth_format_from_string (string str)
86 for (int n = 0; sndfile_bitdepth_formats_strings[n]; ++n) {
87 if (str == sndfile_bitdepth_formats_strings[n]) {
88 return sndfile_bitdepth_formats[n];
95 sndfile_endian_format_from_string (string str)
97 for (int n = 0; sndfile_endian_formats_strings[n]; ++n) {
98 if (str == sndfile_endian_formats_strings[n]) {
99 return sndfile_endian_formats[n];
106 sndfile_file_ending_from_string (string str)
108 static vector<string> file_endings;
110 if (file_endings.empty()) {
111 file_endings = internationalize((const char **) sndfile_file_endings_strings);
114 for (int n = 0; sndfile_header_formats_strings[n]; ++n) {
115 if (str == sndfile_header_formats_strings[n]) {
116 return file_endings[n];
123 sndfile_data_width (int format)
125 int tval = format & 0xf;
128 case SF_FORMAT_PCM_S8:
129 case SF_FORMAT_PCM_U8:
131 case SF_FORMAT_PCM_16:
133 case SF_FORMAT_PCM_24:
135 case SF_FORMAT_PCM_32:
137 case SF_FORMAT_FLOAT:
138 return 1; // heh, heh
140 // we don't handle anything else within ardour
146 sndfile_major_format(int format)
148 static map<int, string> m;
151 SF_FORMAT_INFO format_info;
153 sf_command(0, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int));
154 for (int i = 0; i < count; ++i){
155 format_info.format = i;
156 sf_command (0, SFC_GET_FORMAT_MAJOR,
157 &format_info, sizeof (format_info));
158 m[format_info.format & SF_FORMAT_TYPEMASK] = format_info.name;
162 map<int, string>::iterator p = m.find(format & SF_FORMAT_TYPEMASK);
164 return m[format & SF_FORMAT_TYPEMASK];
171 sndfile_minor_format(int format)
173 static map<int, string> m;
176 SF_FORMAT_INFO format_info;
178 sf_command(0, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int));
179 for (int i = 0; i < count; ++i){
180 format_info.format = i;
181 sf_command (0, SFC_GET_FORMAT_SUBTYPE,
182 &format_info, sizeof (format_info));
183 m[format_info.format & SF_FORMAT_SUBMASK] = format_info.name;
187 map<int, string>::iterator p = m.find(format & SF_FORMAT_SUBMASK);
189 return m[format & SF_FORMAT_SUBMASK];