From 075693faeaa6420de653ad6e81c2d708e354b314 Mon Sep 17 00:00:00 2001 From: Joursoir Date: Tue, 26 Jan 2021 21:15:43 +0000 Subject: add code for audio types, support record in wave format Take out code with audio types to audio_types.c --- parecord/audio_types.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 parecord/audio_types.c (limited to 'parecord/audio_types.c') diff --git a/parecord/audio_types.c b/parecord/audio_types.c new file mode 100644 index 0000000..59652e0 --- /dev/null +++ b/parecord/audio_types.c @@ -0,0 +1,46 @@ +#include + +#include "audio_types.h" + +static const struct audio_format support_formats[] = { + {"wav", 44}, // AUDIO_FORMAT_WAVE = 0 + {NULL, 0} +}; + +struct wav_header *init_wav_header(struct wav_header *header, + uint32_t size, uint32_t subchunk1Size, uint16_t audioFormat, + uint16_t numChannels, uint32_t sampleRate, uint32_t bitsPerSample) +{ + header->chunkId = 0x46464952; // = "RIFF" + header->chunkSize = size - 8; + header->format = 0x45564157; // = "WAVE" + header->subchunk1Id = 0x20746d66; // = "fmt " + header->subchunk1Size = subchunk1Size; + header->audioFormat = audioFormat; + header->numChannels = numChannels; + header->sampleRate = sampleRate; + header->byteRate = sampleRate * numChannels * (bitsPerSample/8); + header->blockAlign = numChannels * (bitsPerSample/8); + header->bitsPerSample = bitsPerSample; + header->subchunk2Id = 0x61746164; // = "data" + header->subchunk2Size = size - 44; + + return header; +} + +int checkAudioFormat(char *source) +{ + int i; + for(i = 0; support_formats[i].name != NULL; i++) { + if(strcmp(source, support_formats[i].name) == 0) { + return i; + } + } + + return AUDIO_FORMAT_NONE; +} + +off_t getOffset(int format) +{ + return support_formats[format].rsv_bytes; +} \ No newline at end of file -- cgit v1.2.3-18-g5258