I am working on a program that will be able to tell when a musical note is played in audio and what that note is (ie. guitar or piano). You can assume can assume any audio used for the program will be relatively clear. For example, here's a song i think i should be able to extract the notes out of https://www.youtube.com/watch?v=zqDIcNl27KQ. I know this isn't necessarily a trivial task but i feel like i'm partially there... i recorded myself plucking a few strings on the guitar in succession and the program was able to correctly identify the notes and when they were being played.
Basically i'm breaking down the audio into 2048 byte/short chunks of data as sample size (i think this is the standard sampling size) with half of overlap between chunks. The audio file is standard 44100 mhz wav. So where i'm at now i've managed to get the frequencies present in these chunks and their presence, along with the overall volume of the chunk.
So far i've messed around with a few things... slope of volume of surrounding chunks (ie. an increase in volume is usually associated with a note being played) then looking at what kind of slopes are associated with a note being played and i've also done something where i merge the "weights" of surrounding chunks to normalize the data in a way. For example, let's say i have a chunk where the primary frequency is 100, the chunks next to it have frequency at the second position. So i would do (1 + 2 + 2) / 3 to get the "presence" of the frequency over the span of those 3 chunks, obviously in this example a lower number would indicate a larger presence. When you filter the chunks by minimum volume or minimum volume slope you don't have to worry about irrelevant chunks.
Anyway, before i delve too much into trying to find my own algorithm i was wondering if there were any algorithms that might do what i'm looking to do or at least any input on a direction i should look to go in.