Audacity 3.2.0
Macros | Functions | Variables
FileFormats.cpp File Reference

Works with libsndfile to provide encoding and other file information. More...

#include "FileFormats.h"
#include <wx/arrstr.h>
#include <wx/intl.h>
#include "sndfile.h"
#include "Internat.h"
#include "MemoryX.h"
#include "widgets/AudacityMessageBox.h"
#include "Prefs.h"
#include <Types.h>
Include dependency graph for FileFormats.cpp:

Go to the source code of this file.

Macros

#define NUM_HEADERS   13
 

Functions

int sf_num_headers ()
 Get the number of container formats supported by libsndfile. More...
 
wxString sf_header_index_name (int format)
 Get the name of a container format from libsndfile. More...
 
unsigned int sf_header_index_to_type (int i)
 
int sf_num_encodings ()
 Get the number of data encodings libsndfile supports (in any container or none. More...
 
wxString sf_encoding_index_name (int i)
 Get the string name of the data encoding of the requested format. More...
 
unsigned int sf_encoding_index_to_subtype (int i)
 
wxString sf_header_name (int format)
 Get the string name of the specified container format. More...
 
wxString sf_header_shortname (int format)
 Get an abbreviated form of the string name of the specified format. More...
 
wxString sf_header_extension (int format)
 Get the most common file extension for the given format. More...
 
wxString sf_encoding_name (int encoding)
 Get the string name of the specified data encoding. More...
 
int sf_num_simple_formats ()
 
SF_FORMAT_INFO * sf_simple_format (int i)
 
bool sf_subtype_more_than_16_bits (unsigned int format)
 
bool sf_subtype_is_integer (unsigned int format)
 
int sf_subtype_bytes_per_sample (unsigned int format)
 
sampleFormat sf_subtype_to_effective_format (unsigned int format)
 Choose the narrowest value in the sampleFormat enumeration for a given libsndfile format. More...
 
FileExtensions sf_get_all_extensions ()
 
wxString sf_normalize_name (const char *name)
 
static OSType sf_header_mactype (int format)
 

Variables

static SF_FORMAT_INFO g_format_info
 
OSType MacNames [NUM_HEADERS]
 
ChoiceSetting FileFormatsCopyOrEditSetting
 
ChoiceSetting FileFormatsSaveWithDependenciesSetting
 

Detailed Description

Works with libsndfile to provide encoding and other file information.

Definition in file FileFormats.cpp.

Macro Definition Documentation

◆ NUM_HEADERS

#define NUM_HEADERS   13

Definition at line 295 of file FileFormats.cpp.

Function Documentation

◆ sf_encoding_index_name()

wxString sf_encoding_index_name ( int  encoding_num)

Get the string name of the data encoding of the requested format.

uses SFC_GET_FORMAT_SUBTYPE

Definition at line 84 of file FileFormats.cpp.

85{
86 SF_FORMAT_INFO format_info ;
87
88 memset(&format_info, 0, sizeof(format_info));
89 format_info.format = i;
90 sf_command (NULL, SFC_GET_FORMAT_SUBTYPE,
91 &format_info, sizeof (format_info));
92 return sf_normalize_name(format_info.name);
93}
wxString sf_normalize_name(const char *name)

References sf_normalize_name().

Referenced by ExportPCMOptions::GetEncodings(), and ImportRawDialog::ImportRawDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sf_encoding_index_to_subtype()

unsigned int sf_encoding_index_to_subtype ( int  i)

Definition at line 95 of file FileFormats.cpp.

96{
97 SF_FORMAT_INFO format_info ;
98
99 memset(&format_info, 0, sizeof(format_info));
100 format_info.format = i;
101 sf_command (NULL, SFC_GET_FORMAT_SUBTYPE,
102 &format_info, sizeof (format_info));
103
104 return format_info.format & SF_FORMAT_SUBMASK;
105}

Referenced by ExportPCMOptions::GetEncodings(), ImportRawDialog::ImportRawDialog(), ExportPCMOptions::OnEncodingChoice(), and ExportPCMOptions::~ExportPCMOptions().

Here is the caller graph for this function:

◆ sf_encoding_name()

wxString sf_encoding_name ( int  encoding_num)

Get the string name of the specified data encoding.

AND encoding_num with SF_FORMAT_SUBMASK to get only the data encoding and then use SFC_GET_FORMAT_INFO to get the description

Parameters
encoding_numthe libsndfile encoding to get the name for (only the data encoding is used)

Definition at line 157 of file FileFormats.cpp.

158{
159 SF_FORMAT_INFO format_info;
160
161 memset(&format_info, 0, sizeof(format_info));
162 format_info.format = (encoding & SF_FORMAT_SUBMASK);
163 sf_command(NULL, SFC_GET_FORMAT_INFO, &format_info, sizeof(format_info));
164
165 return sf_normalize_name(format_info.name);
166}

References sf_normalize_name().

Here is the call graph for this function:

◆ sf_get_all_extensions()

FileExtensions sf_get_all_extensions ( )

Definition at line 241 of file FileFormats.cpp.

242{
244 SF_FORMAT_INFO format_info;
245 int count, k;
246
247 memset(&format_info, 0, sizeof(format_info));
248
249 sf_command(NULL, SFC_GET_FORMAT_MAJOR_COUNT,
250 &count, sizeof(count));
251
252 for(k=0; k<count; k++) {
253 format_info.format = k;
254 sf_command(NULL, SFC_GET_FORMAT_MAJOR,
255 &format_info, sizeof (format_info)) ;
256
257 exts.push_back(LAT1CTOWX(format_info.extension));
258 }
259
260 // Some other extensions that are often sound files
261 // but aren't included by libsndfile
262
263 exts.insert( exts.end(), {
264 wxT("aif") , // AIFF file with a DOS-style extension
265 wxT("ircam") ,
266 wxT("snd") ,
267 wxT("svx") ,
268 wxT("svx8") ,
269 wxT("sv16") ,
270 } );
271
272 return exts;
273}
static const auto exts
Definition: ImportAUP.cpp:57
#define LAT1CTOWX(X)
Definition: Internat.h:160
Extend wxArrayString with move operations and construction and insertion fromstd::initializer_list.

References exts, and LAT1CTOWX.

Referenced by ExportPCM::ExportPCM().

Here is the caller graph for this function:

◆ sf_header_extension()

wxString sf_header_extension ( int  format)

Get the most common file extension for the given format.

AND the given format with SF_FORMAT_TYPEMASK to get just the container format, then retrieve the most common extension using SFC_GET_FORMAT_INFO.

Parameters
formatthe libsndfile format to get the name for (only the container part is used)

Definition at line 146 of file FileFormats.cpp.

147{
148 SF_FORMAT_INFO format_info;
149
150 memset(&format_info, 0, sizeof(format_info));
151 format_info.format = (format & SF_FORMAT_TYPEMASK);
152 sf_command(NULL, SFC_GET_FORMAT_INFO, &format_info, sizeof(format_info));
153
154 return LAT1CTOWX(format_info.extension);
155}
int format
Definition: ExportPCM.cpp:56

References format, and LAT1CTOWX.

Referenced by ExportPCM::ExportPCM(), ExportPCM::GetExtension(), and ExportPCMOptions::SendSuffixEvent().

Here is the caller graph for this function:

◆ sf_header_index_name()

wxString sf_header_index_name ( int  format_num)

Get the name of a container format from libsndfile.

Uses SFC_GET_FORMAT_MAJOR in the sf_command() interface. Resulting C string from libsndfile is converted to a wxString

Parameters
format_numThe libsndfile format number for the container format required

Definition at line 47 of file FileFormats.cpp.

48{
49 SF_FORMAT_INFO format_info;
50
51 memset(&format_info, 0, sizeof(format_info));
52 format_info.format = format;
53 sf_command(NULL, SFC_GET_FORMAT_MAJOR,
54 &format_info, sizeof (format_info)) ;
55
56 return LAT1CTOWX(format_info.name);
57}

References format, and LAT1CTOWX.

Referenced by ExportPCMOptions::GetTypes().

Here is the caller graph for this function:

◆ sf_header_index_to_type()

unsigned int sf_header_index_to_type ( int  i)

Definition at line 59 of file FileFormats.cpp.

60{
61 SF_FORMAT_INFO format_info ;
62
63 memset(&format_info, 0, sizeof(format_info));
64 format_info.format = i;
65 sf_command (NULL, SFC_GET_FORMAT_MAJOR,
66 &format_info, sizeof (format_info));
67
68 return format_info.format & SF_FORMAT_TYPEMASK;
69}

Referenced by ExportPCMOptions::GetTypes(), and ExportPCMOptions::OnHeaderChoice().

Here is the caller graph for this function:

◆ sf_header_mactype()

static OSType sf_header_mactype ( int  format)
static

Definition at line 323 of file FileFormats.cpp.

324{
325 if (format >= 0x10000)
326 return MacNames[(format/0x10000)-1];
327 else if (format>=0 && format<NUM_HEADERS)
328 return MacNames[format];
329 else
330 return '\?\?\?\?';
331}
OSType MacNames[NUM_HEADERS]
#define NUM_HEADERS

References format, MacNames, and NUM_HEADERS.

◆ sf_header_name()

wxString sf_header_name ( int  format)

Get the string name of the specified container format.

AND format with SF_FORMAT_TYPEMASK to get only the container format and then use SFC_GET_FORMAT_INFO to get the description

Parameters
formatthe libsndfile format to get the name for (only the container part is used)

Definition at line 111 of file FileFormats.cpp.

112{
113 SF_FORMAT_INFO format_info;
114
115 memset(&format_info, 0, sizeof(format_info));
116 format_info.format = (format & SF_FORMAT_TYPEMASK);
117 sf_command(NULL, SFC_GET_FORMAT_INFO, &format_info, sizeof(format_info));
118
119 return LAT1CTOWX(format_info.name);
120}

References format, and LAT1CTOWX.

Referenced by ExportPCM::Export(), and PCMImportFileHandle::GetFileDescription().

Here is the caller graph for this function:

◆ sf_header_shortname()

wxString sf_header_shortname ( int  format)

Get an abbreviated form of the string name of the specified format.

Do sf_header_name() then truncate the string at the first space in the name to get just the first word of the format name.

Parameters
formatthe libsndfile format to get the name for (only the container part is used)

Definition at line 122 of file FileFormats.cpp.

123{
124 SF_FORMAT_INFO format_info;
125 int i;
126 wxString s;
127
128 memset(&format_info, 0, sizeof(format_info));
129 format_info.format = (format & SF_FORMAT_TYPEMASK);
130 sf_command(NULL, SFC_GET_FORMAT_INFO, &format_info, sizeof(format_info));
131
132 MallocString<> tmp { strdup( format_info.name ) };
133 i = 0;
134 while(tmp[i]) {
135 if (tmp[i]==' ')
136 tmp[i] = 0;
137 else
138 i++;
139 }
140
141 s = LAT1CTOWX(tmp.get());
142
143 return s;
144}
std::unique_ptr< Character[], freer > MallocString
Definition: MemoryX.h:146

References format, and LAT1CTOWX.

Referenced by ExportPCM::GetFormat(), LoadEncoding(), and SaveEncoding().

Here is the caller graph for this function:

◆ sf_normalize_name()

wxString sf_normalize_name ( const char *  name)

Definition at line 275 of file FileFormats.cpp.

276{
277 wxString n = LAT1CTOWX(name);
278
279 n.Replace(wxT("8 bit"), wxT("8-bit"));
280 n.Replace(wxT("16 bit"), wxT("16-bit"));
281 n.Replace(wxT("24 bit"), wxT("24-bit"));
282 n.Replace(wxT("32 bit"), wxT("32-bit"));
283 n.Replace(wxT("64 bit"), wxT("64-bit"));
284
285 return n;
286}
wxT("CloseDown"))
const TranslatableString name
Definition: Distortion.cpp:82

