Audio-TinySoundFont
view release on metacpan or search on metacpan
lib/Audio/TinySoundFont.pm view on Meta::CPAN
package Audio::TinySoundFont;
use v5.14;
use warnings;
our $VERSION = '0.12';
use autodie;
use Carp;
use Try::Tiny;
use Scalar::Util qw/blessed/;
use Moo;
use Types::Standard qw/ArrayRef HashRef GlobRef Str Int Num InstanceOf/;
use Audio::TinySoundFont::XS;
use Audio::TinySoundFont::Preset;
use Audio::TinySoundFont::Builder;
has _tsf => (
is => 'ro',
isa => InstanceOf ['Audio::TinySoundFont::XS'],
required => 1,
);
has volume => (
is => 'rw',
isa => Num,
default => 0.3,
trigger => sub { my $self = shift; $self->_tsf->set_volume(shift) },
);
has preset_count => (
is => 'lazy',
isa => Int,
);
has presets => (
is => 'lazy',
isa => HashRef,
);
*SAMPLE_RATE = \&Audio::TinySoundFont::XS::SAMPLE_RATE;
my $XS = 'Audio::TinySoundFont::XS';
my %ref_build = (
'' => sub
{
my $file = shift;
croak qq{File "$file" doesn't exist}
if !-e $file;
return try { $XS->load_file($file) } catch { croak $_ };
},
SCALAR => sub
{
my $str = shift;
open my $glob, '<', $str;
return try { $XS->load_fh($glob) } catch { croak $_ };
},
GLOB => sub
{
my $fh = shift;
return try { $XS->load_fh($fh) } catch { croak $_ };
},
);
sub BUILDARGS
{
my $class = shift;
my $file = shift;
( run in 3.032 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )