<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">On Wed, May 15, 2019 at 2:45 PM Anthony Walter via lazarus <<a href="mailto:lazarus@lists.lazarus-ide.org">lazarus@lists.lazarus-ide.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>I have summer camp with several successive week long classes coming up and am trying to put together some fun programming materials to engage the kids and hopefully encourage them to explore more.</div><div dir="ltr"><br></div><div>Yesterday I created the start of my next project for teaching kids on the subject of computer programming using Lazarus and Free Pascal as the teaching tools. Here is a brief video demonstrating what I have so far along with a github page containing the sources.<br></div><div><br></div><div><a href="https://cache.getlazarus.org/videos/sound-shop-example.mp4" target="_blank">https://cache.getlazarus.org/videos/sound-shop-example.mp4</a></div><div><a href="https://github.com/sysrpl/SoundShop/" target="_blank">https://github.com/sysrpl/SoundShop/</a><br></div><div><br></div><div>What the Sound Shop program does:</div><div><br></div><div>Sound Shop let's kids write functions and hear the results of those functions. Right now it's dead simple to write wave form functions, but I am going to enhance the program to allow for effect pipelines which map unto keys. These pipelines will be a lot like the node in my Image Shop program but will map to piano keys instead of the display.</div><div><br></div><div>I need to take a break from these example projects for a few days and work on helping the school with schedules, but I thought I'd ask anyone who find this interesting for some help.<br></div><div><br></div><div>Here are some of the things anyone can do to help:</div><div><br></div><div>Write a routine to load a music or song that will play on the keyboard using the currently assigned piano keys. You can turn a key on or off by simply typing Piano.Key[Index] := True/False. This will light up or dim the key and play the corresponding mapped audio channel. Users can play already along with with music or songs, so there's that feature. Obviously this feature will also need a few demo music or song files. You can choose however you want to store and read a music or song file.</div><div><br></div><div>Write an MP3 streamer that will convert in memory portions of an MP3 file to audio samples. This will allow piano key channels to be mapped to sounds other than computer generated waves. Also, I will eventually hook effects up to both wave and MP3 samples. Please no third part libraries to convert MP3 data to samples, only Pascal code. I will do this if no one takes up the task.</div><div><br></div><div>Fix the issues with 32 bpp PNG images on Linux.</div><div><br></div><div>Some of the things I am going to do:<br></div><div><br></div><div>I am going to add a sound pipeline to the program to allow for effects and other things to modify sounds before they are routed from the piano keys to the underlying audio system. Each piano key will have its own pipeline.</div><div><br></div><div>I am going to add an oscilloscope to visualize the all the collectively playing samples as they form waves. The scope will have a few controls to adjust the phase, stretch, and amplitude.</div><div><br></div><div>I might add a bar staff allowing rectangular notes to be places on it and stretched. Moving notes up or down on the staff changes the mapped piano key, and stretching alters the note duration.</div><div><br></div><div>If anyone want to contribute it would be much appreciated.</div><div><br>Thanks</div><div><br></div><div>Anthony</div></div></div></blockquote><div><br></div><div>Hi Anthony,</div><div><br></div><div>thanks for sharing this incredible work.</div><div><br></div><div>Could you attach some license to this stuff? The question is just because you wrote nice classes like TPianoKeyboard which could be used in a final application. (for example, I could use it to produce alarm songs in my Raspberry board dynamically instead of playing them from files)</div><div><br></div><div>best,</div><div><br></div></div>--<br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Silvio Clécio</div></div></div></div></div></div>