It is great that the author included some known pieces for you to "watch" (click the music icon on the bottom right). Of course one first goes to Bach to test the mettle. While "watching" BWV 578 one thing I immediately noticed was how the rhythm of the counterpoint stood out to me in a new way. I have seen many visualizers (the great https://www.youtube.com/user/smalin/videos deserves mention), but I have found most to have some sort of constant object moving around to visualization the tones (i.e. a ball moving up and down). In this case, there is no "moving object" that we follow and we are instead left with the tones in isolation. I greatly enjoyed seeing how this increased my appreciation of Bach's rhythmic counterpoint as I could see when multiple strings were plucked at the same time with the clear purple coloring. Amazing work!
tgv 108 days ago [-]
What I found weird is that there's only one guitar piece in the list: Asturias. The rest is keyboard music. And unfortunately, that piece shows weaknesses in the system. Notes get cut off, the rhythm is wrong, and there was one very loud buzzing sound, which suggests the buffer can't be filled fast enough.
hombre_fatal 108 days ago [-]
Man, I didn't even notice the icons in the bottom corners. I thought it was just a quick toy on first pass which is a shame because loading existing songs is really cool.
I wonder how many other people close the tab without noticing the buttons like I did.
thrtythreeforty 108 days ago [-]
Also love that MIDI velocity is mapped to pluck position, so higher velocity notes are brighter. This is a beautiful representation of physical modeling.
paint 108 days ago [-]
[dead]
_spduchamp 108 days ago [-]
Plucking strings is usually synthesized using Karplus-Strong synthesis which is a very short delay line loop with a low pass filter. The delay gets excited with a short burst of noise. The length of the delay line tunes the string.
Karplus-Strong can be extended in ways to simulate different types of plucking, acoustic pickup at bridge, or electric pickup at any point along tbe string, and plucked at any point along the string. Body resonance can be simulated etc. It's a pretty fun synth technique to play with. Amazing to take beyond simulating conventional instruments.
thrtythreeforty 108 days ago [-]
Karplus Strong sounds kind of bad though, if your goal is accurate sounds of instruments. The reason it works at all is that the noise generates the initial high harmonics of a pluck, then a low-pass simulates the frequency-dependent decay of those harmonics.
But this is very primitive compared to a massive body of research on better simulation. The delay line works great though, that part hasn't changed.
cp3io 108 days ago [-]
The algorithm was discovered in 1983, and for how computationally cheap it is, I'd say it's pretty convincing. Waveguide synthesis is a generalization of the same idea, often with more realistic results.
Variations on Karplus-Strong synthesis can yield some pretty wacky, dry and plucky types of sounds. In the original paper, the authors propose a variant of the algorithm which involves randomly alternating the sign (+/-) of every sample in the feedback loop, which creates a lot more atonal information in the signal. There’s also a variation floating around which uses an allpass filter in the feedback loop to introduce inharmonicity in the signal, see for example https://www.youtube.com/watch?v=SpC3t1EVF_Q.
aidenn0 108 days ago [-]
Really cool that plucking the strings near the edges gives a different timbre than plucking in the middle.
plasticeagle 108 days ago [-]
It does, and very cleverly too. The '?' button explains what's going on - he just takes the fourier analysis of the shape of the string when it's released, and plays tones from that.
madcaptenor 108 days ago [-]
Oh hey, it does. But why? (Seems like the same thing is true on actual physical strings.)
seanhunter 108 days ago [-]
The way strings resonate means the tone you hear contains the fundamental tone and a number of higher harmonics of that tone. Depending on where (and how) you play the string you can emphasise the harmonics more or the fundamental tone more.
Here for example is a piece made up largely of the harmonics (Portrait of Tracy Jaco Pastorius) https://www.youtube.com/watch?v=nsZ_1mPOuyk That's an electric bass and the bell-like sounds are harmonics. Basically he's just lightly touching the string in specific places to suppress the fundamental tone so you just hear the harmonics.
Whereas here (Stir it up - Bob Marley and the Wailers) https://www.youtube.com/watch?v=1hwL3S3Gtzs when the bass comes in, the player is holding his hand near the bridge (back of the strings) with the side of the palm resting on the strings to suppress all the harmonics so you only get the fundamental tone and it has this sort of muffled quality (because a lot of the brightness comes from harmonics).
> the player is holding his hand near the bridge (back of the strings) with the side of the palm resting on the strings to suppress all the harmonics so you only get the fundamental tone and it has this sort of muffled quality (because a lot of the brightness comes from harmonics).
Palm muting is one big technique to the more aggressive and chunkier metal sounds[1].
Even if you take out the music theory - or blatant disregard for - except kinda not, it's complicated, the different way you can create sounds with an electric guitar[2] in weird ways is quite amazing.
Touching the string at different points will excite different vibrational modes. Notably if you pluck in the exact center you activate none of the even-numbered nodes, if you pluck around the 1/3 point that's optimal for activating the second harmonic, etc. You can never not activate the fundamental mode touching it in one spot but you activate it less if you get close to the edge.
nicklecompte 108 days ago [-]
It's not just where you pluck the string: most electric guitars have a "neck" pickup and a "bridge" pickup (sometimes a third in the middle). The neck pickup is closer to the middle of the string, and the bridge pickup is close to the end of the string. Regardless of where you pluck, the bridge pickup has a significantly more prominent high-end, to the point of being a bit shrill when played in isolation. Typically rock guitarists play rhythm with the neck pickup so they don't overpower the vocalist, then lead with the bridge pickup so they cut through the mix without needing to amp the volume too loudly.
Why is this the case? It is funny that my guitarist's intuition seems very clear about it - "the string is tougher and clickier at the bridge compared to the neck, of course the tone is more shrill" - but in terms of actual analytical evidence I just have to say "something something Fourier coefficients" :) Refining the physical intuition a bit: I believe the boundary at the end of the string dampens lower-frequency (i.e. lower-energy) vibrations faster than higher-frequency vibrations, so the lower harmonics die off more quickly than the higher "nasal" harmonics.
mrob 108 days ago [-]
Isn't it just the geometry of the guitar constraining the ends of the string to have zero amplitude? The fundamental has peak amplitude only at the center of the vibrating part of the string. Higher harmonics have peaks in amplitude at multiple places along the string, and the higher the harmonic the closer one of those maxima is to the bridge.
nicklecompte 108 days ago [-]
The fundamental result of Fourier analysis is that we are saying the same thing :) Though I should have clarified that the kinetic energy is zero at the "boundary" (ie bridge).
IMO which answer you prefer depends on perspective:
- if you assume a wave can be broken down into sinusoidal overtones then your geometric approach is much more immediate and intuitive: sinusoidal overtones => higher overtones clearly have more kinetic energy near the boundary, just draw a picture.
- if you assume that higher-pitched overtones have more kinetic energy then the physics approach explains why they are sinusoidal. Not the specific shape unless you do the math, but the "gist" of the slope. If the overtones were more like square waves, with no real difference in shape between frequencies beyond the length of the rectangle, then the pickup position wouldn't matter. But they can't be, the overtones have to be more "trapezoidal." And in particular, the lower overtones must have a more gradual slope than the higher overtones.
The geometric approach makes a big (but correct) physical assumption for an easy analytical argument; the physical approach goes the other way, only depending on Newton's laws + a lot of elbow grease.
thrtythreeforty 108 days ago [-]
Bingo! It's all about harmonics' nodes. For a visualization, Cycfi Research has a great series on how pickup position affects tones. He also sells a "modeling pickup" based on this theory.
Just like on a real string instrument! I was wondering if they implemented this, and they have! Colour me impressed!
isoprophlex 108 days ago [-]
It's shockingly easy to make it sound good! Someone who understands music please explain to me why this works so well, I'm amazed!
fallingsquirrel 108 days ago [-]
The four groups of strings make up four chords. Going clockwise, they are C, Am, F, G. This is a common chord progression[1] in pop music. It became popular because the chords sound good together.
I should note that this is the same 4 chords as the '50s progression, but a different ordering (I V vi IV vs I vi IV V). One is associated with more recent pop/punk music and the others is more associated with doo-wop.
groby_b 108 days ago [-]
As others said - they're chords. And not just any chords, but chords we know sound great together. (If you haven't seen the 'Pachelbel Rant' yet, you should, it's an entire comedy bit based on the fact that these chords are fundamental to music: https://www.youtube.com/watch?v=uxC1fPE1QEE)
If you click on the little notes in the bottom right, you can pick other sets of chords, which give a different "vibe". (Me, I'm partial to the Andalusian ones)
That's why common advice to people starting the guitar is "Three chords, you can play anything. Four, you control the mood. Five, you're a god among men"
madcaptenor 108 days ago [-]
Pachelbel is slightly more complicated than the default here, five chords instead of four (adding iii - F#m in the key of D that he used, or Em in the key of C which is the key that this defaults to). So I guess that makes Pachelbel a god among men.
jzemeocala 108 days ago [-]
Actually....Pachelbel used a major III
welfare 108 days ago [-]
They are all chords (C, F, G, Am).
C/Am, F, G are adjacent in the circle of fifths so they will all play nice in a progression.
metaxy2 108 days ago [-]
To flesh this out, the root notes of C and A minor are not that close in the circle of fifths, but the chords sound similar because they share 2 notes (C is spelled C, E, G, and A minor is spelled A, C, E). A common device in major keys is to take a part played over the "1" chord (C in this case) and play it again, or some close variation, over the chord 2 steps down (A minor in this case) to get a "kind of the same, but sadder" version of the same part.
fuzzfactor 108 days ago [-]
There is an acoustic version, you can tune it however you like, and choose from all kinds of chords, but once you chose a chord it has to be tuned precisely to that set of notes or it would be "out of tune".
Each course of strings on the webpage somewhat behaves and sounds like an "ovikannel" when you strum it manually.
Here's one that was found hanging on a wall but they were normally attached to an entrance door so the wooden balls would swing against the strings when the door was opened, and play the chime:
One of the commenters was quite curious as to what it would sound like. Well about like this.
dsego 108 days ago [-]
The notes assigned to strings are chosen to make up chords (harmony).
postepowanieadm 108 days ago [-]
Even when making my own string it still sounds good. I didn't known I'm that gifted!
adrianmonk 108 days ago [-]
FYI, in Chrome on Linux, there's a glitchy crackling noise. Maybe a buffer under run or something. It happens a lot more often if you strum lots of strings quickly.
It also happens in Firefox but a lot less.
chaosprint 108 days ago [-]
I also have serious popping in chrome on my mac.
This shouldn't happen.
The main reason is the use of createScriptProcessor.
This should be replaced with AudioWorklet. Use WASM + SharedArraybuffer for calculation.
The visual of picking the strings is great, I spent a lot of time on it, I believe the vote is also a recognition of this.
Here is a similar idea (karplus) implemented with Rust + WASM, which is much better in terms of audio quality:
If you are interested in doing some use cases, leave a message. I am actively maintaining it recently.
TazeTSchnitzel 108 days ago [-]
This can happen a lot with web audio stuff like this, it's the browser struggling to keep up.
petrichorko 108 days ago [-]
Yes, modifying buffer_size in audio_shader.js to 4096 completely fixes this issue on Windows (chrome).
moffkalast 108 days ago [-]
Chrome on Windows as well.
l3x4ur1n 108 days ago [-]
Brave on Android also
SimDeBeau 108 days ago [-]
No sound on firefox on mac or ipad, and glitchy sound on safari on mac
ikari_pl 108 days ago [-]
Firefox on Android is fine
wayoverthecloud 108 days ago [-]
Chrome on Android too
elihu 108 days ago [-]
Can confirm on Chromium/Linux.
plasticeagle 108 days ago [-]
Arc on MacOS too.
bassdigit 108 days ago [-]
further idea: let strings resonate with the overtones of other strings being played
also: support different materials like steel/nylon/gut
LegitShady 108 days ago [-]
reading some of the reactions to this, it amazes me how many free VSTs just need a web interface of some kind to suddenly become interesting and popular.
If you have a DAW there are so many interesting free sound generators on the internet. Just spitfire audio has their free lab VSTs which give you 60 VSTs to play with - and thats just one company.
Its all just missing the front end a DAW normally provides but is too complicated for people just looking to mess around with sounds.
ks2048 108 days ago [-]
It would be nice if he or she described the algorithm in more detail. A common and simple string-synthesis method is called Karplus-Strong, but this sounds a bit better.
elihu 108 days ago [-]
In case you didn't see it, there's a little bit of detail given if you click the question mark in the upper left.
tambourine_man 108 days ago [-]
Make sure your phone isn’t on mute. On iPhone, the mute button. I was raising the volume to no avail.
Edit: I don’t know why I’m being downvoted, the mute button is very unintuitive. YouTube will play on a web page with mute on, but this page won’t.
ryandrake 108 days ago [-]
You're not wrong. To this day I have no idea what my phone's mute button actually mutes and what it lets through.
psadri 108 days ago [-]
I had the same issue. My phone is permanently muted so I forgot to even check that option.
Probably worth the app/os to give you a notice if you fiddle with the volume while muted.
protosam 108 days ago [-]
Isn’t working on iOS 17.4, iPhone 14. Both in Safari and the App Store download.
Edit: yes I’d pay $2 to play with this. lol
jpcfl 108 days ago [-]
You need to take your phone off silent.
protosam 108 days ago [-]
Well, this fixed it. I bet there is a lot of confusion for the people reporting it just works, while their phone is on silent. Seems to work on silent if you have headphones on.
jpcfl 107 days ago [-]
Interesting. I actually like this behavior and wish more applications would use it!
protosam 107 days ago [-]
Having thought about it, it makes sense for the web browser. Though I think the app should do something to bypass it, but I realize it is probably just a browser embed.
I peeked at the source code and it’s pretty wild to see this is what JavaScript can do these day.
cush 108 days ago [-]
Yeah I thought it was broken on iOS too, then flipped the silent switch and it worked.
CrazyStat 108 days ago [-]
Works for me on iOS 17.4.1, iPhone 15 Pro.
isolli 108 days ago [-]
Definitely getting it for my kids!
chaosprint 108 days ago [-]
amazing work!
However, I must point out that if tonejs is used here, audio will quickly become a bottleneck or even memory leak.
It reminds me of a Karplus Strong project written in rust that I saw before. This project is of course visually minimal, but demonstrates the use of rust + wasm audio.
I'm on Windows 11, Brave browser. Using Sound BlasterX G6 DAC.
foota 108 days ago [-]
I had a fun time making a game using MIDI with some friends for a game jam. There was a godot extension for MIDI (that I ended up mostly cannabalizing to get more control) and I used it to read and animate musical bars in a sort of guitar hero-y setup.
It was a fun project, although the game was a little rough around the edges to say the least.
slushy-chivalry 108 days ago [-]
I did not look at the source code yet, but is this some sorta physics modeling problem? Treat the strings as a a bunch of interconnected balls, then apply the force at point, compute other forces, interpolate a curve through the new state, then compute frequencies based on where the string was plucked? this is pretty cool
packetlost 108 days ago [-]
My guess is the strings are not modeled as balls balls as continuous lines with a set tension oscillating based on their length and thickness. It's presumably a bunch of trigonometry, but not the most insane modeling problem I've seen. Very cool none the less
fedix 108 days ago [-]
What's the most insane one ?
teknico 108 days ago [-]
The piano is a hard one. Best current result: Pianoteq.
I remember haring about someone creating a musical software model that was supposed to allow you to do things that you normally couldn't do i.e. pluck or strum a cymbal.
I tried to find it but never have.
Does anyone else know what it is?
LegitShady 108 days ago [-]
physical modelling synthesis has been around since the 70s. Some instruments are really complicated and require a bunch of FM oscillators to nicely replicate some physical sounds - things like cymbals and other metallic crashes especially.
vjandrea 108 days ago [-]
Very cool project, I love the drawing function, can bring to interesting ideas. Unfortunately, some songs are broken, MIDI file 404. The code tries to parse the empty response, instead of escaping early.
against_entropy 107 days ago [-]
Wow, I just tried. It's super easy to use and super fun. Whatever you draw on the screen, you basically obtain something not bad.
A new generation of audio games.
ecjhdnc2025 108 days ago [-]
Well that’s rather lovely.
munzilla 108 days ago [-]
As a musician, it's super interesting looking at the JS source (if you're a developer) and seeing how he applies musical concepts like notes and progressions to code.
phgn 108 days ago [-]
Hey all: don't miss the music button in the bottom right!!
You can play classical music on the simulated instruments. This is the nicest thing I've seen in a long time.
joewferrara 108 days ago [-]
The built in static, I'm not sure if it's purposeful or not, but I like it. If it is purposeful, it's a nice touch.
zoom6628 107 days ago [-]
That just put the biggest smile on my face since an old 2009 vintage app to simulate the guzheng.
crawsome 108 days ago [-]
I'm going to pick this nit, but are they pluckable or strummable? Sounds more like strumming.
QuercusMax 108 days ago [-]
If you pluck one of the sets of strings, it's like strumming. But you can pluck them individually, which is definitely NOT strumming.
thimkerbell 108 days ago [-]
If you have a sense of the song and it's not to your liking, don't be too pluckable.
nthnclrk 108 days ago [-]
Fun.
I went to the TLD and couldn’t make sense of how this is connected to that.
lupire 108 days ago [-]
Why is each string actually two strings next to each other?
Doesn't seem like a gag to me. I find this one to be a lot more musically interesting. The "pluckable" demo makes it kind of hard to do anything musically interesting based on the constraints of the screen-based UI.
The blob one harmonizes in a very interesting way. I would love to know the algorithm. Maybe even enough to pull apart the source code or reverse engineer it.
earslap 108 days ago [-]
IIRC the progressions are generated by a small neural network trained on Bach chorales.
108 days ago [-]
FpUser 108 days ago [-]
OMG, this is so insanely cool. Love it.
traviswt 108 days ago [-]
Really wish this wasn't so... nsfw. My kid would love it, but there's no way in the world I'm sending him this link.
here's the lips choir detached from the rest of adult swim
smusamashah 108 days ago [-]
I let my toddler play with it for a while on my phone, he didn't enjoy it very much.
traviswt 108 days ago [-]
This is fantastic, and with the vowel has another dimension. Love it, thank you!
cdchn 108 days ago [-]
Whats nsfw about it?
lIl-IIIl 108 days ago [-]
I think the poster referred to other parts of the adult swim website. It's not NSFW, but more like M+ TV rating.
lisper 108 days ago [-]
The name is a bit of a clue.
cdchn 108 days ago [-]
Yeah that just occurred to me too when someone posted a free-from-adult-swim link to the same thing.
FpUser 108 days ago [-]
Nothing I think. But I can see why some people will find the opposite.
2024throwaway 108 days ago [-]
Why? I honestly have no idea why anyone could consider this NSFW. I will absolutely be showing it to my kids.
cdchn 108 days ago [-]
The sticky lips may illicit impure thoughts.
hombre_fatal 108 days ago [-]
Especially in his child, apparently. What an odd idea.
Tao3300 108 days ago [-]
That says more about the beholder.
cdchn 108 days ago [-]
Let me rephrase.
Sticky lips ARE eliciting impure thoughts.
FpUser 108 days ago [-]
Yup
2024throwaway 108 days ago [-]
Scandalous!
traviswt 108 days ago [-]
Scroll down.
DerCommodore 108 days ago [-]
[flagged]
asdiojadiosdijo 108 days ago [-]
[flagged]
thebeardisred 108 days ago [-]
Interesting idea.
I went to share it with some musician friends of mine, but first wanted to give them a TL;DR.
I tried to copy info out of the "?" dialog so that I didn't have to re-type the details but the page blocked the operation. That was enough for me to pass. I don't have time to do extra work to explain someone else's project.
kevmo314 108 days ago [-]
This seems like a case where a more generous take would be productive. The page itself is a tool that intercepts drags, it seems like an oversight, not intentional, that it also intercepts drags on the help page.
thebeardisred 108 days ago [-]
I totally agree. Many folks overlook the UX decisions they make when sharing a project. That's why (in the spirit of HN) I began with a compliment and provided information as to why I made the choice.
While I can cop to the fact that some may interpret my comment as "Please don't complain about tangential annoyances—e.g. article or website formats, name collisions, or back-button breakage. They're too common to be interesting." it seems there is an equal and opposite lack of consideration around "Please respond to the strongest plausible interpretation of what someone says, not a weaker one that's easier to criticize. Assume good faith. "
gnrlst 108 days ago [-]
"pluckable strings". Don't really need anything more exhaustive than that. The discovery process is part of the fun.
blorenz 108 days ago [-]
Here's the text extracted from a screenshot of the ? provided to ChatGPT so you don't have to do extra work.
Pluck
by Murat
A math-based string simulator.
Download on Apple App Store for $1.99
[Image of Apple App Store download button]
- It's fun to have on iPad with multitouch, especially for kids (even 1 year olds).
- Support this project
Both the audio and visuals are generated using the same math, rendered at different speeds so the eye can see.
No tricks or audio files are used: everything is calculated from raw sine waves, with a theory of how energy is released in a pluck.
- The vibrations are modeled based on how far down the string you pluck from.
- The velocity of midi notes are mapped to both pluck position, as well as pluck strength.
This YouTube video of a slow motion string pluck proves that our simulated result is very close to reality.
[Embedded YouTube video of slow motion pluck]
Technical details:
- Each string is simulated with 12 overtones (integer multiples of the note frequency)
- To calculate amplitude of each overtone, we take the Fourier transform of the plucked string at the time the pick is released
- Higher frequency overtones decay faster than lower frequency overtones
- 72 strings x 12 overtones x 44,100 samples per second = 52,920,000 calculations per second
- Audio buffer of 1024 samples are sent to the GPU to compute in parallel on each tick
There are several directions I can take this project from here:
1. Turn it into an interactive educational tool to teach physics of sound, timbre & music.
2. Turn it into a music learning tool for kids where songs are pre-made as chords that the user can pluck to learn rhythm and feel.
3. Turn it into an interactive art installation
4. Turn it into a game where i.e. a bouncing ball plucks the strings & you try to match the melody
If you are interested in any of the above, please get in touch at murat@ayfer.net or @moyfer.
I wonder how many other people close the tab without noticing the buttons like I did.
Karplus-Strong can be extended in ways to simulate different types of plucking, acoustic pickup at bridge, or electric pickup at any point along tbe string, and plucked at any point along the string. Body resonance can be simulated etc. It's a pretty fun synth technique to play with. Amazing to take beyond simulating conventional instruments.
But this is very primitive compared to a massive body of research on better simulation. The delay line works great though, that part hasn't changed.
Variations on Karplus-Strong synthesis can yield some pretty wacky, dry and plucky types of sounds. In the original paper, the authors propose a variant of the algorithm which involves randomly alternating the sign (+/-) of every sample in the feedback loop, which creates a lot more atonal information in the signal. There’s also a variation floating around which uses an allpass filter in the feedback loop to introduce inharmonicity in the signal, see for example https://www.youtube.com/watch?v=SpC3t1EVF_Q.
Here for example is a piece made up largely of the harmonics (Portrait of Tracy Jaco Pastorius) https://www.youtube.com/watch?v=nsZ_1mPOuyk That's an electric bass and the bell-like sounds are harmonics. Basically he's just lightly touching the string in specific places to suppress the fundamental tone so you just hear the harmonics.
Whereas here (Stir it up - Bob Marley and the Wailers) https://www.youtube.com/watch?v=1hwL3S3Gtzs when the bass comes in, the player is holding his hand near the bridge (back of the strings) with the side of the palm resting on the strings to suppress all the harmonics so you only get the fundamental tone and it has this sort of muffled quality (because a lot of the brightness comes from harmonics).
https://www.youtube.com/@DanWorrall
Palm muting is one big technique to the more aggressive and chunkier metal sounds[1].
Even if you take out the music theory - or blatant disregard for - except kinda not, it's complicated, the different way you can create sounds with an electric guitar[2] in weird ways is quite amazing.
1: https://www.youtube.com/watch?v=yg4tKoiGoyM
2: https://www.youtube.com/watch?v=H4ax35i6aIY
Touching the string at different points will excite different vibrational modes. Notably if you pluck in the exact center you activate none of the even-numbered nodes, if you pluck around the 1/3 point that's optimal for activating the second harmonic, etc. You can never not activate the fundamental mode touching it in one spot but you activate it less if you get close to the edge.
Why is this the case? It is funny that my guitarist's intuition seems very clear about it - "the string is tougher and clickier at the bridge compared to the neck, of course the tone is more shrill" - but in terms of actual analytical evidence I just have to say "something something Fourier coefficients" :) Refining the physical intuition a bit: I believe the boundary at the end of the string dampens lower-frequency (i.e. lower-energy) vibrations faster than higher-frequency vibrations, so the lower harmonics die off more quickly than the higher "nasal" harmonics.
IMO which answer you prefer depends on perspective:
- if you assume a wave can be broken down into sinusoidal overtones then your geometric approach is much more immediate and intuitive: sinusoidal overtones => higher overtones clearly have more kinetic energy near the boundary, just draw a picture.
- if you assume that higher-pitched overtones have more kinetic energy then the physics approach explains why they are sinusoidal. Not the specific shape unless you do the math, but the "gist" of the slope. If the overtones were more like square waves, with no real difference in shape between frequencies beyond the length of the rectangle, then the pickup position wouldn't matter. But they can't be, the overtones have to be more "trapezoidal." And in particular, the lower overtones must have a more gradual slope than the higher overtones.
The geometric approach makes a big (but correct) physical assumption for an easy analytical argument; the physical approach goes the other way, only depending on Newton's laws + a lot of elbow grease.
https://www.cycfi.com/2014/07/virtual-pickup-placement-part-...
https://en.wikipedia.org/wiki/%2750s_progression
If you click on the little notes in the bottom right, you can pick other sets of chords, which give a different "vibe". (Me, I'm partial to the Andalusian ones)
That's why common advice to people starting the guitar is "Three chords, you can play anything. Four, you control the mood. Five, you're a god among men"
C/Am, F, G are adjacent in the circle of fifths so they will all play nice in a progression.
Each course of strings on the webpage somewhat behaves and sounds like an "ovikannel" when you strum it manually.
Here's one that was found hanging on a wall but they were normally attached to an entrance door so the wooden balls would swing against the strings when the door was opened, and play the chime:
https://www.reddit.com/r/finnish/comments/dvd125/my_finnish_...
One of the commenters was quite curious as to what it would sound like. Well about like this.
It also happens in Firefox but a lot less.
This shouldn't happen.
The main reason is the use of createScriptProcessor.
This should be replaced with AudioWorklet. Use WASM + SharedArraybuffer for calculation.
The visual of picking the strings is great, I spent a lot of time on it, I believe the vote is also a recognition of this.
Here is a similar idea (karplus) implemented with Rust + WASM, which is much better in terms of audio quality:
https://jackschaedler.github.io/karplus-stress-tester/
I also wrote a simple api to use Rust wasm audio here:
https://glicol.js.org/
If you are interested in doing some use cases, leave a message. I am actively maintaining it recently.
also: support different materials like steel/nylon/gut
If you have a DAW there are so many interesting free sound generators on the internet. Just spitfire audio has their free lab VSTs which give you 60 VSTs to play with - and thats just one company.
https://labs.spitfireaudio.com/
Its all just missing the front end a DAW normally provides but is too complicated for people just looking to mess around with sounds.
Edit: I don’t know why I’m being downvoted, the mute button is very unintuitive. YouTube will play on a web page with mute on, but this page won’t.
Probably worth the app/os to give you a notice if you fiddle with the volume while muted.
Edit: yes I’d pay $2 to play with this. lol
I peeked at the source code and it’s pretty wild to see this is what JavaScript can do these day.
However, I must point out that if tonejs is used here, audio will quickly become a bottleneck or even memory leak.
It reminds me of a Karplus Strong project written in rust that I saw before. This project is of course visually minimal, but demonstrates the use of rust + wasm audio.
https://jackschaedler.github.io/karplus-stress-tester/
I wrote a simple api to use Rust wasm audio here:
https://glicol.js.org/
If you are interested in doing some use cases, leave a message. I am actively maintaining it recently.
The cause of the popping glitches is createScriptProcessor
Wonderful!
This should be replaced with AudioWorklet. Use WASM + SharedArraybuffer for calculation.
Here is a similar idea (karplus) implemented with Rust + WASM, which is much better in terms of audio quality:
https://jackschaedler.github.io/karplus-stress-tester/
It was a fun project, although the game was a little rough around the edges to say the least.
https://www.modartt.com/pianoteq_overview
I tried to find it but never have.
Does anyone else know what it is?
You can play classical music on the simulated instruments. This is the nicest thing I've seen in a long time.
I went to the TLD and couldn’t make sense of how this is connected to that.
The blob one harmonizes in a very interesting way. I would love to know the algorithm. Maybe even enough to pull apart the source code or reverse engineer it.
here's the lips choir detached from the rest of adult swim
Sticky lips ARE eliciting impure thoughts.
I went to share it with some musician friends of mine, but first wanted to give them a TL;DR.
I tried to copy info out of the "?" dialog so that I didn't have to re-type the details but the page blocked the operation. That was enough for me to pass. I don't have time to do extra work to explain someone else's project.
While I can cop to the fact that some may interpret my comment as "Please don't complain about tangential annoyances—e.g. article or website formats, name collisions, or back-button breakage. They're too common to be interesting." it seems there is an equal and opposite lack of consideration around "Please respond to the strongest plausible interpretation of what someone says, not a weaker one that's easier to criticize. Assume good faith. "
Pluck by Murat
A math-based string simulator.
Download on Apple App Store for $1.99 [Image of Apple App Store download button]
- It's fun to have on iPad with multitouch, especially for kids (even 1 year olds). - Support this project
Both the audio and visuals are generated using the same math, rendered at different speeds so the eye can see.
No tricks or audio files are used: everything is calculated from raw sine waves, with a theory of how energy is released in a pluck. - The vibrations are modeled based on how far down the string you pluck from. - The velocity of midi notes are mapped to both pluck position, as well as pluck strength.
This YouTube video of a slow motion string pluck proves that our simulated result is very close to reality. [Embedded YouTube video of slow motion pluck]
Technical details: - Each string is simulated with 12 overtones (integer multiples of the note frequency) - To calculate amplitude of each overtone, we take the Fourier transform of the plucked string at the time the pick is released - Higher frequency overtones decay faster than lower frequency overtones - 72 strings x 12 overtones x 44,100 samples per second = 52,920,000 calculations per second - Audio buffer of 1024 samples are sent to the GPU to compute in parallel on each tick
There are several directions I can take this project from here: 1. Turn it into an interactive educational tool to teach physics of sound, timbre & music. 2. Turn it into a music learning tool for kids where songs are pre-made as chords that the user can pluck to learn rhythm and feel. 3. Turn it into an interactive art installation 4. Turn it into a game where i.e. a bouncing ball plucks the strings & you try to match the melody
If you are interested in any of the above, please get in touch at murat@ayfer.net or @moyfer.