diff --git a/platform/posix/wav_util.c b/platform/posix/wav_util.c index 8c4be2fdb..9b6eeb3f9 100644 --- a/platform/posix/wav_util.c +++ b/platform/posix/wav_util.c @@ -153,7 +153,7 @@ int wav_writer_write_int8(int num_samples, int8_t * data){ return 0; } -int wav_writer_write_int16(int num_samples, int16_t * data){ +int wav_writer_write_le_int16(int num_samples, int16_t * data){ if (data == NULL) return 1; fwrite(data, num_samples, 2, wav_writer_state.wav_file); @@ -162,6 +162,23 @@ int wav_writer_write_int16(int num_samples, int16_t * data){ return 0; } +int wav_writer_write_int16(int num_samples, int16_t * data){ + if (btstack_is_little_endian()){ + return wav_writer_write_le_int16(num_samples, data); + } + if (data == NULL) return 1; + + int i; + for (i=0;i<num_samples;i++){ + uint16_t sample = btstack_flip_16(data[i]); + fwrite(&sample, 1, 2, wav_writer_state.wav_file); + } + + wav_writer_state.total_num_samples+=num_samples; + wav_writer_state.frame_count++; + return 0; +} + int wav_reader_open(const char * filepath){ wav_reader_fd = open(filepath, O_RDONLY); if (!wav_reader_fd) { diff --git a/platform/posix/wav_util.h b/platform/posix/wav_util.h index 0ed413759..a9fecb672 100644 --- a/platform/posix/wav_util.h +++ b/platform/posix/wav_util.h @@ -43,9 +43,31 @@ #include <unistd.h> // return 0 if ok + +/** + * Write Int16 samples (host endianess) + * @return 0 if ok + */ int wav_writer_open(const char * filepath, int num_channels, int sampling_frequency); +/** + * Write Int8 samples + * @return 0 if ok + */ int wav_writer_write_int8(int num_samples, int8_t * data); +/** + * Write Int16 samples (host endianess) + * @return 0 if ok + */ int wav_writer_write_int16(int num_samples, int16_t * data); +/** + * Write Little Endian Int16 samples + * @return 0 if ok + */ +int wav_writer_write_le_int16(int num_samples, int16_t * data); +/** + * Close wav writer and update wav file header + * @return 0 if ok + */ int wav_writer_close(void);