12 ms·
Show HN: Kord – Python tool for displaying guitar chords/scales on your terminal
- synestematic 6y agoHello HN, I'm a self taught programmer who would like to share my fretboard visualization tool to any musicians/developers out there. It takes a root note and a scale/chord type as input and outputs a visual representation of your instrument's fretboard on your terminal along with the positions of corresponding notes. The tool supports several scales, modes, chords, instruments and tunings. Try running it with --help to get you started. The fretboard.py application is actually part of the larger kord music framework I wrote. It's a PyPI package that allows to do music theory stuff... feel free to read the kord documentation if you want to know more. If you are only interested in the fretboard tool, just scroll to the end of the README. :) As the kord project grew in complexity I found myself lacking the time to complete it and ATM it's still a bit rough around the edges. The fretboard.py app is a tool that I regularly use and find extremely useful and I thought it would be cool to share it with the world. I am creating this thread in the hope of: * letting other players make use of the fretboard tool * gathering feedback from programmers on my coding * gathering feedback from musicians on the music theory behind it * allowing collaboration if anyone is interested Thanks for checking it out!
- tda 6y agoNice idea. I would love to know how the fretboard visualizer works and looks like, but am too lazy to install and run the tool. Could you add an animated gif or at least some screenshots?
- emmanueloga_ 6y agoThink this must be the fretboard: https://raw.githubusercontent.com/synestematic/bestia/master/resources/k.png https://raw.githubusercontent.com/synestematic/bestia/master...
- fwip 6y agoThis image (or a text version of it) is absolutely worth including in the README! Edit: I see that it got added to the README 2 minutes ago, nice. :)
- synestematic 6y agohi, I embedded some pics to the README. take a look!
- indymike 6y agoNeat! From the PyPi listing here's the github repo. https://github.com/synestematic/kord https://github.com/synestematic/kord.
- emmanueloga_ 6y agoLooks cool! You asked for feedback, from a quick look: * I suspect you may have created the IO lib, bestia, to learn and because is fun, but if you use existing libs like Prompt-Toolkit [1] you can focus more time in the actual app vs infrastructure. Also libs like PT can do a lot of heavy lifting and boring stuff for you like enabling cross platform support (Windows!). * I saw you used .json for tuning configuration, I guess it is ok but perhaps you could just have the tuning be plain python files? Not sure you gain too much by using JSON here. * Speaking of json... could be interesting to make the _output_ of the app machine readable. So instead of focusing on pretty ANSI output, how would the app look if it generated the fretboards as pure data? One could then write a program to create ANSI or HTML or SVG and whatnot from the same data. * There are a ton of music theory libraries out there, perhaps you could get some ideas from those. music21 seems to be interesting in this area (although quite heavy / big) [2]. 1: https://python-prompt-toolkit.readthedocs.io/ https://python-prompt-toolkit.readthedocs.io/ 2: http://web.mit.edu/music21/ http://web.mit.edu/music21/
- honkycat 6y agoI agree they should focus on building products not boilerplate but i would argue "outputting pure data, i.e writing your own data format, is just as much boilerplate. JSON is fine IMO
- synestematic 6y agoThanks for your input. The bestia library I created waaaay before I even started working on kord so at this point I just go with it since I know the API in and out. I'm sure there are other libraries out there doing the same thing better but hey, this one is mine. :) As for the .json files I thought they would be a good way for non-developer end users to deal with their self created tunings without having to mess with the code itself. Thanks for the links to the projects, I will try to take a look at them.
- djaychela 6y agoHi. I've just had a quick look, and I've already found the fretboard.py app useful. I have a 9-string guitar (low C#, F#, B below the usual strings) which I've never really made much use of, and adding a new tuning to the .json file was easy enough, and straight away I can use it to map things out on the fretboard. When I get some time, I want to look into using this to produce PDF output for worksheets as it'll be a lot quicker than my current workflow for producing scale diagrams for pupils. Thanks!
- colejohnson66 6y agoSlightly off topic, but what’s the purpose of anything more than an 8 string? Because at 8 strings, you’re already hitting 2 semitones above the standard bass’ tuning (E standard). At that point, if you want to go lower, why not just use a distorted bass guitar? Maybe I just don’t like the muddiness of the guitar distortion sound of the extremely low notes (bass distortion has a different sound)?
- tiniuclx 6y agoThe low notes on guitar simply sound quite different from the low notes on bass, mostly because of the choice of string gauge, scale length, pickup design and amplifiers. Some genres such as progressive metal & djent find those sounds very useful! For what it's worth, I agree with you, I find the bass frequencies on even standard-range guitars to not be all that useful. In my own music productions, that part of the spectrum belongs almost entirely to the kick drum & bass guitar. However, once you cut out the low-end mud, the rest of the guitar sounds very good!
- leetcrew 6y agothere are a few reasons. like tiniuclx said, it just sounds different. a downtuned guitar-scale string is going to have a very different tone than a low bass-scale string. like you say, low notes can sound very muddy when distorted. interestingly enough, people usually EQ out most of the low-end frequencies when they play in lower tunings. seems counterintuitive, but it makes for a very interesting sound to my ear. anyways, the main reason to have extra strings is to have a greater range. if you just want to play very low notes, you can downtune a regular six-string guitar pretty far, you could just get a bass, or you could get a baritone guitar for something in between. here's an example of a riff that uses almost the entire range of an eight-string guitar: https://youtu.be/v9RIJ4XlUPU?t=66 https://youtu.be/v9RIJ4XlUPU?t=66
- Timpy 6y agoVery cool project. I particularly like fretboard.py, I'm a sucker for charming command line tools like this. For what it's worth, I have a bachelor's in classical guitar and I taught guitar for 6 years. It would be cool if you could get a single form of a scale instead of an entire fretboard of scale notes, and maybe even limit it to some number of octaves. It would be useful to generate scale charts for students one piece at a time.
- synestematic 6y agothat is a neat idea, I'm a bit concerned about the command line options becoming too contrived in order to handle such a high degree of precision. I will defintly keep it in mind though
- synestematic 6y agoHi, just letting you know I've added a -d option that might be great for teachers as it displays degree numbers instead of actual notes
- Timpy 6y agoI just checked it out, very cool! Thanks for taking my idea into consideration.
- dceddia 6y agoAwesome project! In terms of getting people excited about it, embedding a screenshot or two in the README would go a long way, I think. Congrats on shipping!
- synestematic 6y agothanks for the advice, I've added a couple
- tzs 6y agoCool. A few months ago there was a show HN about a React component for guitar visualization [1], and at least 5 other people jumped in with their similar tools in the comments. Those were almost all web-based, with only one fairly limited, somewhat meh command line tool. It's nice to see a more general and extensive command line tool. [1] https://news.ycombinator.com/item?id=23921478 https://news.ycombinator.com/item?id=23921478
- loblollyboy 6y agoI wonder how many thousands of us started doing something like this https://github.com/adnmcq/music_visualizer https://github.com/adnmcq/music_visualizer
- rootlocus 6y agoI did! https://github.com/alexpana/fretsonjs https://github.com/alexpana/fretsonjs
- systemvoltage 6y agoYou might be infringing a trademark - KORD.
- rob74 6y agoYou mean this one: https://en.wikipedia.org/wiki/Kord_machine_gun https://en.wikipedia.org/wiki/Kord_machine_gun ? I thought the name sounded familiar... but actually it was because I read about the Russian N1 would-be moon rocket recently: https://en.wikipedia.org/wiki/N1_(rocket)#Engine_control_system https://en.wikipedia.org/wiki/N1_(rocket)#Engine_control_sys...
- systemvoltage 6y agoSorry I mistook it with Korg Synthesizers. Please ignore, apologies.
- jason-festa 6y agoSo many good musicians/developers out there :)
- tiniuclx 6y agoI am working on a similar project called Harmony Explorer [0], which was spawned out of how challenging I find it to remember note names of chords and to figure out chord names when using a capo on guitar. Harmony Explorer also lets you listen to the chords, not just view them. It is interesting to see how similar our approaches to note algebra is. While my project is written in Rust, it looks like we calculate note names in a very similar way [1]. I also really like the way you are handling accidentals - by storing accidentals including double-sharps and double-flats alongside the notes. I am using a global variable which picks between using sharps or flats when showing accidentals - works fine for now but definitely does not cover all use cases. I'll see if your approach can solve some of the problems I've encountered. Thank you again for sharing, I feel like I learned many useful things from just a cursory glance at Kord. Likewise, I hope you find Harmony Explorer interesting! [0] https://github.com/tiniuclx/harmony-explorer https://github.com/tiniuclx/harmony-explorer [1] https://github.com/tiniuclx/harmony-explorer/blob/master/src/music_theory.rs#L239 https://github.com/tiniuclx/harmony-explorer/blob/master/src...
- synestematic 6y agoThat looks interesting! I have been looking into learning Rust for some time now, maybe I will take your project as a starting point. :)
- tiniuclx 6y agoMessage me on Twitter (@tiniuclx) if you have any questions!
- a4444f 6y agofor computer and guitar fans: search for midi guitar
- turtleswaydown 6y agohttp://jamorigin.com/products/midi-guitar http://jamorigin.com/products/midi-guitar
- a4444f 6y agopm me please
- whofferbert 6y agoHey, this is really cool! I like how the interfaces are exposed to allow folks to build other music tools with it. I have a project with some similar features, written in Perl: https://github.com/whofferbert/key-mode https://github.com/whofferbert/key-mode Mine has a few other features like progression generators and some tools to show keyboard type instruments as well, but is lacking some of the neat things your tool has, like the pure chord visualizer. Perhaps when I have some free time, I will try to contribute some progression building logic to your project.
- leafmeal 6y agoIn a similar thread, I made a Python command line tool which tells you what chord you're playing---either on guitar, or on any other stringed instrument (with custom tunings too!). This was an experimental, proof-of-concept project, but some of you here may enjoy it :) https://github.com/jessebrennan/chordnamer https://github.com/jessebrennan/chordnamer
- kordlessagain 6y ago> kord is a python framework Thanks, I guess! This is awesome: >>> n1 = MusicNote('F', '#', 5) >>> n2 = MusicNote('G', 'b', 5) >>> n1, n2 (F⁵, G⁵) >>> n1 == n2 True
- synestematic 6y agoI think the flat and sharp unicode characters are removed in this message board