1
+ /* *
2
+ * @file streams-sd_m4a-audiokit.ino
3
+ * @author Peter Schatzmann
4
+ * @brief Example for decoding M4A files on the AudioKit using the AudioBoardStream
5
+ * @version 0.1
6
+ * @date 2023-10-01
7
+ */
8
+
9
+ #include " AudioTools.h"
10
+ #include " AudioTools/AudioCodecs/CodecALAC.h"
11
+ #include " AudioTools/AudioCodecs/CodecAACHelix.h"
12
+ #include " AudioTools/AudioCodecs/ContainerM4A.h"
13
+ #include " AudioTools/AudioCodecs/MultiDecoder.h"
14
+ #include " AudioTools/AudioLibs/AudioBoardStream.h" // install https://github.com/pschatzmann/arduino-audio-driver
15
+ #include " SD.h"
16
+
17
+ MultiDecoder multi_decoder;
18
+ ContainerM4A dec_m4a (multi_decoder);
19
+ AACDecoderHelix dec_aac;
20
+ DecoderALAC dec_alac;
21
+ AudioBoardStream out (AudioKitEs8388V1);
22
+ EncodedAudioOutput decoder_output (&out, &dec_m4a);
23
+ File file;
24
+ StreamCopy copier (decoder_output, file);
25
+
26
+ void setup () {
27
+ Serial.begin (115200 );
28
+ AudioToolsLogger.begin (Serial, AudioToolsLogLevel::Info);
29
+
30
+ // start AudioBoard with setup of CD pins
31
+ auto cfg = out.defaultConfig (TX_MODE);
32
+ cfg.sd_active = true ;
33
+ if (!out.begin (cfg)){
34
+ Serial.println (" Failed to start CSV output!" );
35
+ return ;
36
+ }
37
+
38
+ if (!SD.begin (PIN_AUDIO_KIT_SD_CARD_CS)){
39
+ Serial.println (" SD Card initialization failed!" );
40
+ return ;
41
+ }
42
+
43
+ file = SD.open (" /m4a/aac.m4a" );
44
+ if (!file) {
45
+ Serial.println (" Failed to open file!" );
46
+ return ;
47
+ }
48
+
49
+ // mp4 supports alac and aac
50
+ multi_decoder.addDecoder (dec_alac," audio/alac" );
51
+ multi_decoder.addDecoder (dec_aac," audio/aac" );
52
+
53
+ // start decoder output
54
+ if (!decoder_output.begin ()) {
55
+ Serial.println (" Failed to start decoder output!" );
56
+ return ;
57
+ }
58
+
59
+ Serial.println (" M4A decoding started..." );
60
+ }
61
+
62
+
63
+ void loop () {
64
+ copier.copy ();
65
+ }
0 commit comments