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