 061991fe60
			
		
	
	
		061991fe60
		
	
	
	
	
		
			
			it appears a one-character typo in the cmake_minimum_required line prevents it from compiling under CMake 4.0. in order to fix that, I had to take this thing out of submodules... it is recommended to do this after you pull; git submodule deinit extern/libsndfile
		
			
				
	
	
		
			2017 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			2017 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| layout: page
 | |
| title: libsndfile : the sf_command function.
 | |
| ---
 | |
| 
 | |
| # sf_command
 | |
| 
 | |
| ```c
 | |
| int sf_command (SNDFILE *sndfile, int cmd, void *data, int datasize) ;
 | |
| ```
 | |
| 
 | |
| This function allows the caller to retrieve information from or change aspects
 | |
| of the library behaviour. Examples include retrieving a string containing the
 | |
| library version or changing the scaling applied to floating point sample data
 | |
| during read and write. Most of these operations are performed on a per-file
 | |
| basis.
 | |
| 
 | |
| The cmd parameter is an integer identifier which is defined in *sndfile.h*. All
 | |
| of the valid command identifiers have names beginning with "SFC_". Data is
 | |
| passed to and returned from the library by use of a void pointer. The library
 | |
| will not read or write more than datasize bytes from the void pointer. For some
 | |
| calls no data is required in which case data should be NULL and datasize may be
 | |
| used for some other purpose.
 | |
| 
 | |
| The available commands are as follows:
 | |
| 
 | |
| | Name                                                              | Description                                             |
 | |
| |:------------------------------------------------------------------|:--------------------------------------------------------|
 | |
