Skip to content

Commit a4903cc

Browse files
committed
first commit
0 parents  commit a4903cc

File tree

463 files changed

+62604
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

463 files changed

+62604
-0
lines changed

.vscode/settings.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"files.associations": {
3+
"array": "cpp",
4+
"deque": "cpp",
5+
"string": "cpp",
6+
"unordered_map": "cpp",
7+
"vector": "cpp",
8+
"string_view": "cpp",
9+
"initializer_list": "cpp"
10+
}
11+
}

Doxyfile

+2,619
Large diffs are not rendered by default.

README.md

+140
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
2+
## Arduino Audio Driver
3+
4+
I was never quite happy with my [AudioKit project](https://github.com/pschatzmann/arduino-audiokit), that was a quick and dirty adaptation of the Espressif IDF Drivers for Arduino. In this project I finally implemented some clean and simple C++ classes. This reduced the complexity considerably and increased the flexibility tremendously!
5+
6+
The goal of this project is to provide an easy API to configure different audio codec chips. After setting up the codec, you can use the I2S functionality provided by your microcontroller.
7+
8+
Supported audio codec chips are e.g
9+
10+
- AC101
11+
- ES8388
12+
- ES8311
13+
- CS43l22
14+
- ES7243
15+
- etc
16+
17+
While you can use this library stand alone, I recommend to use it together with my AudioTools project which provides a nice integration with it's I2SCodecStream class.
18+
19+
## AudioTools
20+
21+
```C++
22+
23+
#include "AudioTools.h"
24+
#include "AudioLibs/I2SCodecStream.h"
25+
26+
I2SCodecStream i2s(LyratV43);
27+
28+
void setup() {
29+
// setup i2s and codec
30+
auto cfg = i2s.defaultConfig();
31+
cfg.sample_rate = 44100;
32+
cfg.bits_per_sample = 16;
33+
cfg.channels = 1;
34+
i2s.begin();
35+
// set volume
36+
i2s.setVolume(0.5);
37+
}
38+
39+
```
40+
You can use the I2SCodecStream like the I2SStream but it provides some additional functionality, like setting the volume via the codec. In the constructor you need to provide an audio board object.
41+
42+
43+
## Predefined Boards
44+
45+
A board definition consists of a driver class and pin definitions for that specific board. You can easily use the predefined boards. E.g. the following code is setting up and starting the codec on a Lyrat board:
46+
47+
```C++
48+
49+
#include "AudioBoard.h"
50+
51+
void setup() {
52+
CodecConfig cfg;
53+
cfg.adc_input = ADC_INPUT_LINE1;
54+
cfg.dac_output = DAC_OUTPUT_ALL;
55+
cfg.i2s.bits = BIT_LENGTH_16BITS;
56+
cfg.i2s.rate = RATE_44K;
57+
//cfg.i2s.fmt = I2S_NORMAL;
58+
//cfg.i2s.mode = MODE_SLAVE;
59+
LyratV43.begin(cfg);
60+
61+
}
62+
63+
```
64+
65+
Check the documentation for all available boards.
66+
67+
68+
## Custom Boards
69+
70+
You can also easily define your custom boards by defining the driver and your specifc pins
71+
72+
```C++
73+
74+
#include "AudioBoard.h"
75+
76+
Pins my_pins;
77+
AudioBoard board(my_pins, &AudioDriverES8388);
78+
79+
void setup() {
80+
// add i2c codec pins: scl, sda, port
81+
my_pins.addI2C(CODEC, 32, 22, 0x20);
82+
// add i2s pins: mclk, bclk, ws, data_out, data_in
83+
my_pins.addI2S(CODEC, 0, 27, 26, 25, 35);
84+
// add other pins: PA on gpio 21
85+
my_pins.addPin(PA, 21);
86+
87+
// configure codec
88+
CodecConfig cfg;
89+
cfg.adc_input = ADC_INPUT_LINE1;
90+
cfg.dac_output = DAC_OUTPUT_ALL;
91+
cfg.i2s.bits = BIT_LENGTH_16BITS;
92+
cfg.i2s.rate = RATE_44K;
93+
//cfg.i2s.fmt = I2S_NORMAL;
94+
//cfg.i2s.mode = MODE_SLAVE;
95+
board.begin(cfg);
96+
97+
}
98+
99+
```
100+
## Logging
101+
102+
The functionality has a built in logger. The default log level has been set to Warning. You can change it like this:
103+
104+
```C++
105+
106+
LOGLEVEL_AUDIODRIVER = AudioDriverDebug; // or AudiDriverInfo, AudioDriverWarning, AudioDriverError
107+
108+
```
109+
110+
## Support
111+
112+
I spent a lot of time to provide a comprehensive and complete documentation.
113+
So please read the documentation first and check the issues and discussions before posting any new ones on Github.
114+
115+
Open issues only for bugs and if it is not a bug, use a discussion: Provide enough information about
116+
- the selected scenario/sketch
117+
- what exactly you are trying to do
118+
- your hardware
119+
- your software versions
120+
- what exactly your problem is
121+
122+
to enable others to understand and reproduce your issue.
123+
124+
Finally, __don't__ send me any e-mails or post questions on my personal website!
125+
126+
127+
## Installation in Arduino
128+
129+
You can download the library as zip and call include Library -> zip library. Or you can git clone this project into the Arduino libraries folder e.g. with
130+
131+
```
132+
cd ~/Documents/Arduino/libraries
133+
git clone https://github.com/pschatzmann/arduino-audio-driver.git
134+
135+
```
136+
137+
138+
139+
140+

docs/html/_audio_board_8h.html

+137
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2+
<html xmlns="http://www.w3.org/1999/xhtml">
3+
<head>
4+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6+
<meta name="generator" content="Doxygen 1.9.1"/>
7+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
8+
<title>arduino-audio-driver: src/AudioBoard.h File Reference</title>
9+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
10+
<script type="text/javascript" src="jquery.js"></script>
11+
<script type="text/javascript" src="dynsections.js"></script>
12+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
13+
<script type="text/javascript" src="search/searchdata.js"></script>
14+
<script type="text/javascript" src="search/search.js"></script>
15+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
16+
</head>
17+
<body>
18+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19+
<div id="titlearea">
20+
<table cellspacing="0" cellpadding="0">
21+
<tbody>
22+
<tr style="height: 56px;">
23+
<td id="projectalign" style="padding-left: 0.5em;">
24+
<div id="projectname">arduino-audio-driver
25+
</div>
26+
</td>
27+
</tr>
28+
</tbody>
29+
</table>
30+
</div>
31+
<!-- end header part -->
32+
<!-- Generated by Doxygen 1.9.1 -->
33+
<script type="text/javascript">
34+
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
35+
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
36+
/* @license-end */
37+
</script>
38+
<script type="text/javascript" src="menudata.js"></script>
39+
<script type="text/javascript" src="menu.js"></script>
40+
<script type="text/javascript">
41+
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
42+
$(function() {
43+
initMenu('',true,false,'search.php','Search');
44+
$(document).ready(function() { init_search(); });
45+
});
46+
/* @license-end */</script>
47+
<div id="main-nav"></div>
48+
<!-- window showing the filter options -->
49+
<div id="MSearchSelectWindow"
50+
onmouseover="return searchBox.OnSearchSelectShow()"
51+
onmouseout="return searchBox.OnSearchSelectHide()"
52+
onkeydown="return searchBox.OnSearchSelectKey(event)">
53+
</div>
54+
55+
<!-- iframe showing the search results (closed by default) -->
56+
<div id="MSearchResultsWindow">
57+
<iframe src="javascript:void(0)" frameborder="0"
58+
name="MSearchResults" id="MSearchResults">
59+
</iframe>
60+
</div>
61+
62+
<div id="nav-path" class="navpath">
63+
<ul>
64+
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
65+
</div>
66+
</div><!-- top -->
67+
<div class="header">
68+
<div class="summary">
69+
<a href="#nested-classes">Classes</a> &#124;
70+
<a href="#namespaces">Namespaces</a> &#124;
71+
<a href="#var-members">Variables</a> </div>
72+
<div class="headertitle">
73+
<div class="title">AudioBoard.h File Reference</div> </div>
74+
</div><!--header-->
75+
<div class="contents">
76+
<div class="textblock"><code>#include &quot;<a class="el" href="_driver_8h_source.html">Driver.h</a>&quot;</code><br />
77+
<code>#include &quot;<a class="el" href="_pins_8h_source.html">Pins.h</a>&quot;</code><br />
78+
</div>
79+
<p><a href="_audio_board_8h_source.html">Go to the source code of this file.</a></p>
80+
<table class="memberdecls">
81+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
82+
Classes</h2></td></tr>
83+
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__driver_1_1_audio_board.html">AudioBoard</a></td></tr>
84+
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Defitintion for audio board pins and an audio driver. <a href="classaudio__driver_1_1_audio_board.html#details">More...</a><br /></td></tr>
85+
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
86+
</table><table class="memberdecls">
87+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
88+
Namespaces</h2></td></tr>
89+
<tr class="memitem:namespaceaudio__driver"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceaudio__driver.html">audio_driver</a></td></tr>
90+
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
91+
</table><table class="memberdecls">
92+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
93+
Variables</h2></td></tr>
94+
<tr class="memitem:ga6e512f44cc6db0994d6b1617abcc93b0"><td class="memItemLeft" align="right" valign="top">AudioDriverAC101Class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga6e512f44cc6db0994d6b1617abcc93b0">AudioDriverAC101</a></td></tr>
95+
<tr class="separator:ga6e512f44cc6db0994d6b1617abcc93b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
96+
<tr class="memitem:ga9752ab43ee1dc1a25230ddfbd0916c15"><td class="memItemLeft" align="right" valign="top">AudioDriverCS43l22Class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga9752ab43ee1dc1a25230ddfbd0916c15">AudioDriverCS43l22</a></td></tr>
97+
<tr class="separator:ga9752ab43ee1dc1a25230ddfbd0916c15"><td class="memSeparator" colspan="2">&#160;</td></tr>
98+
<tr class="memitem:ga64fcfa236c4e6cf9b438698efcac5fa4"><td class="memItemLeft" align="right" valign="top">AudioDriverES7243Class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga64fcfa236c4e6cf9b438698efcac5fa4">AudioDriverES7243</a></td></tr>
99+
<tr class="separator:ga64fcfa236c4e6cf9b438698efcac5fa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
100+
<tr class="memitem:ga0cd510e086f73322b9a751a00eee2c1e"><td class="memItemLeft" align="right" valign="top">AudioDriverES8311Class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga0cd510e086f73322b9a751a00eee2c1e">AudioDriverES8311</a></td></tr>
101+
<tr class="separator:ga0cd510e086f73322b9a751a00eee2c1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
102+
<tr class="memitem:gad404af509b8a5ae73c689d6faa3d54df"><td class="memItemLeft" align="right" valign="top">AudioDriverES8388Class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#gad404af509b8a5ae73c689d6faa3d54df">AudioDriverES8388</a></td></tr>
103+
<tr class="separator:gad404af509b8a5ae73c689d6faa3d54df"><td class="memSeparator" colspan="2">&#160;</td></tr>
104+
<tr class="memitem:ga3c281a9dabe9c42b609f386a515d7082"><td class="memItemLeft" align="right" valign="top">AudioDriverLyratMiniClass&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga3c281a9dabe9c42b609f386a515d7082">AudioDriverLyratMini</a></td></tr>
105+
<tr class="separator:ga3c281a9dabe9c42b609f386a515d7082"><td class="memSeparator" colspan="2">&#160;</td></tr>
106+
<tr class="memitem:gaebae1c0395623b4715a91f2f8c64ad6c"><td class="memItemLeft" align="right" valign="top">AudioBoard&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#gaebae1c0395623b4715a91f2f8c64ad6c">AudioKitAC101</a> {PinsAudioKitAC101, &amp;AudioDriverAC101}</td></tr>
107+
<tr class="separator:gaebae1c0395623b4715a91f2f8c64ad6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
108+
<tr class="memitem:ga9282e4e123ca2db202b817e95b4c4d6b"><td class="memItemLeft" align="right" valign="top">AudioBoard&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga9282e4e123ca2db202b817e95b4c4d6b">AudioKitEs8388V1</a> {PinsAudioKitEs8388v1, &amp;AudioDriverES8388}</td></tr>
109+
<tr class="separator:ga9282e4e123ca2db202b817e95b4c4d6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
110+
<tr class="memitem:ga3ecb4bf2db338ccd232cad96a2e2341e"><td class="memItemLeft" align="right" valign="top">AudioBoard&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga3ecb4bf2db338ccd232cad96a2e2341e">AudioKitEs8388V2</a> {PinsAudioKitEs8388v2, &amp;AudioDriverES8388}</td></tr>
111+
<tr class="separator:ga3ecb4bf2db338ccd232cad96a2e2341e"><td class="memSeparator" colspan="2">&#160;</td></tr>
112+
<tr class="memitem:gad1d9b3159991732b6af524c6c8e592f2"><td class="memItemLeft" align="right" valign="top">AudioBoard&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#gad1d9b3159991732b6af524c6c8e592f2">LyratMini</a> {PinsLyratMini, &amp;AudioDriverLyratMini}</td></tr>
113+
<tr class="separator:gad1d9b3159991732b6af524c6c8e592f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
114+
<tr class="memitem:ga98fa8fe4385c4198150679fddade5eef"><td class="memItemLeft" align="right" valign="top">AudioBoard&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga98fa8fe4385c4198150679fddade5eef">LyratV42</a> {PinsLyrat42, &amp;AudioDriverES8388}</td></tr>
115+
<tr class="separator:ga98fa8fe4385c4198150679fddade5eef"><td class="memSeparator" colspan="2">&#160;</td></tr>
116+
<tr class="memitem:ga0ffdf5c889c7a240e72df4ce7e323478"><td class="memItemLeft" align="right" valign="top">AudioBoard&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga0ffdf5c889c7a240e72df4ce7e323478">LyratV43</a> {PinsLyrat43, &amp;AudioDriverES8388}</td></tr>
117+
<tr class="separator:ga0ffdf5c889c7a240e72df4ce7e323478"><td class="memSeparator" colspan="2">&#160;</td></tr>
118+
<tr class="memitem:ga4de967e315821b064d50a78d01877d67"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_pins_audio_kit_a_c101_class.html">PinsAudioKitAC101Class</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga4de967e315821b064d50a78d01877d67">PinsAudioKitAC101</a></td></tr>
119+
<tr class="separator:ga4de967e315821b064d50a78d01877d67"><td class="memSeparator" colspan="2">&#160;</td></tr>
120+
<tr class="memitem:gaac2b21f064b1a332b2ae9b35fa46484e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_pins_audio_kit_es8388v1_class.html">PinsAudioKitEs8388v1Class</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#gaac2b21f064b1a332b2ae9b35fa46484e">PinsAudioKitEs8388v1</a></td></tr>
121+
<tr class="separator:gaac2b21f064b1a332b2ae9b35fa46484e"><td class="memSeparator" colspan="2">&#160;</td></tr>
122+
<tr class="memitem:gaec73d289b40131bb320b17356793430e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_pins_audio_kit_es8388v2_class.html">PinsAudioKitEs8388v2Class</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#gaec73d289b40131bb320b17356793430e">PinsAudioKitEs8388v2</a></td></tr>
123+
<tr class="separator:gaec73d289b40131bb320b17356793430e"><td class="memSeparator" colspan="2">&#160;</td></tr>
124+
<tr class="memitem:ga4c69c022bab026eb5d85877b0800771d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_pins_lyrat42_class.html">PinsLyrat42Class</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga4c69c022bab026eb5d85877b0800771d">PinsLyrat42</a></td></tr>
125+
<tr class="separator:ga4c69c022bab026eb5d85877b0800771d"><td class="memSeparator" colspan="2">&#160;</td></tr>
126+
<tr class="memitem:ga61f7164942e4687d3136447ecc1fb78e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_pins_lyrat43_class.html">PinsLyrat43Class</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga61f7164942e4687d3136447ecc1fb78e">PinsLyrat43</a></td></tr>
127+
<tr class="separator:ga61f7164942e4687d3136447ecc1fb78e"><td class="memSeparator" colspan="2">&#160;</td></tr>
128+
<tr class="memitem:ga0f4a0dbd3aeea6d499d87a62293e012e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_pins_lyrat_mini_class.html">PinsLyratMiniClass</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__audio__driver.html#ga0f4a0dbd3aeea6d499d87a62293e012e">PinsLyratMini</a></td></tr>
129+
<tr class="separator:ga0f4a0dbd3aeea6d499d87a62293e012e"><td class="memSeparator" colspan="2">&#160;</td></tr>
130+
</table>
131+
</div><!-- contents -->
132+
<!-- start footer part -->
133+
<hr class="footer"/><address class="footer"><small>
134+
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
135+
</small></address>
136+
</body>
137+
</html>

0 commit comments

Comments
 (0)