in reply to playing chords with MIDI modules...

I got it to play a chord! It's not pretty, nor is it optimized. It is fairly easy to understand though.

use Win32::MIDI; my $midi_obj = Win32::MIDI->new(); $midi_obj->openDevice(0); indiv(1, 3); # 1 second duration, start at middle C chord(3, 3); # 3 second duration, same chord sleep(1); $midi_obj->closeDevice(); # play_note(NOTE, DURATION, VELOCITY, CHANNEL, ON/OFF, OCTAVE) sub indiv { my $duration = shift; my $octave = shift; # play each note individually $midi_obj->play_note('C', $duration, 127, 1, 1, $octave) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', $duration, 127, 1, 1, $octave) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G', $duration, 127, 1, 1, $octave) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('C', $duration, 127, 1, 1, $octave+1) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); } sub chord { # get the duration to play the C chord my $duration = shift; # get the octave to play the C chord at my $octave = shift; # play the chord $midi_obj->play_note('C', $duration, 127, 1, 0, $octave) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', $duration, 127, 1, 0, $octave) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G', $duration, 127, 1, 0, $octave) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('C', $duration, 127, 1, 1, $octave+1) || print $midi_obj->error() . "\n" and $midi_obj->reset_error(); }

Updated: Moved the individual notes into a different subroutine. Changed ON/OFF flag for final note of chord to 1. Added duration parameter to both subroutines.

Replies are listed 'Best First'.
Re: Re: playing chords with MIDI modules...
by LostS (Friar) on Jan 31, 2003 at 20:02 UTC
    Addon to Mr. Muskrat's code:
    mary(3); sub mary { my $octave = shift; $midi_obj->play_note('E', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $midi_ +obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('C', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', ".75", 127, 1, 1, $octave) || print $midi_ +obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G', ".5", 127, 1, 1, $octave) || print $midi_o +bj->error() . "\n" and $midi_obj->reset_error(); }
    Guess this tune...

    -----------------------
    Billy S.
    Slinar Hardtail - Hand of Dane
    Datal Ephialtes - Guildless
    RallosZek.Net Admin/WebMaster

    perl -e '$cat = "cat"; if ($cat =~ /\143\x61\x74/) { print "Its a cat! +\n"; } else { print "Thats a dog\n"; } print "\n";'
      Name this tune:
      song(3); sub song { my $octave = shift; my $num = 0; while ($num < 10) { $midi_obj->play_note('E', "1.25", 127, 1, 1, $octave) || print $ +midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G', ".5", 127, 1, 1, $octave) || print $mi +di_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G#', ".25", 127, 1, 1, $octave) || print $ +midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('B', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', "1", 127, 1, 1, $octave) || print $mid +i_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('B', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('F#', ".25", 127, 1, 1, $octave) || print $ +midi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('F', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('B', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('E', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $num++; } }
      Send me a message to see if your right...

      -----------------------
      Billy S.
      Slinar Hardtail - Hand of Dane
      Datal Ephialtes - Guildless
      RallosZek.Net Admin/WebMaster

      perl -e '$cat = "cat"; if ($cat =~ /\143\x61\x74/) { print "Its a cat! +\n"; } else { print "Thats a dog\n"; } print "\n";'
Re: Re: playing chords with MIDI modules...
by LostS (Friar) on Jan 31, 2003 at 20:54 UTC
    Guess this song...
    song2(3); sub song2 { my $octave = shift; my $num = 0; while ($num < 10) { sleep(.5); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('F', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('G', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('F', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); $midi_obj->play_note('D', ".25", 127, 1, 1, $octave) || print $m +idi_obj->error() . "\n" and $midi_obj->reset_error(); sleep(2); $num++; } }
    Send message to get answer...

    -----------------------
    Billy S.
    Slinar Hardtail - Hand of Dane
    Datal Ephialtes - Guildless
    RallosZek.Net Admin/WebMaster

    perl -e '$cat = "cat"; if ($cat =~ /\143\x61\x74/) { print "Its a cat! +\n"; } else { print "Thats a dog\n"; } print "\n";'