[Lazarus] Update sound shop my next tutoring project

Marc Weustink marc at dommelstein.nl
Thu May 16 11:08:37 CEST 2019


Anthony Walter via lazarus wrote:
> 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.
> 
> 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.
> 
> https://cache.getlazarus.org/videos/sound-shop-example.mp4
> https://github.com/sysrpl/SoundShop/

Hi,

I your video you talked about popping and clicking of the tones. You 
partly solved this by adding an Attack and a Release (you use attack 
here in in fact these are 2 different values, and while you're at it you 
can add a Decay too :))

Anyway, I haven't looked at the code itself (only what was shown in the 
video), but most likely those pops and clicks are caused by phase jumps 
when you switch from one frequency to another.

Imagine your playing A -> B and you start generating the sine of B at 
phase=0, there is a big chance that A isn't at phase=0. So you get a 
sudden jump in your output. your ear is very sensitive for this and 
results in a click.

What I've done in this case is based on the frequency/samplerate to 
play, is calculate the delta phase for each sample (for 220Hz/48k -> 
delta=220*2Pi/48000) and increase a global phase for each sample you 
calculate with this global phase.
Therefore if if you change frequency, the phase of the new tone 
continues where the previous ended.

To prevent your global phase to grow, substract 2Pi when it is larger 
than 2Pi. Or even better, leave out 2Pi in the delta phase, and use 
2Pi*globalphase to calculate and globalphase=fraq(globalphase + deltaphase)


Hope this solves your issue,
Marc


More information about the lazarus mailing list