Audacity  3.0.3
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 dependency graph for FileFormats.cpp:

Go to the source code of this file.

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)
 

Variables

static SF_FORMAT_INFO g_format_info
 
ChoiceSetting FileFormatsCopyOrEditSetting
 
ChoiceSetting FileFormatsSaveWithDependenciesSetting
 

Detailed Description

Works with libsndfile to provide encoding and other file information.

Definition in 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 }

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 }

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 }

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_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 }

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 }

References LAT1CTOWX, and name.

Referenced by sf_encoding_index_name(), and sf_encoding_name().

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 }

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 }

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
}

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
}

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().

g_format_info
static SF_FORMAT_INFO g_format_info
Definition: FileFormats.cpp:177
MallocString
std::unique_ptr< Character[], freer > MallocString
Definition: MemoryX.h:274
int24Sample
@ int24Sample
Definition: SampleFormat.h:33
wxArrayStringEx
Extend wxArrayString with move operations and construction and insertion fromstd::initializer_list.
Definition: wxArrayStringEx.h:18
ComponentInterfaceSymbol
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
Definition: ComponentInterfaceSymbol.h:27
sf_normalize_name
wxString sf_normalize_name(const char *name)
Definition: FileFormats.cpp:275
XXO
#define XXO(s)
Definition: Internat.h:44
widestSampleFormat
@ widestSampleFormat
Definition: SampleFormat.h:38
int16Sample
@ int16Sample
Definition: SampleFormat.h:32
name
const TranslatableString name
Definition: Distortion.cpp:98
format
int format
Definition: ExportPCM.cpp:56
LAT1CTOWX
#define LAT1CTOWX(X)
Definition: Internat.h:160
sf_subtype_more_than_16_bits
bool sf_subtype_more_than_16_bits(unsigned int format)
Definition: FileFormats.cpp:190
exts
static const auto exts
Definition: ImportAUP.cpp:57