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