From 6b3c992872edff08fec06fc948c108caa648bf52 Mon Sep 17 00:00:00 2001 From: Denis Redozubov Date: Wed, 28 Jun 2023 20:44:37 +0400 Subject: [PATCH] Rename poly to polyrhythmix since the crate name is taken --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 24 +++++++++++------------- src/bin/main.rs | 8 ++++---- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aea78a5..b387f76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -331,7 +331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] -name = "poly" +name = "polyrhythmix" version = "0.1.0" dependencies = [ "clap", diff --git a/Cargo.toml b/Cargo.toml index d9e78d1..c3e7707 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "poly" +name = "polyrhythmix" description = "Polyrhythmically-inclinded Midi Drum generator" homepage = "https://github.com/dredozubov/poly" repository = "https://github.com/dredozubov/poly" diff --git a/README.md b/README.md index ce5ca54..4a9ac61 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ -# Poly +# Polyrhythmix -Poly is a command-line assistant designed to generate MIDI file from the description of drum parts. It provides a convenient way to input a DSL (Domain-Specific Language) in the command line, then it calculates when the drum parts will converge together, making it easy to compose polyrhythimic parts with frequent shifts over the bar lines. Additionally, it has the capability to generate a bass MIDI track that follows the kick drum. +Polyrhythmix (Poly) is a command-line assistant designed to generate MIDI file from the description of drum parts. It provides a convenient way to input a DSL (Domain-Specific Language) in the command line, then it calculates when the drum parts will converge together, making it easy to compose polyrhythimic parts with frequent shifts over the bar lines. Additionally, it has the capability to generate a bass MIDI track that follows the kick drum. -Poly is specifically designed to assist musicians and composers working in genres such as modern progressive rock, metal, djent, fusion, and Indian Carnatic music. It aims to simplify the process of creating complex polyrhythmic drum patterns, enabling users to focus on the creative aspects of their compositions. +Polyrhythmix is specifically designed to assist musicians and composers working in genres such as modern progressive rock, metal, djent, fusion, and Indian Carnatic music. It aims to simplify the process of creating complex polyrhythmic drum patterns, enabling users to focus on the creative aspects of their compositions. # Motivation -I'm a guitar player, and I use tablature notation editors such as Guitar Pro a lot. However, it gets complicated fast to write a polyrhythmic/polymetric drum parts as shifts tend to go over the bar lines. The other property of such parts is: it tend to unfold in a simple way from simple ideas such as "I want to create a drum part that will have a 3 against 4 feel with a kick drum against a snare drum". The other way to think about it is that it has a simple blueprint, but it's tricky to express in the western musical notation. This is why `Poly` exists. I wanted to have a simple tool to workshop/brainstorm rhythmic ideas and evaluate them by having a MIDI playback. I'm into modern progressive rock/metal music, fusion, so it all applies very well. I have an impression it may be useful for indian carnatic music as well, but I would like to get some insightful confirmation on that. +I'm a guitar player, and I use tablature notation editors such as Guitar Pro a lot. However, it gets complicated fast to write a polyrhythmic/polymetric drum parts as shifts tend to go over the bar lines. The other property of such parts is: it tend to unfold in a simple way from simple ideas such as "I want to create a drum part that will have a 3 against 4 feel with a kick drum against a snare drum". The other way to think about it is that it has a simple blueprint, but it's tricky to express in the western musical notation. This is why `Polyrhythmix` exists. I wanted to have a simple tool to workshop/brainstorm rhythmic ideas and evaluate them by having a MIDI playback. I'm into modern progressive rock/metal music, fusion, so it all applies very well. I have an impression it may be useful for indian carnatic music as well, but I would like to get some insightful confirmation on that. # Features -**Drum Generation**: Poly takes a DSL input to define polyrhythmic patterns for various drum instruments. It intelligently calculates when different drum parts will converge, ensuring rhythmic synchronization. +**Drum Generation**: Polyrhythmix takes a DSL input to define polyrhythmic patterns for various drum instruments. It intelligently calculates when different drum parts will converge, ensuring rhythmic synchronization. -**MIDI File Generation**: Once the polyrhythmic pattern is defined, Poly generates a MIDI file containing the drum parts. This file can be imported into any compatible software or hardware for further editing or playback. +**MIDI File Generation**: Once the polyrhythmic pattern is defined, Polyrhythmix generates a MIDI file containing the drum parts. This file can be imported into any compatible software or hardware for further editing or playback. -**Bass Track Generation**: Poly offers an option to generate a bass MIDI track that follows the kick drum. This feature provides a foundation for creating cohesive rhythm sections by synchronizing the bassline with the kick drum pattern. +**Bass Track Generation**: Polyrhythmix offers an option to generate a bass MIDI track that follows the kick drum. This feature provides a foundation for creating cohesive rhythm sections by synchronizing the bassline with the kick drum pattern. # Usage -Poly runs as an executable with the desired command line options. The available options are as follows: +Polyrhythmix runs as an executable with the desired command line options. The available options are as follows: ``` Usage: poly [OPTIONS] @@ -46,7 +46,7 @@ Options: Print version ``` -Poly uses a simple DSL (Domain-specific language) for drum patterns. For a more detailed explanation, go to [DSL Overview](#dsl-overview). +Polyrhythmix uses a simple DSL (Domain-specific language) for drum patterns. For a more detailed explanation, go to [DSL Overview](#dsl-overview). Let's say you want to tell if two patterns will converge and how soon. We'll start with a 3 against 4. The first pattern would be a series of 8th notes on the kick drum @@ -70,7 +70,7 @@ Converges over 3 bars out.mid was written successfully ``` -Poly operates under an assumption, that it's easy to replicate a pattern that converges over a finite number of bars in the DAW or tablature editor, so it only generates 3 bars of drums in this case. On Mac OS, I usually do something in lines of `poly -o out.mid && open out.mid` or `poly -o out.mid && open -a 'Guitar Pro 7' out.mid`. +Polyrhythmix operates under an assumption, that it's easy to replicate a pattern that converges over a finite number of bars in the DAW or tablature editor, so it only generates 3 bars of drums in this case. On Mac OS, I usually do something in lines of `poly -o out.mid && open out.mid` or `poly -o out.mid && open -a 'Guitar Pro 7' out.mid`. This way it defaults to 4/4 as a time signature, but we may want to interpret this rhythmic pattern in 3/4 for example. Let's try it: @@ -130,9 +130,7 @@ It's possible to repeat a group of notes of same length with the following synta * `(3,8x-x)` means repeat three times a series of hit, rest, hit in eighth notes Now that we know that, we may sequence multiple groups like this: -* `32xx16xx` - Kick pattern from "Bleed" by Meshuggah - -... +* `32xx16xx` - Kick pattern from "[Bleed](doc/bleed.mid)" by Meshuggah ## Guitar pro remarks diff --git a/src/bin/main.rs b/src/bin/main.rs index 8769ab5..8334bd8 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -2,15 +2,15 @@ use std::collections::BTreeMap; use std::process::exit; use std::str::FromStr; -use poly::dsl::dsl; -use poly::midi::core::{create_smf, DrumPart}; -use poly::midi::time::TimeSignature; +use polyrhythmix::dsl::dsl; +use polyrhythmix::midi::core::{create_smf, DrumPart}; +use polyrhythmix::midi::time::TimeSignature; use clap::*; use DrumPart::*; #[derive(Debug, Parser, Clone)] -#[command(name = "poly")] +#[command(name = "Polyrhythmix")] #[command(author = "Denis Redozubov ")] #[command(version = "0.1")] #[command(about = "Polyrhythmically-inclinded Midi Drum generator", long_about = None)]