References LAT1CTOWX, name, and wxT().

Referenced by sf_encoding_index_name(), and sf_encoding_name().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sf_num_encodings()

int sf_num_encodings ( )

Get the number of data encodings libsndfile supports (in any container or none.

Definition at line 75 of file FileFormats.cpp.

76{
77 int count ;
78
79 sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ;
80
81 return count;
82}

Referenced by ExportPCMOptions::GetEncodings(), and ImportRawDialog::ImportRawDialog().

Here is the caller graph for this function:

◆ sf_num_headers()

int sf_num_headers ( )

Get the number of container formats supported by libsndfile.

Uses SFC_GET_FORMAT_MAJOR_COUNT in sf_command interface

Definition at line 37 of file FileFormats.cpp.

38{
39 int count;
40
41 sf_command(NULL, SFC_GET_FORMAT_MAJOR_COUNT,
42 &count, sizeof(count));
43
44 return count;
45}

Referenced by ExportPCMOptions::GetTypes().

Here is the caller graph for this function:

◆ sf_num_simple_formats()

int sf_num_simple_formats ( )

Definition at line 168 of file FileFormats.cpp.

169{
170 int count ;
171
172 sf_command (NULL, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ;
173
174 return count;
175}

◆ sf_simple_format()

SF_FORMAT_INFO * sf_simple_format ( int  i)

Definition at line 179 of file FileFormats.cpp.

180{
181 memset(&g_format_info, 0, sizeof(g_format_info));
182
183 g_format_info.format = i;
184 sf_command (NULL, SFC_GET_SIMPLE_FORMAT,
185 &g_format_info, sizeof(g_format_info));
186
187 return &g_format_info;
188}
static SF_FORMAT_INFO g_format_info

References g_format_info.

◆ sf_subtype_bytes_per_sample()

int sf_subtype_bytes_per_sample ( unsigned int  format)

Definition at line 207 of file FileFormats.cpp.

207 {
208 unsigned int subtype = format & SF_FORMAT_SUBMASK;
209 if( subtype == SF_FORMAT_PCM_S8 )
210 return 1;
211 if( subtype == SF_FORMAT_PCM_U8 )
212 return 1;
213 if( subtype == SF_FORMAT_PCM_16 )
214 return 2;
215 if( subtype == SF_FORMAT_PCM_24 )
216 return 3;
217 if( subtype == SF_FORMAT_PCM_32 )
218 return 4;
219 if( subtype == SF_FORMAT_FLOAT )
220 return 4;
221 if( subtype == SF_FORMAT_DOUBLE )
222 return 8;
223
224 // might be different to 2, but this is good enough for
225 // WAV and AIFF file size error trapping.
226 return 2;
227}

References format.

Referenced by ExportPCM::Export().

Here is the caller graph for this function:

◆ sf_subtype_is_integer()

bool sf_subtype_is_integer ( unsigned int  format)

Definition at line 199 of file FileFormats.cpp.

200{
201 unsigned int subtype = format & SF_FORMAT_SUBMASK;
202 return (subtype == SF_FORMAT_PCM_16 ||
203 subtype == SF_FORMAT_PCM_24 ||
204 subtype == SF_FORMAT_PCM_32);
205}

References format.

Referenced by AUPImportFileHandle::AddSamples(), and ExportPCM::Export().

Here is the caller graph for this function:

◆ sf_subtype_more_than_16_bits()

bool sf_subtype_more_than_16_bits ( unsigned int  format)

Definition at line 190 of file FileFormats.cpp.

191{
192 unsigned int subtype = format & SF_FORMAT_SUBMASK;
193 return (subtype == SF_FORMAT_FLOAT ||
194 subtype == SF_FORMAT_DOUBLE ||
195 subtype == SF_FORMAT_PCM_24 ||
196 subtype == SF_FORMAT_PCM_32);
197}

References format.

Referenced by AUPImportFileHandle::AddSamples(), ExportPCM::Export(), and sf_subtype_to_effective_format().

Here is the caller graph for this function:

◆ sf_subtype_to_effective_format()

sampleFormat sf_subtype_to_effective_format ( unsigned int  format)

Choose the narrowest value in the sampleFormat enumeration for a given libsndfile format.

Definition at line 229 of file FileFormats.cpp.

230{
231 unsigned int subtype = format & SF_FORMAT_SUBMASK;
232 if (subtype == SF_FORMAT_PCM_24)
233 return int24Sample;
235 return widestSampleFormat;
236 else
237 return int16Sample;
238}
bool sf_subtype_more_than_16_bits(unsigned int format)
@ widestSampleFormat
Definition: SampleFormat.h:38
@ int16Sample
Definition: SampleFormat.h:32
@ int24Sample
Definition: SampleFormat.h:33

References format, int16Sample, int24Sample, sf_subtype_more_than_16_bits(), and widestSampleFormat.

Referenced by ImportRaw(), and PCMImportFileHandle::PCMImportFileHandle().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ FileFormatsCopyOrEditSetting

ChoiceSetting FileFormatsCopyOrEditSetting
Initial value:
{
wxT("/FileFormats/CopyOrEditUncompressedData"),
{
wxT("copy"),
},
wxT("edit"),
},
},
0
}
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...

Definition at line 353 of file FileFormats.cpp.

◆ FileFormatsSaveWithDependenciesSetting

ChoiceSetting FileFormatsSaveWithDependenciesSetting
Initial value:
{
wxT("/FileFormats/SaveProjectWithDependencies"),
{
{ wxT("copy"), XXO("&Copy all audio into project (safest)") },
{ wxT("never"), XXO("Do &not copy any audio") },
{ wxT("ask"), XXO("As&k") },
},
2
}
#define XXO(s)
Definition: Internat.h:44

Definition at line 368 of file FileFormats.cpp.

Referenced by DependencyDialog::SaveFutureActionChoice().

◆ g_format_info

SF_FORMAT_INFO g_format_info
static

Definition at line 177 of file FileFormats.cpp.

Referenced by sf_simple_format().

◆ MacNames

OSType MacNames[NUM_HEADERS]
Initial value:
= {
'WAVE',
'AIFF',
'NeXT',
'BINA',
'PAR ',
'8SVX',
'NIST',
'VOC ',
'\?\?\?\?',
'SF ',
'W64 ',
'MAT4',
'MAT5',
}

Definition at line 307 of file FileFormats.cpp.

Referenced by sf_header_mactype().