Show
Ignore:
Timestamp:
10/24/08 01:28:26 (5 years ago)
Author:
bonar
Message:

lang/perl/Music-AutoPhrase?; add NoteSelector?

Location:
lang/perl/Music-AutoPhrase/trunk
Files:
3 added
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Music-AutoPhrase/trunk/lib/Music/AutoPhrase/BeatPattern.pm

    r21910 r22002  
    1717    BEAT_CHAR_ON_REGEXP  => '(1|2|3|4|9)', 
    1818}; 
     19 
     20use base 'Exporter'; 
     21our @EXPORT = qw/ 
     22    BEAT_STRING_LENGTH 
     23/; 
    1924 
    2025sub new { 
  • lang/perl/Music-AutoPhrase/trunk/lib/Music/AutoPhrase/Channel.pm

    r21910 r22002  
    66 
    77use List::MoreUtils qw/uniq/; 
     8use Music::AutoPhrase::BeatPattern; 
    89 
    910use base 'Class::Accessor::Fast'; 
     
    1112    inst 
    1213    vol 
    13     octav_range 
    14     blocks 
    15     selector 
     14    _beats 
     15    _octav_range 
     16    _selector 
    1617/); 
    1718 
     
    1920    MIN_OCTAV => 1, 
    2021    MAX_OCTAV => 8, 
     22 
     23    DEFAULT_INST => 1, 
     24    DEFAULT_VOL  => 80, 
     25    DEFAULT_OCTAV_RANGE => [qw/4 5 6/], 
    2126}; 
     27 
     28sub new { 
     29    my ($class, %arg) = @_; 
     30 
     31    my $self = {}; 
     32    bless $self, $class; 
     33 
     34    # set params and defaults 
     35    $self->inst($arg{inst} || DEFAULT_INST); 
     36    $self->vol($arg{vol} || DEFAULT_VOL); 
     37    $self->octav($arg{octav} || DEFAULT_OCTAV_RANGE); 
     38    $self->_beats([]); 
     39 
     40    return $self; 
     41} 
    2242 
    2343sub push_block { 
     
    2949        return; 
    3050    } 
    31     my $bl = $self->blocks; 
     51    my $bl = $self->beats; 
    3252    push @$bl, $block; 
     53    $bl->beats($block); 
    3354} 
    3455 
    35 sub set_octav_range { 
     56sub octav { 
    3657    my ($self, $range) = @_; 
     58    return $self->_octav_range if !defined $range; 
    3759 
    38     if (!defined $range || ref($range) ne 'ARRAY') { 
     60    if (!ref($range) && $range =~ /^[1-8]$/) { 
     61        $range = [qw/$range/]; 
     62    } 
     63    if (ref($range) ne 'ARRAY') { 
    3964        warn "range must be arrayref"; 
    4065        return; 
     
    5176        push @selected_octav, $octav; 
    5277    } 
    53     $self->octav_range(\@selected_octav); 
     78    $self->_octav_range(\@selected_octav); 
    5479} 
    5580 
     81sub _push { 
     82    my ($self, $bp) = @_; 
     83 
     84    if (!ref($bp) && length($bp) == BEAT_STRING_LENGTH) { 
     85        $bp = Music::AutoPhrase::BeatPattern->new($bp); 
     86    } 
     87    if (!ref($bp) || !$bp->isa('Music::AutoPhrase::BeatPattern')) { 
     88        warn "beat patter [$bp] musct be a BeatPattern object"; 
     89        return; 
     90    } 
     91 
     92    my $beats = $self->_beats; 
     93    push @$beats, $bp; 
     94    $self->_beats($beats); 
     95} 
     96 
     97sub push { 
     98    my ($self, @beats) = @_; 
     99    $self->_push($_) for @beats; 
     100} 
     101 
     102sub beats { 
     103    return @{$_[0]->_beats()}; 
     104} 
     105 
     106sub selector { 
     107 
     108} 
    56109 
    571101;