Audio-TinySoundFont

 view release on metacpan or  search on metacpan

t/030-builder.t  view on Meta::CPAN

use strict;
use Test::More;
use FindBin qw/$Bin/;
use Audio::TinySoundFont;

use autodie;
use List::Util qw/sum/;
use Try::Tiny;

{
  my $tsf      = Audio::TinySoundFont->new("$Bin/tiny.sf2");
  my $SR       = $tsf->SAMPLE_RATE;
  my @script_a = (
    {
      preset => '',
      note   => 59,
    },
    {
      preset => '',
      note   => 60,
    },
  );
  my @script_b = (
    {
      preset => '',
      note   => 61,
      at     => 1,
      for    => 3,
    },
    {
      preset => '',
      note   => 62,
      at     => 2,
      for    => 0.5
    },
  );
  my @script_c = (
    {
      preset     => '',
      note       => 63,
      at         => 5 * $SR,
      for        => 1 * $SR,
      in_seconds => 0,
    },
  );

  my $builder = $tsf->new_builder( [@script_a] );
  is( scalar @{ $builder->play_script }, 2, 'new with items did add items' );
  isnt( $builder->play_script->[0], $script_a[0], 'play_script[0] is not a ref to the original' );
  isnt( $builder->play_script->[1], $script_a[1], 'play_script[1] is not a ref to the original' );

  $builder = $tsf->new_builder;
  is( scalar @{ $builder->play_script }, 0, 'new without items did not add items' );

  my $error;
  try { $builder->set( [] ) } catch { $error = $_ };
  is( $error,                            undef, 'set with empty script without error' );
  is( scalar @{ $builder->play_script }, 0,     'set did not add items' );

  try { $builder->set( [@script_a] ) } catch { $error = $_ };
  is( $error,                            undef, 'set with simple script without error' );
  is( scalar @{ $builder->play_script }, 2,     'set did not add items' );

  try { $builder->add( [@script_b] ) } catch { $error = $_ };
  is( $error,                            undef, 'add with simple script without error' );
  is( scalar @{ $builder->play_script }, 4,     'add added items' );

  isnt( $builder->play_script->[0], $script_a[0], 'play_script[0] is not a ref to the original' );



( run in 1.016 second using v1.01-cache-2.11-cpan-d8267643d1d )