• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Piano on-perl
 

Piano on-perl

on

  • 622 views

(In Russian)

(In Russian)

Descript

Statistics

Views

Total Views
622
Views on SlideShare
622
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Piano on-perl Piano on-perl Presentation Transcript

    • Piанино на Perl: немного кода и немного музыки Александр Котов
    • ”YAPC::Europe 2011” в Риге
    • Домский собор в Риге
    • Пианино. Perl. Идея.
      • Эмулятор клавишного музыкального инструмента клавиатурой ноутбука
      • Это должен быть скрипт на Perl ...
      • ... простой ...
      • ... очень простой скрипт!!!
      • Нажимаем кнопку – получаем звук:
        • <1> : До
        • <2> : Ре
        • ...
      • Нетбук + MS Windows XP + Active State Perl
      • Для генерации звуков используем MIDI-библиотеку Win32::MIDI:
        • к сожалению, платформозависимую...
        • скачиваем и ставим её через ActiveState PPM
      • Привязываем клавиши к номерам звуков: До - Ре - Ми - Фа - Соль - Ля - Си - До - Ре - Ми $note = { 1 => 60 , 2 => 62 , 3 => 64 , 4 => 65 , 5 => 67 , 6 => 69 , 7 => 71 , 8 => 72 , 9 => 74 , 0 => 76 };
      Пианино. Perl. Проект.
    • Рига. ЖЖЁМ!
    • Как читать символы с клавиатуры на Perl?!
      • Есть стандартная (!) функция языка getc
      • Вы что-нибудь про неё слышали?!
    • ”getc” ?! – не для MS Win ... пичалька
    • Term::ReadKey ... в общем, делаем так:
      • use Term::ReadKey ;
      • ...
      • ReadMode 4 ; # Turn off controls keys
      • while ( 1 ) {
      • while ( not defined ( $key = ReadKey(- 1 ))) { }
      • if ( $key =~ / ^[ 0-9 ]$ / ) {
      • print &quot; Key $key - note $note -> { $key } n &quot;;
      • # TODO: Play MIDI note
      • } else { last; } # Exit on other key
      • }
      • ReadMode 0 ;
    • Win32::MIDI
      • use Win32::MIDI ;
      • ...
      • # Init MIDI
      • my $midi_obj = Win32::MIDI ->new();
      • $midi_obj -> openDevice ( 0 );
      • $midi_obj -> cur_channel ( 1 );
      • ...
      • $midi_obj -> play_note ( $note ->{ $key }, 0.125 , 127 , 0 ) ||
      • print $midi_obj -> error () . &quot; n &quot; and
      • $midi_obj -> reset_error ();
    • Live DEMO
      • Код программы (<F3>) - каких-то 700 байт!!! (и полчаса работы)
      • Запускаем!
      • Test (случайные кнопки)
      • Новогодний микс:
        • ”Jingle Bells”
        • ”We Wish You”
        • ”В лесу родилась елочка”