Open OscarSouth opened 6 years ago
@OscarSouth I would love to pick one of these issues up but I'm a noob Hs dev...can you recommend a simple issue I can work on?
@kcw-grunt Hello! Thanks for leaving a message. I've been a bit busy this year and not been able to be too active on this project, but I am also planning to get back into it and add some new functionality myself. Do you have any specific interest in this project from a musical or technical perspective? If so then I can think about a good issue to start with. There may be more things that I've not thought of (I just put a couple of example issues up so far) and you might be able to suggest something too.
One thing I've thought of doing is exposing a basic API from Haskell to give API access to the backend functionality, so that a front end developer could potentially build a UI for it.If you were interested to explore Haskell API libraries then that could be an option.
Feel free contact me through here or directly to discuss more, or if you have any questions on the code and/or project.
As far as Haskell skills, 99% of the code is quite simple Haskell that will be understandable with a basic understanding of syntax and functional programming methodology (the Main.hs module does have some monad transformer stuff that' not covered in that book, but it isn't really necessary to understand that to work with the other modules).
This book contains everything you need to know about the code for this project: http://learnyouahaskell.com/chapters (I used it as my primary resource while building the proof of concept).
@OscarSouth hey thanks for pinging me back. I'm actually an iOS dev and I had a colleague recommend I learn about functional programming (he was a Scala guy) but I really didn't think much of it a few years ago.
Then I started reading into Plutus (ADA Smart Contracts) and I actually bought a copy of the ("Learn you a Haskell...") but it is simply collecting dust. I know the way to really learn a language is to have a project/task. So, I saw your project and thought it would be a good way to help/learn.
Unfortunately, I don't have a good music theory background. But, I figured there are some "sweeping the floor" type tasks that would be trivial for you but perfect for me. I picked this enhancement randomly but I will work on anything as long as I can learn Haskell.
@kcw-grunt That was my motivation with this project too -- to become more fluent with Haskell and FP through working on something that I was interested in. I have also taken an interest in Plutus and have been watching tutorials recently -- I hope in the future to develop dApps on Cardano.
Perhaps exposing a basic JSON API could be a good task and it also opens the door for a wider range of devs to participate in the future. I'm happy to be involved with explaining code, discussing how the modules work together or providing any other necessary information to help with the task.
I recommend to work through this as it will help get to know the 'stack' tool then work up into writing a JSON API over a few simple tutorials: https://seanhess.github.io/2015/08/04/practical-haskell-getting-started.html
A minimal implementation could be to write a local JSON API server that exposes the intervalVector
function from the MusicData.hs
module: https://github.com/OscarSouth/theHarmonicAlgorithm/blob/c02a14547f116b5f25c4faae6a520f77fb9cc9fb/src/MusicData.hs#L275
This function simply takes a list of 3 or more Integers and returns a list of 6 Integers.
From there the coverage of the API can be expanded.
If you would like to know more about what an 'Interval Vector' is then this article has some info: http://musictheory.pugetsound.edu/mt21c/IntervalVector.html (however is is not necessary to know this information for this task).
By the way, I do a lot of live performance work with iOS audio software! This is a studio example with a simple sampler app: https://www.youtube.com/watch?v=pT_TUQF82OY. I've thought about learning swift and building some custom tools myself, but generally I've found that there are already apps existing to provide the tools that I need!
Similar to how root note(s) can be defined and presented possibilities will be filtered by that, it would be useful melody composition to filter by top note.