Loading apps/encoder.c +18 −9 Original line number Diff line number Diff line Loading @@ -535,7 +535,12 @@ int main( #endif #ifdef FLOAT_INTERFACE_ENC bool inputFileIsFloat = false; /* TODO(sgi): */ bool inputFileIsFloat; if ( ( error = AudioFileReader_isFileFloatingPoint( audioReader, &inputFileIsFloat ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); goto cleanup; } if ( inputFileIsFloat ) { Loading Loading @@ -576,13 +581,15 @@ int main( #ifdef FLOAT_INTERFACE_ENC if ( inputFileIsFloat ) { fprintf( stderr, "\nReading of float wav files not implemented\n" ); if ( ( error = AudioFileReader_readToFloat( audioReader, audioReadBufFloat, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; /* TODO(sgi): Add float reading to AudioFileReader */ } } else { if ( ( error = AudioFileReader_read( audioReader, audioReadBufInt, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) if ( ( error = AudioFileReader_readToInt16( audioReader, audioReadBufInt, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; Loading Loading @@ -638,13 +645,15 @@ int main( #ifdef FLOAT_INTERFACE_ENC if ( inputFileIsFloat ) { fprintf( stderr, "\nReading of float wav files not implemented\n" ); if ( ( error = AudioFileReader_readToFloat( audioReader, audioReadBufFloat, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; /* TODO(sgi): Add float reading to AudioFileReader */ } } else { if ( ( error = AudioFileReader_read( audioReader, audioReadBufInt, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) if ( ( error = AudioFileReader_readToInt16( audioReader, audioReadBufInt, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; Loading apps/renderer.c +4 −0 Original line number Diff line number Diff line Loading @@ -842,7 +842,11 @@ int main( num_in_channels = inBuffer.config.numChannels; /* Read the input data */ #ifdef FLOAT_INTERFACE_ENC if ( ( error = AudioFileReader_readToInt16( audioReader, inpInt16Buffer, (int16_t) inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) #else if ( ( error = AudioFileReader_read( audioReader, inpInt16Buffer, (int16_t) inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nError reading from file %s\n", audioFilePath ); exit( -1 ); Loading lib_com/ivas_error.h +4 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,10 @@ typedef enum IVAS_ERR_FAILED_FILE_READ, IVAS_ERR_FAILED_FILE_PARSE, IVAS_ERR_END_OF_FILE, #ifdef FLOAT_INTERFACE_ENC IVAS_ERR_NO_FILE_OPEN, IVAS_ERR_INVALID_AUDIO_FORMAT, #endif IVAS_ERR_BITSTREAM_WRITER_INVALID_FORMAT, IVAS_ERR_BITSTREAM_READER_INVALID_DATA, IVAS_ERR_BITSTREAM_READER_INVALID_FORMAT, Loading lib_util/audio_file_reader.c +102 −0 Original line number Diff line number Diff line Loading @@ -149,7 +149,108 @@ void AudioFileReader_close( return; } #ifdef FLOAT_INTERFACE_ENC /*! r: ivas_error */ ivas_error AudioFileReader_isFileFloatingPoint( AudioFileReader *self, /* i/o: AudioFileReader handle */ bool *isFileFloatingPoint /* o : set to "true" if opened file contains floating-point values, "false" otherwise */ ) { if ( self == NULL || isFileFloatingPoint == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } if ( self->rawFile ) { *isFileFloatingPoint = false; } else if ( self->wavFile ) { /* tinywavein_c only supports 16-bit int, 24-bit int and 32-bit float */ *isFileFloatingPoint = self->wavFile->bps == 32; } else { return IVAS_ERR_NO_FILE_OPEN; } return IVAS_ERR_OK; } /*! r: ivas_error */ ivas_error AudioFileReader_readToFloat( AudioFileReader *self, /* i/o: AudioFileReader handle */ float *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ) { uint32_t numSamplesRead32 = 0; if ( self == NULL || samples == NULL || numSamplesRead == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } if ( self->rawFile ) { return IVAS_ERR_INVALID_AUDIO_FORMAT; } else if ( self->wavFile ) { if ( ReadWavFloat( self->wavFile, samples, numSamples, &numSamplesRead32 ) != __TWI_SUCCESS ) { return IVAS_ERR_FAILED_FILE_READ; } *numSamplesRead = (int16_t) numSamplesRead32; } else { return IVAS_ERR_NO_FILE_OPEN; } return IVAS_ERR_OK; } /*! r: ivas_error */ ivas_error AudioFileReader_readToInt16( AudioFileReader *self, /* i/o: AudioFileReader handle */ int16_t *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ) { uint32_t numSamplesRead32 = 0; if ( self == NULL || samples == NULL || numSamplesRead == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } if ( self->rawFile ) { /* No errors possible here, numSamples != *numSamplesRead is a valid condition */ *numSamplesRead = (int16_t) fread( samples, sizeof( int16_t ), numSamples, self->rawFile ); } else if ( self->wavFile ) { if ( ReadWavShort( self->wavFile, samples, numSamples, &numSamplesRead32 ) != __TWI_SUCCESS ) { return IVAS_ERR_FAILED_FILE_READ; } *numSamplesRead = (int16_t) numSamplesRead32; } else { return IVAS_ERR_NO_FILE_OPEN; } return IVAS_ERR_OK; } #else /*! r: number of read samples */ ivas_error AudioFileReader_read( AudioFileReader *self, /* i/o: AudioFileReader handle */ Loading Loading @@ -179,6 +280,7 @@ ivas_error AudioFileReader_read( return error; } #endif /*! r: number of channels of the opened file */ int16_t AudioFileReader_getNumChannels( Loading lib_util/audio_file_reader.h +28 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,10 @@ #include <stdint.h> #include "ivas_error.h" #ifdef FLOAT_INTERFACE_ENC #include <stdbool.h> #endif struct AudioFileReader; typedef struct AudioFileReader AudioFileReader; Loading @@ -47,6 +51,29 @@ ivas_error AudioFileReader_open( int32_t *sampleRate /* o : sample rate of wav file, unused with pcm */ ); #ifdef FLOAT_INTERFACE_ENC /*! r: ivas_error */ ivas_error AudioFileReader_isFileFloatingPoint( AudioFileReader *self, /* i/o: AudioFileReader handle */ bool* isFileFloatingPoint /* o : set to "true" if opened file contains floating-point values, "false" otherwise */ ); /*! r: ivas_error */ ivas_error AudioFileReader_readToFloat( AudioFileReader *self, /* i/o: AudioFileReader handle */ float *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ); /*! r: ivas_error */ ivas_error AudioFileReader_readToInt16( AudioFileReader *self, /* i/o: AudioFileReader handle */ int16_t *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ); #else /*! r: number of read samples */ ivas_error AudioFileReader_read( AudioFileReader *self, /* i/o: AudioFileReader handle */ Loading @@ -54,6 +81,7 @@ ivas_error AudioFileReader_read( const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actualy read */ ); #endif /*! r: number of channels of the opened file */ int16_t AudioFileReader_getNumChannels( Loading Loading
apps/encoder.c +18 −9 Original line number Diff line number Diff line Loading @@ -535,7 +535,12 @@ int main( #endif #ifdef FLOAT_INTERFACE_ENC bool inputFileIsFloat = false; /* TODO(sgi): */ bool inputFileIsFloat; if ( ( error = AudioFileReader_isFileFloatingPoint( audioReader, &inputFileIsFloat ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); goto cleanup; } if ( inputFileIsFloat ) { Loading Loading @@ -576,13 +581,15 @@ int main( #ifdef FLOAT_INTERFACE_ENC if ( inputFileIsFloat ) { fprintf( stderr, "\nReading of float wav files not implemented\n" ); if ( ( error = AudioFileReader_readToFloat( audioReader, audioReadBufFloat, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; /* TODO(sgi): Add float reading to AudioFileReader */ } } else { if ( ( error = AudioFileReader_read( audioReader, audioReadBufInt, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) if ( ( error = AudioFileReader_readToInt16( audioReader, audioReadBufInt, encDelayInSamples, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; Loading Loading @@ -638,13 +645,15 @@ int main( #ifdef FLOAT_INTERFACE_ENC if ( inputFileIsFloat ) { fprintf( stderr, "\nReading of float wav files not implemented\n" ); if ( ( error = AudioFileReader_readToFloat( audioReader, audioReadBufFloat, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; /* TODO(sgi): Add float reading to AudioFileReader */ } } else { if ( ( error = AudioFileReader_read( audioReader, audioReadBufInt, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) if ( ( error = AudioFileReader_readToInt16( audioReader, audioReadBufInt, pcmBufSize, &numSamplesRead ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError reading from file %s\n%s\n", arg.inputWavFilename, IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; Loading
apps/renderer.c +4 −0 Original line number Diff line number Diff line Loading @@ -842,7 +842,11 @@ int main( num_in_channels = inBuffer.config.numChannels; /* Read the input data */ #ifdef FLOAT_INTERFACE_ENC if ( ( error = AudioFileReader_readToInt16( audioReader, inpInt16Buffer, (int16_t) inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) #else if ( ( error = AudioFileReader_read( audioReader, inpInt16Buffer, (int16_t) inBufferSize, &numSamplesRead ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nError reading from file %s\n", audioFilePath ); exit( -1 ); Loading
lib_com/ivas_error.h +4 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,10 @@ typedef enum IVAS_ERR_FAILED_FILE_READ, IVAS_ERR_FAILED_FILE_PARSE, IVAS_ERR_END_OF_FILE, #ifdef FLOAT_INTERFACE_ENC IVAS_ERR_NO_FILE_OPEN, IVAS_ERR_INVALID_AUDIO_FORMAT, #endif IVAS_ERR_BITSTREAM_WRITER_INVALID_FORMAT, IVAS_ERR_BITSTREAM_READER_INVALID_DATA, IVAS_ERR_BITSTREAM_READER_INVALID_FORMAT, Loading
lib_util/audio_file_reader.c +102 −0 Original line number Diff line number Diff line Loading @@ -149,7 +149,108 @@ void AudioFileReader_close( return; } #ifdef FLOAT_INTERFACE_ENC /*! r: ivas_error */ ivas_error AudioFileReader_isFileFloatingPoint( AudioFileReader *self, /* i/o: AudioFileReader handle */ bool *isFileFloatingPoint /* o : set to "true" if opened file contains floating-point values, "false" otherwise */ ) { if ( self == NULL || isFileFloatingPoint == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } if ( self->rawFile ) { *isFileFloatingPoint = false; } else if ( self->wavFile ) { /* tinywavein_c only supports 16-bit int, 24-bit int and 32-bit float */ *isFileFloatingPoint = self->wavFile->bps == 32; } else { return IVAS_ERR_NO_FILE_OPEN; } return IVAS_ERR_OK; } /*! r: ivas_error */ ivas_error AudioFileReader_readToFloat( AudioFileReader *self, /* i/o: AudioFileReader handle */ float *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ) { uint32_t numSamplesRead32 = 0; if ( self == NULL || samples == NULL || numSamplesRead == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } if ( self->rawFile ) { return IVAS_ERR_INVALID_AUDIO_FORMAT; } else if ( self->wavFile ) { if ( ReadWavFloat( self->wavFile, samples, numSamples, &numSamplesRead32 ) != __TWI_SUCCESS ) { return IVAS_ERR_FAILED_FILE_READ; } *numSamplesRead = (int16_t) numSamplesRead32; } else { return IVAS_ERR_NO_FILE_OPEN; } return IVAS_ERR_OK; } /*! r: ivas_error */ ivas_error AudioFileReader_readToInt16( AudioFileReader *self, /* i/o: AudioFileReader handle */ int16_t *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ) { uint32_t numSamplesRead32 = 0; if ( self == NULL || samples == NULL || numSamplesRead == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } if ( self->rawFile ) { /* No errors possible here, numSamples != *numSamplesRead is a valid condition */ *numSamplesRead = (int16_t) fread( samples, sizeof( int16_t ), numSamples, self->rawFile ); } else if ( self->wavFile ) { if ( ReadWavShort( self->wavFile, samples, numSamples, &numSamplesRead32 ) != __TWI_SUCCESS ) { return IVAS_ERR_FAILED_FILE_READ; } *numSamplesRead = (int16_t) numSamplesRead32; } else { return IVAS_ERR_NO_FILE_OPEN; } return IVAS_ERR_OK; } #else /*! r: number of read samples */ ivas_error AudioFileReader_read( AudioFileReader *self, /* i/o: AudioFileReader handle */ Loading Loading @@ -179,6 +280,7 @@ ivas_error AudioFileReader_read( return error; } #endif /*! r: number of channels of the opened file */ int16_t AudioFileReader_getNumChannels( Loading
lib_util/audio_file_reader.h +28 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,10 @@ #include <stdint.h> #include "ivas_error.h" #ifdef FLOAT_INTERFACE_ENC #include <stdbool.h> #endif struct AudioFileReader; typedef struct AudioFileReader AudioFileReader; Loading @@ -47,6 +51,29 @@ ivas_error AudioFileReader_open( int32_t *sampleRate /* o : sample rate of wav file, unused with pcm */ ); #ifdef FLOAT_INTERFACE_ENC /*! r: ivas_error */ ivas_error AudioFileReader_isFileFloatingPoint( AudioFileReader *self, /* i/o: AudioFileReader handle */ bool* isFileFloatingPoint /* o : set to "true" if opened file contains floating-point values, "false" otherwise */ ); /*! r: ivas_error */ ivas_error AudioFileReader_readToFloat( AudioFileReader *self, /* i/o: AudioFileReader handle */ float *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ); /*! r: ivas_error */ ivas_error AudioFileReader_readToInt16( AudioFileReader *self, /* i/o: AudioFileReader handle */ int16_t *samples, /* o : output audio buffer. Samples will be written in an interleaved layout. */ const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actually read */ ); #else /*! r: number of read samples */ ivas_error AudioFileReader_read( AudioFileReader *self, /* i/o: AudioFileReader handle */ Loading @@ -54,6 +81,7 @@ ivas_error AudioFileReader_read( const int16_t numSamples, /* i : total number of samples to read */ int16_t *numSamplesRead /* i : total number of samples actualy read */ ); #endif /*! r: number of channels of the opened file */ int16_t AudioFileReader_getNumChannels( Loading