Giter Club home page Giter Club logo

dart-tonic's Introduction

Tonic

Dart badge pub package

Tonic is a Flutter-compatible Dart package that models components of music theory.

Installation

1. Add the following to your pubspec.yaml

dependencies:
  tonic: any

2. Run pub get

Usage

See the API docs.

Examples

import 'package:tonic/tonic.dart';

main() {
  // Hemholtz and Scientific pitch notation
  print(Pitch.parse('C4'));
  print(Pitch.parse('C♯4'));
  print(Pitch.parse('C♭4'));

  // Unicode and ASCII sharps and flats
  print(Pitch.parse('C#4') == Pitch.parse('C#4')); // => true
  print(Pitch.parse('Cb4') == Pitch.parse('Cb4')); // => true

  // Enharmonic equivalents
  print(Pitch.parse('E♯4').midiNumber == Pitch.parse('F4').midiNumber); // => true
  print(Pitch.parse('E4').midiNumber == Pitch.parse('F♭4').midiNumber); // => true
  print(Pitch.parse('E♯4') == Pitch.parse('F4')); // => false
  print(Pitch.parse('E4') == Pitch.parse('F♭4')); // => false

  print(Pitch.parse('C4').octave); // => 5
  print(Pitch.parse('C4').midiNumber); // => 60
  print(new Pitch.fromMidiNumber(60)); // => C4
  print(new Pitch.fromMidiNumber(60).helmholtzName); // => c'

  // Intervals
  print(Interval.M3);
  print(Interval.parse('M3'));
  print(Interval.m3.semitones); // => 3
  print(Interval.M3.semitones); // => 4
  print(Interval.A3.semitones); // => 5
  print(Interval.d4.semitones); // => 4
  print(Interval.P4.semitones); // => 5
  print(Interval.A4.semitones); // => 6
  print(Interval.M3.number); // => 3
  print(Interval.M3.qualityName); // => "M"

  // Interval arithmetic
  print(Interval.M3 + Interval.m3); // => P5
  print(Interval.m3 + Interval.M3); // => P5
  print(Interval.m3 + Interval.m3); // => d5
  print(Interval.M3 + Interval.M3); // => A5

  print(Pitch.parse('C4') + Interval.M3); // => E4
  print(Pitch.parse('C4') + Interval.A3); // => E♯4
  print(Pitch.parse('C4') + Interval.d4); // => F♭4
  print(Pitch.parse('C4') + Interval.P4); // => F4

  print(Pitch.parse('C4') - Pitch.parse('C4'));   // => P1
  print(Pitch.parse('D4') - Pitch.parse('C4'));   // => M2
  print(Pitch.parse('E4') - Pitch.parse('C4'));   // => M3
  print(Pitch.parse('E♯4') - Pitch.parse('C4')); // => A3
  print(Pitch.parse('F♭4') - Pitch.parse('C4')); // => d4
  print(Pitch.parse('F4') - Pitch.parse('C4'));  // => P4

  // Chords
  print(Chord.parse('E Major'));
  print(ChordPattern.parse('Dominant 7th')); // => Dom 7th
  print(ChordPattern.fromIntervals([Interval.P1, Interval.M3, Interval.P5])); // => Major
  print(ChordPattern.fromIntervals([Interval.P1, Interval.m3, Interval.P5])); // => Minor
  print(ChordPattern.fromIntervals([Interval.P1, Interval.m3, Interval.P5, Interval.m7])); // => Min 7th

  // Scales
  final scalePattern = ScalePattern.findByName('Diatonic Major');
  print(scalePattern.intervals); // => [P1, M2, M3, P4, P5, M6, M7]
  print(scalePattern.modes);
  print(scalePattern.modes['Dorian'].intervals); // => [P1, M2, m3, P4, P5, M6, m7]

  final scale = scalePattern.at(Pitch.parse('E4'));
  print(scale.intervals); // => [P1, M2, M3, P4, P5, M6, M7]
  print(scale.pitchClasses); // => [E4, F♯4, G♯4, A4, B4, C♯5, D♯5]

  // Instruments and fret fingerings
  final chord = Chord.parse('E Major');
  final instrument = Instrument.Guitar;
  print(bestFrettingFor(chord, instrument)); // => 022100
}

More examples can be found in the tests in test/*_test.dart.

Other Versions

  • Dart 1.x. Version 0.1.1 of this library is compatible with Dart 1.x.
  • TypeScript. This (Dart) package is ported from tonic.ts, for TypeScript.

License

MIT

dart-tonic's People

Contributors

canastro avatar miechoo avatar osteele avatar rodydavis avatar schilken avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.