#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper::Compact qw(ddc);
use Music::Intervals;

my $string = shift || 'pythagorean';

my $intervals = Music::Intervals->by_description('pythagorean');

my $m = Music::Intervals->new(notes => [keys %$intervals]);

my $naturals = $m->natural_intervals;
#print ddc $naturals, {max_width => 256};

my %named;
for my $natural (keys %$naturals) {
    my $name = (values %{ $naturals->{$natural} })[0];
    next unless defined $name;
    $named{$natural} = $naturals->{$natural};
    my $ratio = (keys %{ $named{$natural} })[0];
    $named{$natural}->{float} = eval $ratio;
}
#print ddc \%named, {max_width => 256};

for my $key (sort { $named{$a}->{float} <=> $named{$b}->{float} } keys %named) {
    delete $named{$key}->{float};
    printf "%-9s: %s", $key, ddc($named{$key}, {max_width => 256});
}
