The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
use strict;
use warnings;
use Prima;
use Prima::Utils;

=pod

=head1 NAME

examples/pitch.pl - A sound example

=head1 FEATURES

Tests the implementation of apc_beep_tone() function.

=cut


my %octave = (
	'C'  => 523,
	'B'  => 493,
	'A#' => 466,
	'A'  => 440,
	'G#' => 415,
	'G'  => 391,
	'F#' => 369,
	'F'  => 349,
	'E'  => 329,
	'D#' => 311,
	'D'  => 293,
	'C#' => 277,
);

$_ = 'E2D#EF2E2  G#2A4';
#$_ = 'AEAEAG#2 2EG#EG#A2 2EAEAG#2 2EG#EG#A2 AB2 BC2 C2BAG#A2 AB2 BC2 C2BAG#A3';

for ( m/\G([A-G\s][\#\d]*)/g) {
	my $d = (s/(\d+)$//) ? $1 : 1;
	$octave{$_} ?
		Prima::Utils::sound( $octave{$_}, 100 * $d) :
		select(undef,undef,undef,0.1 * $d);
}