Hokkaido.pm Casual#19に行ってきました
今回は久々に10人も参加して頂きました。
みなさん、お疲れさまでした。
次回は、第3水曜日の12/18を予定していますので、
よろしくお願いします。
さっそく内容の方なんですが、
印象に残ってるのは、今回初参加の学生さんですね。
久々のご新規さんということで、ちょっとテンションが上がりました。
あと、メモに残ってるコードはこちら。
$ echo "a b c" | perl -anE 'say $F[2]'
c
$ echo " a b c" | perl -anE 'say $F[2]'
c
先頭にスペースが入ってても、3つ目の”c”が得られる訳ですが、
これはawkのデフォルトの振る舞いをエミュレートしているそうです。(*1)
あと、自分のLTで使ったコードはこちら。
use strict; use warnings; use v5.10; use Net::OpenSoundControl::Client; use Data::Dumper; # アルファベットと+/-で表現した音程から周波数に変換する sub note_to_freq { my $note = shift; # オクターブ = +3, ラの音の周波数 my $FREQ_OF_A3 = 440.0; my %NOTE_TO_OFFSET = ( C => -9, D => -7, E => -5, F => -4, G => -2, A => 0, B => 2 ); # MIDIだとオクターブは-2から+8まであるが、 # 0から+8までサポートする my $freq = 0; if ( $note =~ /^[A-G][+|-]?[0-8]?/ ) { my @tmp = split //, $note; my $idx = $NOTE_TO_OFFSET{ shift @tmp }; # A3の場合、$idx=0で440Hzが算出される foreach my $ch (@tmp) { if ( $ch eq '+' ) { $idx++; } elsif ( $ch eq '-' ) { $idx--; } else { $idx += ( (int($ch) - 3) * 12 ); } } $freq = $FREQ_OF_A3 * ( 2 ** ($idx / 12.0) ); } else { warn '"' . $note . '" is not note.'; } return $freq; } my $client = Net::OpenSoundControl::Client->new( Host => "localhost", Port => 57120 ) or die "Could not start client: $@\n"; my $app = sub { my $env = shift; if ( $env->{REQUEST_URI} eq '/favicon.ico' ) { open my $fh, '<:raw', './favicon.png'; return [ 200, [ "Content-Type" => "image/png" ], $fh ]; } else { my $req = substr $env->{REQUEST_URI}, 1; if ( $req =~ /^[A-G][+|-]?[0-8]?/ ) { my $freq = note_to_freq( $req ); $client->send( ['/1/osc', 'i', 1, 'f', $freq, 'f', 500] ); return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'freq = ', $freq ] ]; } else { return [ 200, [ 'Content-Type' => 'text/plain' ], [ Dumper($env) ] ]; } } };
これを使って音を鳴らすのに必要なpdファイルは、こちらにある”demo2.pd”です。
https://github.com/techno-cat/LT-20130309_pm
こちらも参考にどうぞ。
第15回 Perl meets beats―鳴らして学ぶシンセサイザー入門(1) – gihyo.jp
おしまい。
Leave a Comment