Smart Remote 3 nRF52 v1.2
sr3_config_audio.h
1 /*$$$LICENCE_NORDIC_STANDARD<2016>$$$*/
2 
3 #ifndef _SR3_CONFIG_AUDIO_H
4 #define _SR3_CONFIG_AUDIO_H
5 
6 // Calculate audio parameters.
7 #if (CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_ADPCM)
8 # define CONFIG_AUDIO_FRAME_SIZE_BYTES ((CONFIG_AUDIO_FRAME_SIZE_SAMPLES / 2) + 3)
9 #elif (CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_BV32FP)
10 # define CONFIG_AUDIO_FRAME_SIZE_SAMPLES 80
11 # define CONFIG_AUDIO_FRAME_SIZE_BYTES 20
12 #elif (CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_OPUS)
13 # define CONFIG_AUDIO_FRAME_SIZE_BYTES ((CONFIG_OPUS_BITRATE_LIMIT * CONFIG_AUDIO_FRAME_SIZE_SAMPLES / (8 * CONFIG_AUDIO_SAMPLING_FREQUENCY)) + ((CONFIG_OPUS_HEADER_ENABLED) ? 2 : 0))
14 # define CONFIG_OPUS_VBR_ENABLED ((CONFIG_OPUS_BITRATE_CFG & 0x01) == 0x00)
15 # define CONFIG_OPUS_BITRATE (CONFIG_OPUS_BITRATE_CFG & ~0x0F)
16 # if (CONFIG_OPUS_BITRATE > CONFIG_OPUS_BITRATE_LIMIT)
17 # error "Bitrate limit cannot be lower than selected codec bitrate"
18 # endif
19 #elif (CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_SBC)
20 /*
21  * See A2DP specification v1.3.1, page 70, 12.9 Calculation of Bit Rate and Frame Length.
22  * Since MONO is the only mode used here, the size is calculated for one channel.
23  *
24  * Fixed settings used for mSBC are taken from "Hands-Free Profile 1.7",
25  * page 115, section 5.7.4 "mSBC coding".
26  */
27 # define CONFIG_AUDIO_FRAME_SIZE_SAMPLES (CONFIG_SBC_BLOCKS * CONFIG_SBC_SUBBANDS)
28 # define CONFIG_AUDIO_FRAME_SIZE_BYTES (4 + ((4 * CONFIG_SBC_SUBBANDS) / 8) + CEIL_DIV(CONFIG_SBC_BLOCKS * CONFIG_SBC_BITPOOL, 8))
29 # if (CONFIG_SBC_MODE == CONFIG_SBC_MODE_MSBC)
30 # define CONFIG_SBC_BLOCKS 15
31 # define CONFIG_SBC_SUBBANDS 8
32 # define CONFIG_SBC_ALLOCATION SBC_LOUDNESS
33 # define CONFIG_SBC_BITPOOL 26
34 # endif
35 #else
36 # error "Unsupported Compression"
37 #endif
38 
39 #if (defined(CONFIG_AUDIO_FRAME_SIZE_SAMPLES) && !defined(CONFIG_AUDIO_FRAME_SIZE_MS))
40 # define CONFIG_AUDIO_FRAME_SIZE_MS (1000 * CONFIG_AUDIO_FRAME_SIZE_SAMPLES / CONFIG_AUDIO_SAMPLING_FREQUENCY)
41 #elif (defined(CONFIG_AUDIO_FRAME_SIZE_MS) && !defined(CONFIG_AUDIO_FRAME_SIZE_SAMPLES))
42 # define CONFIG_AUDIO_FRAME_SIZE_SAMPLES (CONFIG_AUDIO_FRAME_SIZE_MS * CONFIG_AUDIO_SAMPLING_FREQUENCY / 1000)
43 #else
44 # error "Either CONFIG_AUDIO_FRAME_SIZE_SAMPLES or CONFIG_AUDIO_FRAME_SIZE_MS has to be defined!"
45 #endif
46 
47 // Create PDM configuration basing on audio settings.
48 #if (CONFIG_AUDIO_SAMPLING_FREQUENCY == 8000)
49 # define CONFIG_PDM_MCLKFREQ 0x04100000
50 # define CONFIG_AUDIO_REAL_SAMPLING_FREQUENCY 7936
51 #elif (CONFIG_AUDIO_SAMPLING_FREQUENCY == 16000)
52 # define CONFIG_PDM_MCLKFREQ 0x08400000
53 # define CONFIG_AUDIO_REAL_SAMPLING_FREQUENCY 16125
54 #elif (CONFIG_AUDIO_SAMPLING_FREQUENCY == 24000)
55 # define CONFIG_PDM_MCLKFREQ 0x0C000000
56 # define CONFIG_AUDIO_REAL_SAMPLING_FREQUENCY 23819
57 #elif (CONFIG_AUDIO_SAMPLING_FREQUENCY == 32000)
58 # define CONFIG_PDM_MCLKFREQ 0x10000000
59 # define CONFIG_AUDIO_REAL_SAMPLING_FREQUENCY 31250
60 #else
61 # error "Unsuppored CONFIG_AUDIO_SAMPLING_FREQUENCY value!"
62 #endif
63 
64 #if CONFIG_AUDIO_ANR_ENABLED
65 # define CONFIG_PDM_BUFFER_SIZE_SAMPLES (2 * CONFIG_AUDIO_FRAME_SIZE_SAMPLES)
66 #else /* !CONFIG_AUDIO_ANR_ENABLED */
67 # define CONFIG_PDM_BUFFER_SIZE_SAMPLES (1 * CONFIG_AUDIO_FRAME_SIZE_SAMPLES)
68 #endif /* CONFIG_AUDIO_ANR_ENABLED */
69 
70 // Calculate stack size.
71 #if CONFIG_AUDIO_ENABLED
72 # if (CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_BV32FP)
73 # define CONFIG_STACK_SIZE_AUDIO CONFIG_STACK_SIZE_AUDIO_BV32FP
74 # elif ((CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_OPUS) && (CONFIG_OPUS_MODE == CONFIG_OPUS_MODE_CELT))
75 # define CONFIG_STACK_SIZE_AUDIO CONFIG_STACK_SIZE_AUDIO_OPUS_CELT
76 # elif ((CONFIG_AUDIO_CODEC == CONFIG_AUDIO_CODEC_OPUS) && (CONFIG_OPUS_MODE == CONFIG_OPUS_MODE_SILK))
77 # define CONFIG_STACK_SIZE_AUDIO CONFIG_STACK_SIZE_AUDIO_OPUS_SILK
78 # else
79 # define CONFIG_STACK_SIZE_AUDIO 0
80 # endif
81 #else /* !CONFIG_AUDIO_ENABLED */
82 # define CONFIG_STACK_SIZE_AUDIO 0
83 #endif /* CONFIG_AUDIO_ENABLED */
84 
85 #if defined(CONFIG_BOARD_NRF52832_PCA20023) || defined(CONFIG_BOARD_NRF52810_PCA20031)
86 # if !CONFIG_PDM_MIC_PWR_CTRL_ENABLED
87 # error "Product Example devices require control over microphone power line to be enabled."
88 # endif
89 #endif
90 
91 #endif /* _SR3_CONFIG_AUDIO_H */

Documentation feedback | Developer Zone | Subscribe | Updated