user43755: I am an Arduino beginner and I am planning to make a musical instrument with it. I want to add record and playback functionalities into the instrument. 
I figure I will have to store lots of data to meet this feature, but the Arduino I'm using (Uno/Nano) probably won't have enough memory to hold lots of songs. 
My question is, is using an SD card with an SD shield a good way to expand memory? If not, what should I use to do so?
Thanks

user4143: Since you are working just with instructions on how to play audio, not the audio itself, you effectively have very small amounts of data (comparatively).
You can store that data in a file on SD card and read it back simply enough (there's plenty of examples for reading from and writing to SD).
You don't need the whole song in memory all the time - you only care about the note you're playing (or recording) at any one instance in time, so you don't need lots of memory.
How you format the data is entirely up to you, but I would suggest following the MIDI standard which will allow you to work with other tools to create and edit the files as well as the Arduino. You can also then export your music simply to other applications, such as MuseScore, Finale, Sibelius, Ardour, etc.

user31105: There are different options:

SD shield: much memory (GB's), however keep in mind that it will take time to retrieve the data from the SD card. Also you can retrieve 512 bytes every time (which also means it costs 512 precious bytes of arduino SRAM).
External SRAM: There are external SRAM ICs, like 23LC1024 or 24K256. These are much faster and offer 128 or 32 KB. There are many others too, these are most 'common'. These are much faster than SD cards, you can get 1, 2 or more bytes per time. But it's not the same as Arduino SRAM, e.g. you cannot really store variables, so you have to copy data to internal SRAM to be used.

So first, check how much you need, and more important: what is the latency you can live with.

43755: <p>I am an Arduino beginner and I am planning to make a musical instrument with it. I want to add record and playback functionalities into the instrument. </p>

<p>I figure I will have to store lots of data to meet this feature, but the Arduino I'm using (Uno/Nano) probably won't have enough memory to hold lots of songs. </p>

<p>My question is, is using an SD card with an SD shield a good way to expand memory? If not, what should I use to do so?</p>

<p>Thanks</p>
 4143: <p>Since you are working just with instructions on how to play audio, not the audio itself, you effectively have very small amounts of data (comparatively).</p>

<p>You can store that data in a file on SD card and read it back simply enough (there's plenty of examples for reading from and writing to SD).</p>

<p>You don't need the whole song in memory all the time - you only care about the note you're playing (or recording) at any one instance in time, so you don't need lots of memory.</p>

<p>How you format the data is entirely up to you, but I would suggest following the MIDI standard which will allow you to work with other tools to create and edit the files as well as the Arduino. You can also then export your music simply to other applications, such as MuseScore, Finale, Sibelius, Ardour, etc.</p>
 31105: <p>There are different options:</p>

<ul>
<li><p>SD shield: much memory (GB's), however keep in mind that it will take time to retrieve the data from the SD card. Also you can retrieve 512 bytes every time (which also means it costs 512 precious bytes of arduino SRAM).</p></li>
<li><p>External SRAM: There are external SRAM ICs, like 23LC1024 or 24K256. These are much faster and offer 128 or 32 KB. There are many others too, these are most 'common'. These are much faster than SD cards, you can get 1, 2 or more bytes per time. But it's not the same as Arduino SRAM, e.g. you cannot really store variables, so you have to copy data to internal SRAM to be used.</p></li>
</ul>

<p>So first, check how much you need, and more important: what is the latency you can live with.</p>