| | [SFC_GET_LIB_VERSION](#sfc_get_lib_version)                       | Retrieve the version of the library as a string.        |
 | |
| | [SFC_GET_LOG_INFO](#sfc_get_log_info)                             | Retrieve the internal per-file operation log.           |
 | |
| | [SFC_GET_CURRENT_SF_INFO](#sfc_get_current_sf_info)               | Retrieve `SF_INFO` struct of opened file.               |
 | |
| | [SFC_CALC_SIGNAL_MAX](#sfc_calc_signal_max)                       | Calculate the measured maximum signal value.            |
 | |
| | [SFC_CALC_NORM_SIGNAL_MAX](#sfc_calc_norm_signal_max)             | Calculate the measured normalised maximum signal value. |
 | |
| | [SFC_CALC_MAX_ALL_CHANNELS](#sfc_calc_max_all_channels)           | Calculate the peak value for each channel.              |
 | |
| | [SFC_CALC_NORM_MAX_ALL_CHANNELS](#sfc_calc_norm_max_all_channels) | Calculate the normalised peak for each channel.         |
 | |
| | [SFC_GET_SIGNAL_MAX](#sfc_get_signal_max)                         | Retrieve the peak value for the file.                   |
 | |
| | [SFC_GET_MAX_ALL_CHANNELS](#sfc_get_max_all_channels)             | Retrieve the peak value for each channel.               |
 | |
| | [SFC_SET_NORM_FLOAT](#sfc_set_norm_float)                         | Set float normalisation behaviour.                      |
 | |
| | [SFC_SET_NORM_DOUBLE](#sfc_set_norm_double)                       | Set double normalisation behaviour.                     |
 | |
| | [SFC_GET_NORM_FLOAT](#sfc_get_norm_float)                         | Get float normalisation behaviour.                      |
 | |
| | [SFC_GET_NORM_DOUBLE](#sfc_get_norm_double)                       | Get double normalisation behaviour.                     |
 | |
| | [SFC_SET_SCALE_FLOAT_INT_READ](#sfc_set_scale_float_int_read)     | Control scale factor on read.                           |
 | |
| | [SFC_SET_SCALE_INT_FLOAT_WRITE](#sfc_set_scale_int_float_write)   | Control scale factor on write.                          |
 | |
| | [SFC_GET_SIMPLE_FORMAT_COUNT](#sfc_get_simple_format_count)       | Get simple formats count.                               |
 | |
| | [SFC_GET_SIMPLE_FORMAT](#sfc_get_simple_format)                   | Get information about a simple format.                  |
 | |
| | [SFC_GET_FORMAT_INFO](#sfc_get_format_info)                       | Get information about a major or subtype format.        |
 | |
| | [SFC_GET_FORMAT_MAJOR_COUNT](#sfc_get_format_major_count)         | Get the number of major formats.                        |
 | |
| | [SFC_GET_FORMAT_MAJOR](#sfc_get_format_major)                     | Get information about a major format type.              |
 | |
| | [SFC_GET_FORMAT_SUBTYPE_COUNT](#sfc_get_format_subtype_count)     | Get the number of subformats.                           |
 | |
| | [SFC_GET_FORMAT_SUBTYPE](#sfc_get_format_subtype)                 | Get information about a subformat.                      |
 | |
| | [SFC_SET_ADD_PEAK_CHUNK](#sfc_set_add_peak_chunk)                 | Control PEAK chunk write to WAV and AIFF.               |
 | |
| | [SFC_UPDATE_HEADER_NOW](#sfc_update_header_now)                   | Update the file header in write mode on demand.         |
 | |
| | [SFC_SET_UPDATE_HEADER_AUTO](#sfc_set_update_header_auto)         | Update the file header on each write.                   |
 | |
| | [SFC_FILE_TRUNCATE](#sfc_file_truncate)                           | Truncate a file open for write or for read/write.       |
 | |
| | [SFC_SET_RAW_START_OFFSET](#sfc_set_raw_start_offset)             | Change the data start offset for raw files.             |
 | |
| | SFC_SET_DITHER_ON_WRITE                                           | Not implemented.                                        |
 | |
| | SFC_SET_DITHER_ON_READ                                            | Not implemented.                                        |
 | |
| | SFC_GET_DITHER_INFO_COUNT                                         | Not implemented.                                        |
 | |
| | SFC_GET_DITHER_INFO                                               | Not implemented.                                        |
 | |
| | [SFC_SET_CLIPPING](#sfc_set_clipping)                             | Control automatic clipping behaviour.                   |
 | |
| | [SFC_GET_CLIPPING](#sfc_get_clipping)                             | Get current clipping setting.                           |
 | |
| | [SFC_GET_EMBED_FILE_INFO](#sfc_get_embed_file_info)               | Get information about embedded audio files.             |
 | |
| | [SFC_WAVEX_GET_AMBISONIC](#sfc_wavex_get_ambisonic)               | Test a WAVEX file for Ambisonic format.                 |
 | |
| | [SFC_WAVEX_SET_AMBISONIC](#sfc_wavex_set_ambisonic)               | Modify a WAVEX header for Ambisonic format.             |
 | |
| | [SFC_SET_VBR_ENCODING_QUALITY](#sfc_set_vbr_encoding_quality)     | Set the Variable Bit Rate encoding quality.             |
 | |
| | [SFC_SET_OGG_PAGE_LATENCY_MS](#sfc_set_ogg_page_latency_ms)       | Set Ogg page latency for Opus file.                     |
 | |
| | [SFC_GET_OGG_STREAM_SERIALNO](#sfc_get_ogg_stream_serialno)       | Get Ogg stream serial number.                           |
 | |
| | [SFC_SET_COMPRESSION_LEVEL](#sfc_set_compression_level)           | Set the compression level.                              |
 | |
| | [SFC_RAW_DATA_NEEDS_ENDSWAP](#sfc_raw_data_needs_endswap)         | Determine if raw data needs endswapping.                |
 | |
| | [SFC_GET_BROADCAST_INFO](#sfc_get_broadcast_info)                 | Get the Broadcast Chunk info.                           |
 | |
| | [SFC_SET_BROADCAST_INFO](#sfc_set_broadcast_info)                 | Set the Broadcast Chunk info.                           |
 | |
| | [SFC_GET_CHANNEL_MAP_INFO](#sfc_get_channel_map_info)             | Get the channel map info.                               |
 | |
| | [SFC_SET_CHANNEL_MAP_INFO](#sfc_set_channel_map_info)             | Set the channel map info.                               |
 | |
| | [SFC_SET_CART_INFO](#sfc_set_cart_info)                           | Set the Cart Chunk info.                                |
 | |
| | [SFC_GET_CART_INFO](#sfc_get_cart_info)                           | Get the Cart Chunk info.                                |
 | |
| | [SFC_GET_LOOP_INFO](#sfc_get_loop_info)                           | Get loop info.                                          |
 | |
| | [SFC_GET_INSTRUMENT](#sfc_get_instrument)                         | Get instrument info.                                    |
 | |
| | [SFC_SET_INSTRUMENT](#sfc_set_instrument)                         | Set instrument info.                                    |
 | |
| | [SFC_GET_CUE_COUNT](#sfc_get_cue_count)                           | Get the cue marker count.                               |
 | |
| | [SFC_GET_CUE](#sfc_get_cue)                                       | Get cue marker info.                                    |
 | |
| | [SFC_SET_CUE](#sfc_set_cue)                                       | Set cue marker info.                                    |
 | |
| | [SFC_RF64_AUTO_DOWNGRADE](#sfc_rf64_auto_downgrade)               | Set auto downgrade from RF64 to WAV.                    |
 | |
| | [SFC_GET_ORIGINAL_SAMPLERATE](#sfc_get_original_samplerate)       | Get original samplerate metadata.                       |
 | |
| | [SFC_SET_ORIGINAL_SAMPLERATE](#sfc_set_original_samplerate)       | Set original samplerate metadata.                       |
 | |
| | [SFC_GET_BITRATE_MODE](#sfc_get_bitrate_mode)                     | Get bitrate mode.                                       |
 | |
| | [SFC_SET_BITRATE_MODE](#sfc_set_bitrate_mode)                     | Set bitrate mode.                                       |
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## SFC_GET_LIB_VERSION
 | |
| 
 | |
| Retrieve the version of the library as a string.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_LIB_VERSION
 | |
| 
 | |
| data
 | |
| : A pointer to a char buffer
 | |
| 
 | |
| datasize
 | |
| : The size of the buffer
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| char  buffer [128] ;
 | |
| sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| This call will return the length of the retrieved version string.
 | |
| 
 | |
| ### Notes
 | |
| 
 | |
| The string returned in the buffer passed to this function will not overflow the
 | |
| buffer and will always be null terminated .
 | |
| 
 | |
| ## SFC_GET_LOG_INFO
 | |
| 
 | |
| Retrieve the internal per-file operation log.
 | |
| 
 | |
| This log buffer can often contain a good reason for why libsndfile failed to
 | |
| open a particular file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_LOG_INFO
 | |
| 
 | |
| data
 | |
| : A pointer to a char buffer
 | |
| 
 | |
| datasize
 | |
| : The size of the buffer
 | |
| 
 | |
| Example:
 | |
| 
 | |
| ```c
 | |
| char  buffer [2048] ;
 | |
| sf_command (sndfile, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| This call will return the length of the retrieved version string.
 | |
| 
 | |
| ### Notes
 | |
| 
 | |
| The string returned in the buffer passed to this function will not overflow the
 | |
| buffer and will always be null terminated.
 | |
| 
 | |
| ## SFC_GET_CURRENT_SF_INFO
 | |
| 
 | |
| Retrieve `SF_INFO` struct of opened file.
 | |
| 
 | |
| `SFC_GET_CURRENT_SF_INFO` command copies `SF_INFO` struct of `sndfile` object to
 | |
| provided buffer.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_CURRENT_SF_INFO
 | |
| 
 | |
| data
 | |
| : A pointer to a valid SF_INFO* pointer
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_INFO)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_INFO  sfinfo ;
 | |
| sf_command (sndfile, SFC_GET_CURRENT_SF_INFO, sfinfo, sizeof (SF_INFO)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero on success, non-zero otherwise.
 | |
| 
 | |
| ## SFC_CALC_SIGNAL_MAX
 | |
| 
 | |
| Retrieve the measured maximum signal value. This involves reading through the
 | |
| whole file which can be slow on large files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_CALC_SIGNAL_MAX
 | |
| 
 | |
| data
 | |
| : A pointer to a double
 | |
| 
 | |
| datasize
 | |
| : sizeof (double)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| double   max_val ;
 | |
| sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &max_val, sizeof (max_val)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero on success, non-zero otherwise.
 | |
| 
 | |
| ## SFC_CALC_NORM_SIGNAL_MAX
 | |
| 
 | |
| Retrieve the measured normalised maximum signal value. This involves reading
 | |
| through the whole file which can be slow on large files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_CALC_NORM_SIGNAL_MAX
 | |
| 
 | |
| data
 | |
| : A pointer to a double
 | |
| 
 | |
| datasize
 | |
| : sizeof (double)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| double   max_val ;
 | |
| sf_command (sndfile, SFC_CALC_NORM_SIGNAL_MAX, &max_val, sizeof (max_val)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero on success, non-zero otherwise.
 | |
| 
 | |
| ## SFC_CALC_MAX_ALL_CHANNELS
 | |
| 
 | |
| Calculate the peak value (ie a single number) for each channel. This involves
 | |
| reading through the whole file which can be slow on large files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_CALC_MAX_ALL_CHANNELS
 | |
| 
 | |
| data
 | |
| : A pointer to a double
 | |
| 
 | |
| datasize
 | |
| : sizeof (double) * number_of_channels
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| double   peaks [number_of_channels] ;
 | |
| sf_command (sndfile, SFC_CALC_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero if peaks have been calculated successfully and non-zero otherwise.
 | |
| 
 | |
| ## SFC_CALC_NORM_MAX_ALL_CHANNELS
 | |
| 
 | |
| Calculate the normalised peak for each channel. This involves reading through
 | |
| the whole file which can be slow on large files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_CALC_NORM_MAX_ALL_CHANNELS
 | |
| 
 | |
| data
 | |
| : A pointer to a double
 | |
| 
 | |
| datasize
 | |
| : sizeof (double) * number_of_channels
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| double   peaks [number_of_channels] ;
 | |
| sf_command (sndfile, SFC_CALC_NORM_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero if peaks have been calculated successfully and non-zero otherwise.
 | |
| 
 | |
| ## SFC_GET_SIGNAL_MAX
 | |
| 
 | |
| Retrieve the peak value for the file as stored in the file header.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_SIGNAL_MAX
 | |
| 
 | |
| data
 | |
| : A pointer to a double
 | |
| 
 | |
| datasize
 | |
| : sizeof (double)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| double   max_peak ;
 | |
| sf_command (sndfile, SFC_GET_SIGNAL_MAX, &max_peak, sizeof (max_peak)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| SF_TRUE if the file header contained the peak value. SF_FALSE
 | |
| otherwise.
 | |
| 
 | |
| ## SFC_GET_MAX_ALL_CHANNELS
 | |
| 
 | |
| Retrieve the peak value for the file as stored in the file header.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_SIGNAL_MAX
 | |
| 
 | |
| data
 | |
| : A pointer to an array of doubles
 | |
| 
 | |
| datasize
 | |
| : sizeof (double) * number_of_channels
 | |
| 
 | |
| ### Example
 | |
| 
 | |
| ```c
 | |
| double   peaks [number_of_channels] ;
 | |
| sf_command (sndfile, SFC_GET_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| SF_TRUE if the file header contains per channel peak values for the file,
 | |
| SF_FALSE otherwise.
 | |
| 
 | |
| ## SFC_SET_NORM_FLOAT
 | |
| 
 | |
| This command only affects data read from or written to using the
 | |
| floating point
 | |
| functions:
 | |
| 
 | |
| ```c
 | |
| size_t    sf_read_float    (SNDFILE *sndfile, float *ptr, size_t items) ;
 | |
| size_t    sf_readf_float   (SNDFILE *sndfile, float *ptr, size_t frames) ;
 | |
| 
 | |
| size_t    sf_write_float   (SNDFILE *sndfile, float *ptr, size_t items) ;
 | |
| size_t    sf_writef_float  (SNDFILE *sndfile, float *ptr, size_t frames) ;
 | |
| ```
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_NORM_FLOAT
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : SF_TRUE or SF_FALSE
 | |
| 
 | |
| For read operations setting normalisation to SF_TRUE means that the data from
 | |
| all subsequent reads will be be normalised to the range [-1.0, 1.0].
 | |
| 
 | |
| For write operations, setting normalisation to SF_TRUE means than all data
 | |
| supplied to the float write functions should be in the range [-1.0, 1.0] and
 | |
| will be scaled for the file format as necessary.
 | |
| 
 | |
| For both cases, setting normalisation to SF_FALSE means that no scaling will
 | |
| take place.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ;
 | |
| 
 | |
| sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns the previous float normalisation mode.
 | |
| 
 | |
| ## SFC_SET_NORM_DOUBLE
 | |
| 
 | |
| This command only affects data read from or written to using the double
 | |
| precision floating point
 | |
| functions:
 | |
| 
 | |
| ```c
 | |
| size_t sf_read_double  (SNDFILE *sndfile, double *ptr, size_t items) ;
 | |
| size_t sf_readf_double (SNDFILE *sndfile, double *ptr, size_t frames) ;
 | |
| 
 | |
| size_t sf_write_double  (SNDFILE *sndfile, double *ptr, size_t items) ;
 | |
| size_t sf_writef_double (SNDFILE *sndfile, double *ptr, size_t frames) ;
 | |
| ```
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_NORM_DOUBLE
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : SF_TRUE or SF_FALSE
 | |
| 
 | |
| For read operations setting normalisation to SF_TRUE means that the data from
 | |
| all subsequent reads will be be normalised to the range [-1.0, 1.0].
 | |
| 
 | |
| For write operations, setting normalisation to SF_TRUE means than all data
 | |
| supplied to the double write functions should be in the range [-1.0, 1.0] and
 | |
| will be scaled for the file format as necessary.
 | |
| 
 | |
| For both cases, setting normalisation to SF_FALSE means that no scaling will
 | |
| take place.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ;
 | |
| 
 | |
| sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns the previous double normalisation mode.
 | |
| 
 | |
| ## SFC_GET_NORM_FLOAT
 | |
| 
 | |
| Retrieve the current float normalisation mode.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_NORM_FLOAT
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : anything
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| normalisation = sf_command (sndfile, SFC_GET_NORM_FLOAT, NULL, 0) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns TRUE if normalisation is on and FALSE otherwise.
 | |
| 
 | |
| ## SFC_GET_NORM_DOUBLE
 | |
| 
 | |
| Retrieve the current float normalisation mode.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_NORM_DOUBLE
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : anything
 | |
| 
 | |
| Example:
 | |
| 
 | |
| ```c
 | |
| normalisation = sf_command (sndfile, SFC_GET_NORM_DOUBLE, NULL, 0) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns TRUE if normalisation is on and FALSE otherwise.
 | |
| 
 | |
| ## SFC_SET_SCALE_FLOAT_INT_READ
 | |
| 
 | |
| Set/clear the scale factor when integer (short/int) data is read from a file
 | |
| containing floating point data.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd:
 | |
| SFC_SET_SCALE_FLOAT_INT_READ
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : TRUE or FALSE
 | |
| 
 | |
| Example:
 | |
| 
 | |
| ```c
 | |
| sf_command (sndfile, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns the previous `SFC_SET_SCALE_FLOAT_INT_READ` setting for this file.
 | |
| 
 | |
| ## SFC_SET_SCALE_INT_FLOAT_WRITE
 | |
| 
 | |
| Set/clear the scale factor when integer (short/int) data is written to a file as
 | |
| floating point data.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_SCALE_INT_FLOAT_WRITE
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : TRUE or FALSE
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| sf_command (sndfile, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns the previous `SFC_SET_SCALE_INT_FLOAT_WRITE` setting for this file.
 | |
| 
 | |
| ## SFC_GET_SIMPLE_FORMAT_COUNT
 | |
| 
 | |
| Retrieve the number of simple formats supported by libsndfile.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_SIMPLE_FORMAT_COUNT
 | |
| 
 | |
| data
 | |
| : a pointer to an int
 | |
| 
 | |
| datasize
 | |
| : sizeof (int)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| int  count ;
 | |
| sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `0`.
 | |
| 
 | |
| ## SFC_GET_SIMPLE_FORMAT
 | |
| 
 | |
| Retrieve information about a simple format.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_SIMPLE_FORMAT
 | |
| 
 | |
| data
 | |
| : a pointer to an  SF_FORMAT_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_FORMAT_INFO)
 | |
| 
 | |
| The SF_FORMAT_INFO struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   int         format ;
 | |
|     const char  *name ;
 | |
|     const char  *extension ;
 | |
| } SF_FORMAT_INFO ;
 | |
| ```
 | |
| 
 | |
| When `sf_command()` is called with `SF_GET_SIMPLE_FORMAT`, the value of the
 | |
| format field should be the format number (ie 0 \<= format \<= count value
 | |
| obtained using `SF_GET_SIMPLE_FORMAT_COUNT).
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_FORMAT_INFO  format_info ;
 | |
| int             k, count ;
 | |
| 
 | |
| sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ;
 | |
| 
 | |
| for (k = 0 ; k < count ; k++)
 | |
| {   format_info.format = k ;
 | |
|     sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
 | |
|     printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
 | |
|     } ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| The value of the format field of the `SF_FORMAT_INFO` struct will be a value
 | |
| which can be placed in the format field of an `SF_INFO` struct when a file is to
 | |
| be opened for write. The name field will contain a char\* pointer to the name of
 | |
| the string, eg. "WAV (Microsoft 16 bit PCM)". The extension field will contain
 | |
| the most commonly used file extension for that file type.
 | |
| 
 | |
| ## SFC_GET_FORMAT_INFO
 | |
| 
 | |
| Retrieve information about a major or subtype format.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_FORMAT_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_FORMAT_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_FORMAT_INFO)
 | |
| 
 | |
| The `SF_FORMAT_INFO` struct is defined in \<sndfile.h\> as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   int         format ;
 | |
|     const char  *name ;
 | |
|     const char  *extension ;
 | |
| } SF_FORMAT_INFO ;
 | |
| ```
 | |
| 
 | |
| When `sf_command()` is called with `SF_GET_FORMAT_INFO`, the format field is
 | |
| examined and if (format & `SF_FORMAT_TYPEMASK`) is a valid format then the
 | |
| struct is filled in with information about the given major type. If (format &
 | |
| `SF_FORMAT_TYPEMASK`) is FALSE and (format & `SF_FORMAT_SUBMASK`) is a valid
 | |
| subtype format then the struct is filled in with information about the given
 | |
| subtype.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_FORMAT_INFO  format_info ;
 | |
| 
 | |
| format_info.format = SF_FORMAT_WAV ;
 | |
| sf_command (sndfile, SFC_GET_FORMAT_INFO, &format_info, sizeof (format_info)) ;
 | |
| printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
 | |
| 
 | |
| format_info.format = SF_FORMAT_ULAW ;
 | |
| sf_command (sndfile, SFC_GET_FORMAT_INFO, &format_info, sizeof (format_info)) ;
 | |
| printf ("%08x  %s\n", format_info.format, format_info.name) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| ## SFC_GET_FORMAT_MAJOR_COUNT
 | |
| 
 | |
| Retrieve the number of major formats.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_FORMAT_MAJOR_COUNT
 | |
| 
 | |
| data
 | |
| : a pointer to an int
 | |
| 
 | |
| datasize
 | |
| : sizeof (int)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| int  count ;
 | |
| sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0.
 | |
| 
 | |
| ## SFC_GET_FORMAT_MAJOR
 | |
| 
 | |
| Retrieve information about a major format type.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_FORMAT_MAJOR
 | |
| 
 | |
| data
 | |
| : a pointer to an  SF_FORMAT_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_FORMAT_INFO)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_FORMAT_INFO  format_info ;
 | |
| int             k, count ;
 | |
| 
 | |
| sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ;
 | |
| 
 | |
| for (k = 0 ; k < count ; k++)
 | |
| {   format_info.format = k ;
 | |
|     sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
 | |
|     printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
 | |
|     } ;
 | |
| ```
 | |
| 
 | |
| For a more comprehensive example, see the program `list_formats.c` in the
 | |
| `examples/` directory of the libsndfile source code distribution.
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| The value of the format field will be one of the major format identifiers such
 | |
| as `SF_FORMAT_WAV` or `SF_FORMAT`_AIFF. The name field will contain a char\*
 | |
| pointer to the name of the string, eg. "WAV (Microsoft)". The extension field
 | |
| will contain the most commonly used file extension for that file type.
 | |
| 
 | |
| ## SFC_GET_FORMAT_SUBTYPE_COUNT
 | |
| 
 | |
| Retrieve the number of subformats.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_FORMAT_SUBTYPE_COUNT
 | |
| 
 | |
| data
 | |
| : a pointer to an int
 | |
| 
 | |
| datasize
 | |
| : sizeof (int)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| int   count ;
 | |
| sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns zero.
 | |
| 
 | |
| ## SFC_GET_FORMAT_SUBTYPE
 | |
| 
 | |
| Enumerate the subtypes (this function does not translate a subtype into a string
 | |
| describing that subtype). A typical use case might be retrieving a string
 | |
| description of all subtypes so that a dialog box can be filled in.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : Not used.
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_FORMAT_SUBTYPE
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_FORMAT_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_FORMAT_INFO)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| Example 1: Retrieve all sybtypes supported by the WAV format.
 | |
| 
 | |
| ```c
 | |
| SF_FORMAT_INFO  format_info ;
 | |
| int             k, count ;
 | |
| 
 | |
| sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ;
 | |
| 
 | |
| for (k = 0 ; k < count ; k++)
 | |
| {   format_info.format = k ;
 | |
|     sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
 | |
|     if (! sf_format_check (format_info.format | SF_FORMAT_WAV))
 | |
|         continue ;
 | |
|     printf ("%08x  %s\n", format_info.format, format_info.name) ;
 | |
|     } ;
 | |
| ```
 | |
| 
 | |
| Example 2: Print a string describing the `SF_FORMAT_PCM_16` subtype.
 | |
| 
 | |
| ```c
 | |
| SF_FORMAT_INFO  format_info ;
 | |
| int             k, count ;
 | |
| 
 | |
| sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ;
 | |
| 
 | |
| for (k = 0 ; k < count ; k++)
 | |
| {   format_info.format = k ;
 | |
|     sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
 | |
|     if (format_info.format == SF_FORMAT_PCM_16)
 | |
|     {   printf ("%08x  %s\n", format_info.format, format_info.name) ;
 | |
|         break ;
 | |
|         } ;
 | |
|     } ;
 | |
| ```
 | |
| 
 | |
| For a more comprehensive example, see the program `list_formats.c` in the
 | |
| `examples/` directory of the libsndfile source code distribution.
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| The value of the format field will be one of the major format identifiers such
 | |
| as `SF_FORMAT_WAV` or `SF_FORMAT_AIFF`. The name field will contain a char\*
 | |
| pointer to the name of the string; for instance "WAV (Microsoft)" or "AIFF
 | |
| (Apple/SGI)". The extension field will be a NULL pointer.
 | |
| 
 | |
| ## SFC_SET_ADD_PEAK_CHUNK
 | |
| 
 | |
| By default, WAV and AIFF files which contain floating point data (subtype
 | |
| `SF_FORMAT_FLOAT` or `SF_FORMAT_DOUBLE`) have a PEAK chunk. By using this
 | |
| command, the addition of a PEAK chunk can be turned on or off.
 | |
| 
 | |
| **Note**: This call must be made before any data is written to the file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_ADD_PEAK_CHUNK
 | |
| 
 | |
| data
 | |
| : Not used (should be NULL)
 | |
| 
 | |
| datasize
 | |
| : TRUE or FALSE.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Turn on the PEAK chunk. */
 | |
| sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
 | |
| 
 | |
| /* Turn off the PEAK chunk. */
 | |
| sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns SF_TRUE if the peak chunk will be written after this call. Returns
 | |
| SF_FALSE if the peak chunk will not be written after this call.
 | |
| 
 | |
| ## SFC_UPDATE_HEADER_NOW
 | |
| 
 | |
| The header of an audio file is normally written by libsndfile when the file is
 | |
| closed using [**sf_close()**](api.md#file-close-function).
 | |
| 
 | |
| There are however situations where large files are being generated and it would
 | |
| be nice to have valid data in the header before the file is complete. Using this
 | |
| command will update the file header to reflect the amount of data written to the
 | |
| file so far. Other programs opening the file for read (before any more data is
 | |
| written) will then read a valid sound file header.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_UPDATE_HEADER_NOW
 | |
| 
 | |
| data
 | |
| : Not used (should be NULL)
 | |
| 
 | |
| datasize
 | |
| : Not used.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Update the header now. */
 | |
| sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns zero.
 | |
| 
 | |
| ## SFC_SET_UPDATE_HEADER_AUTO
 | |
| 
 | |
| Similar to `SFC_UPDATE_HEADER_NOW` but updates the header at the end of every
 | |
| call to the [sf_write\*](api.md#write) functions.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_UPDATE_HEADER_AUTO
 | |
| 
 | |
| data
 | |
| : Not used (should be NULL)
 | |
| 
 | |
| datasize
 | |
| : `SF_TRUE` or `SF_FALSE`
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Turn on auto header update. */
 | |
| sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
 | |
| 
 | |
| /* Turn off auto header update. */
 | |
| sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_FALSE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| TRUE if auto update header is now on; FALSE otherwise.
 | |
| 
 | |
| ## SFC_FILE_TRUNCATE
 | |
| 
 | |
| Truncate a file that was opened for write or read/write.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_FILE_TRUNCATE
 | |
| 
 | |
| data
 | |
| : A pointer to an sf_count_t.
 | |
| 
 | |
| datasize
 | |
| : sizeof (sf_count_t)
 | |
| 
 | |
| Truncate the file to the number of frames specified by the sf_count_t pointed to
 | |
| by data. After this command, both the read and the write pointer will be at the
 | |
| new end of the file. This command will fail (returning non-zero) if the
 | |
| requested truncate position is beyond the end of the file.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Truncate the file to a length of 20 frames. */
 | |
| sf_count_t  frames = 20 ;
 | |
| sf_command (sndfile, SFC_FILE_TRUNCATE, &frames, sizeof (frames)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero on success, non-zero otherwise.
 | |
| 
 | |
| ## SFC_SET_RAW_START_OFFSET
 | |
| 
 | |
| Change the data start offset for files opened up as `SF_FORMAT_RAW`.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_RAW_START_OFFSET
 | |
| 
 | |
| data
 | |
| : A pointer to an sf_count_t.
 | |
| 
 | |
| datasize
 | |
| : sizeof (sf_count_t)
 | |
| 
 | |
| For a file opened as format `SF_FORMAT_RAW`, set the data offset to the value
 | |
| given by `data`.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Reset the data offset to 5 bytes from the start of the file. */
 | |
| sf_count_t  offset = 5 ;
 | |
| sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &offset, sizeof (offset)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Zero on success, non-zero otherwise.
 | |
| 
 | |
| ## SFC_SET_CLIPPING
 | |
| 
 | |
| Turn on/off automatic clipping when doing floating point to integer conversion.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_CLIPPING
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : SF_TRUE or SF_FALSE.
 | |
| 
 | |
| Turn on (datasize == SF_TRUE) or off (datasize == SF_FALSE) clipping.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| sf_command (sndfile, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Clipping mode (SF_TRUE or SF_FALSE).
 | |
| 
 | |
| ## SFC_GET_CLIPPING
 | |
| 
 | |
| Turn on/off automatic clipping when doing floating point to integer conversion.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_CLIPPING
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : 0
 | |
| 
 | |
| Retrieve the current cliiping setting.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| sf_command (sndfile, SFC_GET_CLIPPING, NULL, 0) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Clipping mode (SF_TRUE or SF_FALSE).
 | |
| 
 | |
| ## SFC_GET_EMBED_FILE_INFO
 | |
| 
 | |
| Get the file offset and file length of a file enbedded within another larger
 | |
| file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_EMBED_FILE_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an  SF_EMBED_FILE_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_EMBED_FILE_INFO)
 | |
| 
 | |
| The `SF_EMBED_FILE_INFO` struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   sf_count_t  offset ;
 | |
|     sf_count_t  length ;
 | |
| } SF_EMBED_FILE_INFO ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| The value of the offset field of the `SF_EMBED_FILE_INFO` struct will be the
 | |
| offsets in bytes from the start of the outer file to the start of the audio
 | |
| file. The value of the offset field of the `SF_EMBED_FILE_INFO` struct will be
 | |
| the length in bytes of the embedded file.
 | |
| 
 | |
| ## SFC_WAVEX_GET_AMBISONIC
 | |
| 
 | |
| Test if the current file has the GUID of a WAVEX file for any of the Ambisonic
 | |
| formats.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_WAVEX_GET_AMBISONIC
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : 0
 | |
| 
 | |
| The Ambisonic WAVEX formats are defined here:
 | |
| <http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html>.
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_AMBISONIC_NONE(0x40)` or `SF_AMBISONIC_B_FORMAT(0x41)` or zero if the file
 | |
| format does not support ambisonic formats.
 | |
| 
 | |
| ## SFC_WAVEX_SET_AMBISONIC
 | |
| 
 | |
| Set the GUID of a new WAVEX file to indicate an Ambisonics format.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_WAVEX_SET_AMBISONIC
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : SF_AMBISONIC_NONE or SF_AMBISONIC_B_FORMAT
 | |
| 
 | |
| Turn on (`SF_AMBISONIC_B_FORMAT(0x41)`) or off (`SF_AMBISONIC_NONE(0x40)`)
 | |
| encoding. This command is currently only supported for files with
 | |
| `SF_FORMAT_WAVEX` format.
 | |
| 
 | |
| The Ambisonic WAVEX formats are defined here:
 | |
| 
 | |
| <http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html>.
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Return the ambisonic value that has just been set or zero if the
 | |
| file format does not support ambisonic encoding.
 | |
| 
 | |
| ## SFC_SET_VBR_ENCODING_QUALITY
 | |
| 
 | |
| Set the Variable Bit Rate encoding quality. The encoding quality value
 | |
| should be between 0.0 (lowest quality) and 1.0 (highest quality).
 | |
| Currently this command is only implemented for FLAC and Ogg/Vorbis files.
 | |
| It has no effect on un-compressed file formats.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_VBR_ENCODING_QUALITY
 | |
| 
 | |
| data
 | |
| : A pointer to a double value
 | |
| 
 | |
| datasize
 | |
| : sizeof (double)
 | |
| 
 | |
| The command must be sent before any audio data is written to the file.
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| SF_TRUE if VBR encoding quality was set. SF_FALSE otherwise.
 | |
| 
 | |
| ## SFC_SET_OGG_PAGE_LATENCY_MS
 | |
| 
 | |
| Set page latency for Ogg Opus file in milliseconds. The value should be between
 | |
| 50.0 and 1600.0. This command is only implemented for Ogg Opus files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_OGG_PAGE_LATENCY_MS
 | |
| 
 | |
| data
 | |
| : A pointer to a double value
 | |
| 
 | |
| datasize
 | |
| : sizeof (double)
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| ## SFC_GET_OGG_STREAM_SERIALNO
 | |
| 
 | |
| Get the Ogg stream serial number for files with the Ogg major format. Ogg
 | |
| stream serail numbers are a randomly chosen 32-bit value, used for
 | |
| differentiating logical Ogg streams.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_OGG_STREAM_SERIALNO
 | |
| 
 | |
| data
 | |
| : A pointer to a 32-bit int value
 | |
| 
 | |
| datasize
 | |
| : sizeof (int32_t) = 4
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| 0 on success and non-zero otherwise.
 | |
| 
 | |
| ## SFC_SET_COMPRESSION_LEVEL
 | |
| 
 | |
| Set the compression level. The compression level should be between 0.0 (minimum
 | |
| compression level) and 1.0 (highest compression level). Currently this command is
 | |
| only implemented for FLAC and Ogg/Vorbis files. It has no effect on
 | |
| uncompressed file formats.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_COMPRESSION_LEVEL
 | |
| 
 | |
| data
 | |
| : A pointer to a double value
 | |
| 
 | |
| datasize
 | |
| : sizeof (double)
 | |
| 
 | |
| The command must be sent before any audio data is written to the file.
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| SF_TRUE if compression level was set. SF_FALSE otherwise.
 | |
| 
 | |
| ## SFC_RAW_DATA_NEEDS_ENDSWAP
 | |
| 
 | |
| Determine if raw data read using [sf_read_raw()](api.md#raw) needs to be end
 | |
| swapped on the host CPU.
 | |
| 
 | |
| For instance, will return SF_TRUE on when reading WAV containing
 | |
| `SF_FORMAT_PCM_16` data on a big endian machine and `SF_FALSE` on a
 | |
| little endian machine.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_RAW_DATA_NEEDS_ENDSWAP
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : 0
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` or `SF_FALSE`.
 | |
| 
 | |
| ## SFC_GET_BROADCAST_INFO
 | |
| 
 | |
| Retrieve the Broadcast Extension Chunk from WAV (and related) files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_BROADCAST_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_BROADCAST_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_BROADCAST_INFO)
 | |
| 
 | |
| The SF_BROADCAST_INFO struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   char            description [256] ;
 | |
|     char            originator [32] ;
 | |
|     char            originator_reference [32] ;
 | |
|     char            origination_date [10] ;
 | |
|     char            origination_time [8] ;
 | |
|     unsigned int    time_reference_low ;
 | |
|     unsigned int    time_reference_high ;
 | |
|     short           version ;
 | |
|     char            umid [64] ;
 | |
|     char            reserved [190] ;
 | |
|     unsigned int    coding_history_size ;
 | |
|     char            coding_history [256] ;
 | |
| } SF_BROADCAST_INFO ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file contained a Broadcast Extension chunk or `SF_FALSE`
 | |
| otherwise.
 | |
| 
 | |
| ## SFC_SET_BROADCAST_INFO
 | |
| 
 | |
| Set the Broadcast Extension Chunk for WAV (and related) files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_BROADCAST_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_BROADCAST_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_BROADCAST_INFO)
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if setting the Broadcast Extension chunk was successful and `SF_FALSE`
 | |
| otherwise.
 | |
| 
 | |
| ## SFC_GET_CHANNEL_MAP_INFO
 | |
| 
 | |
| Retrieve the channel map contained in an AIFF or CAF Channel Layout chunk.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_CHANNEL_MAP_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an array of int, the same size as the number of channels in the
 | |
| file
 | |
| 
 | |
| datasize
 | |
| : number of channels * sizeof (int)
 | |
| 
 | |
| Channel map positions are defined in an enum in *sndfile.h*:
 | |
| 
 | |
| | Name                                 | Value | Description                                                       |
 | |
| |:-------------------------------------|:------|:------------------------------------------------------------------|
 | |
| | SF_CHANNEL_MAP_INVALID               | 0     |                                                                   |
 | |
| | SF_CHANNEL_MAP_MONO                  | 1     |                                                                   |
 | |
| | SF_CHANNEL_MAP_LEFT                  | 2     | Apple calls this 'Left'                                           |
 | |
| | SF_CHANNEL_MAP_RIGHT                 | 3     | Apple calls this 'Right'                                          |
 | |
| | SF_CHANNEL_MAP_CENTER                | 4     | Apple calls this 'Center'                                         |
 | |
| | SF_CHANNEL_MAP_FRONT_LEFT            | 5     |                                                                   |
 | |
| | SF_CHANNEL_MAP_FRONT_RIGHT           | 6     |                                                                   |
 | |
| | SF_CHANNEL_MAP_FRONT_CENTER          | 7     |                                                                   |
 | |
| | SF_CHANNEL_MAP_REAR_CENTER           | 8     | Apple calls this 'Center Surround', Msft calls this 'Back Center' |
 | |
| | SF_CHANNEL_MAP_REAR_LEFT             | 9     | Apple calls this 'Left Surround', Msft calls this 'Back Left'     |
 | |
| | SF_CHANNEL_MAP_REAR_RIGHT            | 10    | Apple calls this 'Right Surround', Msft calls this 'Back Right'   |
 | |
| | SF_CHANNEL_MAP_LFE                   | 11    | Apple calls this 'LFEScreen', Msft calls this 'Low Frequency'     |
 | |
| | SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER  | 12    | Apple calls this 'Left Center'                                    |
 | |
| | SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER | 13    | Apple calls this 'Right Center'                                   |
 | |
| | SF_CHANNEL_MAP_SIDE_LEFT             | 14    | Apple calls this 'Left Surround Direct'                           |
 | |
| | SF_CHANNEL_MAP_SIDE_RIGHT            | 15    | Apple calls this 'Right Surround Direct'                          |
 | |
| | SF_CHANNEL_MAP_TOP_CENTER            | 16    | Apple calls this 'Top Center Surround'                            |
 | |
| | SF_CHANNEL_MAP_TOP_FRONT_LEFT        | 17    | Apple calls this 'Vertical Height Left'                           |
 | |
| | SF_CHANNEL_MAP_TOP_FRONT_RIGHT       | 18    | Apple calls this 'Vertical Height Right'                          |
 | |
| | SF_CHANNEL_MAP_TOP_FRONT_CENTER      | 19    | Apple calls this 'Vertical Height Center'                         |
 | |
| | SF_CHANNEL_MAP_TOP_REAR_LEFT         | 20    | Apple and MS call this 'Top Back Left'                            |
 | |
| | SF_CHANNEL_MAP_TOP_REAR_RIGHT        | 21    | Apple and MS call this 'Top Back Right'                           |
 | |
| | SF_CHANNEL_MAP_TOP_REAR_CENTER       | 22    | Apple and MS call this 'Top Back Center'                          |
 | |
| | SF_CHANNEL_MAP_AMBISONIC_B_W         | 23    |                                                                   |
 | |
| | SF_CHANNEL_MAP_AMBISONIC_B_X         | 24    |                                                                   | 
 | |
| | SF_CHANNEL_MAP_AMBISONIC_B_Y         | 25    |                                                                   |
 | |
| | SF_CHANNEL_MAP_AMBISONIC_B_Z         | 26    |                                                                   |
 | |
| | SF_CHANNEL_MAP_MAX                   | 27    |                                                                   |
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file contained a Channel Layout chunk or `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_SET_CHANNEL_MAP_INFO
 | |
| 
 | |
| Set the channel map contained in an AIFF or CAF Channel Layout chunk.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_CHANNEL_MAP_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an array of int, the same size as the number of channels in the
 | |
| file
 | |
| 
 | |
| datasize
 | |
| : number of channels * sizeof (int)
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if setting the Channel Layout chunk was successful and `SF_FALSE`
 | |
| otherwise.
 | |
| 
 | |
| ## SFC_GET_CART_INFO
 | |
| 
 | |
| Retrieve the Cart Chunk from WAV (and related) files. Based on AES46 standard
 | |
| for CartChunk (see [CartChunk.org](http://www.cartchunk.org/) for more
 | |
| information.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_CART_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_CART_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_CART_INFO)
 | |
| 
 | |
| The SF_CART_INFO struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| #define SF_CART_INFO_VAR(p_tag_text_size) \
 | |
|     struct
 | |
|     {       char            version [4] ;
 | |
|             char            title [64] ;
 | |
|             char            artist [64] ;
 | |
|             char            cut_id [64] ;
 | |
|             char            client_id [64] ;
 | |
|             char            category [64] ;
 | |
|             char            classification [64] ;
 | |
|             char            out_cue [64] ;
 | |
|             char            start_date [10] ;
 | |
|             char            start_time [8] ;
 | |
|             char            end_date [10] ;
 | |
|             char            end_time [8] ;
 | |
|             char            producer_app_id [64] ;
 | |
|             char            producer_app_version [64] ;
 | |
|             char            user_def [64] ;
 | |
|             long    level_reference ;
 | |
|             SF_CART_TIMER   post_timers [8] ;
 | |
|             char            reserved [276] ;
 | |
|             char            url [1024] ;
 | |
|             unsigned int    tag_text_size ;
 | |
|             char            tag_text[p_tag_text_size] ;
 | |
|     }
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file contained a Cart chunk or `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_SET_CART_INFO
 | |
| 
 | |
| Set the Cart Chunk for WAV (and related) files.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_CART_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_CART_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_CART_INFO)
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| SF_TRUE if setting the Cart chunk was successful and SF_FALSE otherwise.
 | |
| 
 | |
| ## SFC_GET_LOOP_INFO
 | |
| 
 | |
| Retrieve loop information for file including time signature, length in beats and
 | |
| original MIDI base note
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_LOOP_INFO
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_LOOP_INFO struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_LOOP_INFO)
 | |
| 
 | |
| The SF_LOOP_INFO struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   short    time_sig_num ;   /* any positive integer    > 0  */
 | |
|     short    time_sig_den ;   /* any positive power of 2 > 0  */
 | |
|     int        loop_mode ;    /* see SF_LOOP enum             */
 | |
| 
 | |
|     int        num_beats ;    /* this is NOT the amount of quarter notes !!!*/
 | |
|                               /* a full bar of 4/4 is 4 beats */
 | |
|                               /* a full bar of 7/8 is 7 beats */
 | |
| 
 | |
|     float    bpm ;            /* suggestion, as it can be calculated using other fields:*/
 | |
|                               /* file's length, file's sampleRate and our time_sig_den*/
 | |
|                               /* -> bpms are always the amount of _quarter notes_ per minute */
 | |
| 
 | |
|     int    root_key ;         /* MIDI note, or -1 for None */
 | |
|     int future [6] ;
 | |
| } SF_LOOP_INFO ;
 | |
| ```
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_LOOP_INFO loop;
 | |
| sf_command (sndfile, SFC_GET_LOOP_INFO, &loop, sizeof (loop)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file header contains loop information for the file, `SF_FALSE`
 | |
| otherwise.
 | |
| 
 | |
| ## SFC_GET_INSTRUMENT
 | |
| 
 | |
| Retrieve instrument information from file including MIDI base note, keyboard
 | |
| mapping and looping information (start/stop and mode).
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_INSTRUMENT
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_INSTRUMENT struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_INSTRUMENT)
 | |
| 
 | |
| The `SF_INSTRUMENT` struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   int gain ;
 | |
|     char basenote, detune ;
 | |
|     char velocity_lo, velocity_hi ;
 | |
|     char key_lo, key_hi ;
 | |
|     int loop_count ;
 | |
| 
 | |
|     struct
 | |
|     {   int mode ;
 | |
|         unsigned int start ;
 | |
|         unsigned int end ;
 | |
|         unsigned int count ;
 | |
|     } loops [16] ; /* make variable in a sensible way */
 | |
| } SF_INSTRUMENT ;
 | |
| ```
 | |
| 
 | |
| `mode` values are defined as:
 | |
| 
 | |
| | Name                | Value | Description |
 | |
| |:--------------------|:------|:------------|
 | |
| | SF_LOOP_NONE        | 800   |             |
 | |
| | SF_LOOP_FORWARD     | 801   |             |
 | |
| | SF_LOOP_BACKWARD    | 802   |             |
 | |
| | SF_LOOP_ALTERNATING | 803   |             |
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_INSTRUMENT inst ;
 | |
| sf_command (sndfile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file header contains instrument information for the file,
 | |
| `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_SET_INSTRUMENT
 | |
| 
 | |
| Set the instrument information for the file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_INSTRUMENT
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_INSTRUMENT struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_INSTRUMENT)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_INSTRUMENT inst ;
 | |
| sf_command (sndfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file header contains instrument information for the file,
 | |
| `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_GET_CUE_COUNT
 | |
| 
 | |
| Retrieve the number of cue markers available for retrieval using the
 | |
| [SFC_GET_CUE](#sfc_get_cue) command.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_CUE_COUNT
 | |
| 
 | |
| data
 | |
| : a pointer to a uint32_t
 | |
| 
 | |
| datasize
 | |
| : sizeof (uint32_t)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| uint32_t cue_count ;
 | |
| sf_command (sndfile, SFC_GET_CUE_COUNT, &cue_count, sizeof (cue_count)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file header contains cue marker information for the file,
 | |
| `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_GET_CUE
 | |
| 
 | |
| Retrieve cue marker information from file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_CUE
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_CUES struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_CUES)
 | |
| 
 | |
| The SF_CUES struct is defined in *sndfile.h* as:
 | |
| 
 | |
| ```c
 | |
| typedef struct
 | |
| {   int cue_count ;
 | |
| 
 | |
|     struct
 | |
|     {   int32_t   indx ;
 | |
|         uint32_t  position ;
 | |
|         int32_t   fcc_chunk ;
 | |
|         int32_t   chunk_start ;
 | |
|         int32_t   block_start ;
 | |
|         uint32_t  sample_offset ;
 | |
|         char name [256] ;
 | |
|     } cue_points [100] ;
 | |
| } SF_CUES ;
 | |
| ```
 | |
| 
 | |
| There is also an SF_CUES_VAR \#define that allows reading/writing more than 100
 | |
| cue markers.
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_CUES cues ;
 | |
| sf_command (sndfile, SFC_GET_CUE, &cues, sizeof (cues)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file header contains cue marker information for the file,
 | |
| `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_SET_CUE
 | |
| 
 | |
| Set the cue marker information for the file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_CUE
 | |
| 
 | |
| data
 | |
| : a pointer to an SF_CUES struct
 | |
| 
 | |
| datasize
 | |
| : sizeof (SF_CUES)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| SF_CUES cues ;
 | |
| sf_command (sndfile, SFC_SET_CUE, &cues, sizeof (cues)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| `SF_TRUE` if the file header contains cue marker information for the file,
 | |
| `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_RF64_AUTO_DOWNGRADE
 | |
| 
 | |
| Enable auto downgrade from RF64 to WAV.
 | |
| 
 | |
| The EBU recommendation is that when writing RF64 files and the resulting file is
 | |
| less than 4Gig in size, it should be downgraded to a WAV file (WAV files have a
 | |
| maximum size of 4Gig). libsndfile doesn't follow the EBU recommendations
 | |
| exactly, mainly because the test suite needs to be able test reading/writing
 | |
| RF64 files without having to generate files larger than 4 gigabytes.
 | |
| 
 | |
| Note: This command should be issued before the first bit of audio data has been
 | |
| written to the file. Calling this command after audio data has been written will
 | |
| return the current value of this setting, but will not allow it to be changed.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_RF64_AUTO_DOWNGRADE
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : SF_TRUE or SF_FALSE
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Enable auto downgrade on file close. */
 | |
| sf_command (sndfile, SFC_RF64_AUTO_DOWNGRADE, NULL, SF_TRUE) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns `SF_TRUE` if `SFC_RF64_AUTO_DOWNGRADE` is set and `SF_FALSE` otherwise.
 | |
| 
 | |
| ## SFC_GET_ORIGINAL_SAMPLERATE
 | |
| 
 | |
| Get original samplerate metadata.
 | |
| 
 | |
| The Opus audio codec stores audio data independent of samplerate, but only
 | |
| supports encoding or decoding at 8000Hz, 12000Hz, 16000Hz, 24000Hz or 48000Hz.
 | |
| Opus includes a header field to record the original source input samplerate, and
 | |
| a samplerate converter may be used if needed.
 | |
| 
 | |
| This command gets the original samplerate header field. It does not enable any
 | |
| (non-existent) samplerate conversion, nor change the current decoder samplerate.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_ORIGINAL_SAMPLERATE
 | |
| 
 | |
| data
 | |
| : pointer to an integer
 | |
| 
 | |
| datasize
 | |
| : sizeof (int)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Get the original sample rate */
 | |
| int original_samplerate ;
 | |
| sf_command (sndfile, SFC_GET_ORIGINAL_SAMPLERATE, &original_samplerate, sizeof (original_samplerate)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns `SF_TRUE` on success, `SF_FALSE` otherwise.
 | |
| 
 | |
| The passed integer is set to the value of the original samplerate.
 | |
| 
 | |
| ## SFC_SET_ORIGINAL_SAMPLERATE
 | |
| 
 | |
| Set original samplerate metadata.
 | |
| 
 | |
| The Opus audio codec stores audio data independent of samplerate, but only
 | |
| supports encoding or decoding at 8000Hz, 12000Hz, 16000Hz, 24000Hz or 48000Hz.
 | |
| Opus includes a header field to record the original source input samplerate, and
 | |
| a samplerate converter may be used if needed.
 | |
| 
 | |
| When writing an Opus file this command sets the original samplerate header field
 | |
| to the provided value, which is then stored in the file. This has no effect on
 | |
| the current encoder samplerate.
 | |
| 
 | |
| When reading an Opus file this command overrides the original samplerate value
 | |
| as read from the file. libsndfile uses this value to choose what samplerate to
 | |
| decode at, rounding up to the nearest valid Opus samplerate. After a successful
 | |
| call, the file samplerate and frames count may have changed.
 | |
| 
 | |
| Note: This command should be issued before the first bit of audio data has been
 | |
| read from or written to the file.
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_ORIGINAL_SAMPLERATE
 | |
| 
 | |
| data
 | |
| : pointer to an integer
 | |
| 
 | |
| datasize
 | |
| : sizeof (int)
 | |
| 
 | |
| ### Examples
 | |
| 
 | |
| ```c
 | |
| /* Store the original sample rate as 44100 */
 | |
| int original_samplerate 44100;
 | |
| sf_command (sndfile, SFC_SET_ORIGINAL_SAMPLERATE, &original_samplerate, sizeof (input_samplerate)) ;
 | |
| ```
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns SF_TRUE on success, SF_FALSE otherwise.
 | |
| 
 | |
| On write, can only succeed if no data has been written. On read, if successful,
 | |
| [SFC_GET_CURRENT_SF_INFO](#sfc_get_current_sf_info) should be called to
 | |
| determine the new frames count and samplerate
 | |
| 
 | |
| ## SFC_GET_BITRATE_MODE
 | |
| 
 | |
| Get bitrate mode.
 | |
| 
 | |
| The bitrate mode is one of:
 | |
| 
 | |
| | Name                     | Value | Description       |
 | |
| |:-------------------------|:------|:------------------|
 | |
| | SF_BITRATE_MODE_CONSTANT | 800   | Constant bitrate. |
 | |
| | SF_BITRATE_MODE_AVERAGE  | 801   | Average bitrate.  |
 | |
| | SF_BITRATE_MODE_VARIABLE | 802   | Variable bitrate. |
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_GET_BITRATE_MODE
 | |
| 
 | |
| data
 | |
| : NULL
 | |
| 
 | |
| datasize
 | |
| : anything
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns one of `SF_BITRATE_MODE_XXX` on success, `-1` otherwise.
 | |
| 
 | |
| ## SFC_SET_BITRATE_MODE
 | |
| 
 | |
| Set bitrate mode.
 | |
| 
 | |
| The bitrate mode is one of:
 | |
| 
 | |
| | Name                     | Value | Description       |
 | |
| |:-------------------------|:------|:------------------|
 | |
| | SF_BITRATE_MODE_CONSTANT | 800   | Constant bitrate. |
 | |
| | SF_BITRATE_MODE_AVERAGE  | 801   | Average bitrate.  |
 | |
| | SF_BITRATE_MODE_VARIABLE | 802   | Variable bitrate. |
 | |
| 
 | |
| ### Parameters
 | |
| 
 | |
| sndfile
 | |
| : A valid SNDFILE* pointer
 | |
| 
 | |
| cmd
 | |
| : SFC_SET_BITRATE_MODE
 | |
| 
 | |
| data
 | |
| : pointer to an integer
 | |
| 
 | |
| datasize
 | |
| : sizeof (int)
 | |
| 
 | |
| ### Return value
 | |
| 
 | |
| Returns `SF_TRUE` on success, `SF_FALSE` otherwise.
 |