librfn
An ad-hoc utility library
wavheader.h
Go to the documentation of this file.
1 /*
2  * wavheader.h
3  *
4  * Part of librfn (a general utility library from redfelineninja.org.uk)
5  *
6  * Copyright (C) 2012-2014 Daniel Thompson <daniel@redfelineninja.org.uk>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published
10  * by the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  */
13 
14 #ifndef RF_WAVHEADER_H_
15 #define RF_WAVHEADER_H_
16 
17 #include <stdint.h>
18 #include <stdlib.h>
19 
28 typedef struct rf_wavheader {
29  uint8_t chunk_id[4];
30  uint32_t chunk_size;
31  uint8_t format[4];
32 
33  uint8_t fmt_chunk_id[4];
34  uint32_t fmt_chunk_size;
35  uint16_t audio_format;
36  uint16_t num_channels;
37  uint32_t sample_rate;
38  uint32_t byte_rate;
39  uint16_t block_align;
40  uint16_t bits_per_sample;
41  uint16_t cb_size; // not present in PCM
42  uint16_t valid_bits_per_sample; // not present in PCM
43  uint32_t channel_mask; // not present in PCM
44  uint8_t sub_format[16]; // not present in PCM
45 
46  uint8_t fact_chunk_id[4]; // not present in PCM
47  uint32_t fact_chunk_size; // not present in PCM
48  uint32_t sample_length; // not present in PCM
49 
50  uint8_t data_chunk_id[4];
51  uint32_t data_chunk_size;
53 
54 typedef enum {
60 
61 #define RF_WAVHEADER_MIN_SIZE 44
62 
63 int rf_wavheader_decode(const uint8_t *p, unsigned int sz, rf_wavheader_t *wh);
64 int rf_wavheader_encode(rf_wavheader_t *wh, uint8_t *p, unsigned int sz);
66 void rf_wavheader_init(rf_wavheader_t *wh, int sfreq, int num_channels,
67  rf_wavheader_format_t format);
68 void rf_wavheader_set_num_frames(rf_wavheader_t *wh, unsigned int num_frames);
71 
73 #endif // RF_WAVHEADER_H_
uint32_t data_chunk_size
Definition: wavheader.h:51
struct rf_wavheader rf_wavheader_t
uint32_t channel_mask
Definition: wavheader.h:43
uint32_t byte_rate
Definition: wavheader.h:38
uint16_t block_align
Definition: wavheader.h:39
uint32_t sample_rate
Definition: wavheader.h:37
void rf_wavheader_set_num_frames(rf_wavheader_t *wh, unsigned int num_frames)
Definition: wavheader.c:184
int rf_wavheader_decode(const uint8_t *p, unsigned int sz, rf_wavheader_t *wh)
Definition: wavheader.c:29
char * rf_wavheader_tostring(rf_wavheader_t *wh)
Definition: wavheader.c:211
uint32_t sample_length
Definition: wavheader.h:48
uint8_t sub_format[16]
Definition: wavheader.h:44
uint16_t valid_bits_per_sample
Definition: wavheader.h:42
uint32_t fmt_chunk_size
Definition: wavheader.h:34
uint32_t fact_chunk_size
Definition: wavheader.h:47
void rf_wavheader_init(rf_wavheader_t *wh, int sfreq, int num_channels, rf_wavheader_format_t format)
Definition: wavheader.c:154
rf_wavheader_format_t rf_wavheader_get_format(rf_wavheader_t *wh)
Definition: wavheader.c:135
uint8_t fmt_chunk_id[4]
Definition: wavheader.h:33
uint8_t chunk_id[4]
Definition: wavheader.h:29
rf_wavheader_format_t
Definition: wavheader.h:54
uint8_t data_chunk_id[4]
Definition: wavheader.h:50
uint8_t format[4]
Definition: wavheader.h:31
uint8_t fact_chunk_id[4]
Definition: wavheader.h:46
int rf_wavheader_encode(rf_wavheader_t *wh, uint8_t *p, unsigned int sz)
Definition: wavheader.c:90
uint16_t audio_format
Definition: wavheader.h:35
uint16_t bits_per_sample
Definition: wavheader.h:40
uint32_t chunk_size
Definition: wavheader.h:30
uint16_t num_channels
Definition: wavheader.h:36
int rf_wavheader_validate(rf_wavheader_t *wh)
Definition: wavheader.c:220
uint16_t cb_size
Definition: wavheader.h:41