Top

perlで音楽‐試聴室


 ドラムを演奏するには、2種類以上の楽器を同時に演奏するようになる。midiファイルの構造は知らない。それで、finale notePadで2種類の楽器で楽譜を作り、midiファイルをテキストに変換して、midiファイルの構造を確認したりして、複数のトラックに楽譜を書き込む方法を試してみた。試行錯誤の末、うまくいったのが、次のスクリプトです。
  1. use MIDI;
  2. use strict;
  3. use warnings;
  4. my @events = (
  5.   ['text_event',0, 'MORE COWBELL'],
  6.   ['set_tempo', 0, 450_000], # 1qn = .45 seconds
  7. );
  8. for (1..4){
  9.   push @events,
  10.   ['note_on' ,  0, 9, 36, 127],
  11.   ['note_off', 96, 9, 36, 127],;
  12. }
  13. for (1..3){
  14.   push @events,
  15.   ['note_on' ,  0, 9, 42, 127],
  16.   ['note_off', 96, 9, 42, 127],;
  17. }
  18. for (1..2){
  19.   push @events,
  20.   ['note_on' ,  0, 9, 36, 127],
  21.   ['note_off', 96, 9, 36, 127],
  22.   ['note_on' ,  0, 9, 42, 127],
  23.   ['note_off', 96, 9, 42, 127],;
  24. }
  25. my $drum = MIDI::Track->new({ 'events' => \@events });
  26. my @events2 = (
  27.   ['note_on' , 288, 9, 49, 127],
  28.   ['note_off',  96, 9, 49, 127],
  29.   ['note_on' , 480, 9, 49, 127],
  30.   ['note_off',  96, 9, 49, 127],
  31.   ['note_on' ,  96, 9, 49, 127],
  32.   ['note_off',  96, 9, 49, 127],);
  33. my $drum2 = MIDI::Track->new({ 'events' => \@events2 });
  34. my $opus = MIDI::Opus->new({ 'format' => 0,
  35.   'ticks' => 96, 'tracks' => [ $drum, $drum2 ] } );
  36. $opus->write_to_file( "drum.mid" );

 2種の配列に、それぞれの楽器の音符を書き込み、それらの音符をはじめ、第一の配列からmidiファイルに書き込み、次に第二の配列を書き込むで2つのトラックができる。

 作成された曲の楽譜。
 
 曲を鳴らしてみます。 

1)ドラム、スネアドラム、タム音を連続して鳴らします。


2)ハット、シンバル、ベル音を連続して鳴らします。


3)その他のdrum sound (60-79)が出ます。


4)Bass drum、Side stick、Acoustic Snare、Low Floor Tom、High Tom、Closed High-Hat、Open High-Hat、Crash Symbal 1、Ride Symbal-2の9音を順番に2音ずつ交互に組合わせて鳴らします。

楽譜です。


このページへの訪問者数

(since 2015/Dec/11)

音のファイルは無断では使用しないで下さい。

メール

(2015年12月11日掲載。2020年1月7日更新)
Copyright 2015-19. MiKe All rights reserved.