Audio-Scan

 view release on metacpan or  search on metacpan

t/opus.t  view on Meta::CPAN

eval {
    require Encode;
    $HAS_ENCODE = 1;
};

# Basics
{
    my $s = Audio::Scan->scan( _f('test-1-mono.opus'), { md5_size => 4096 } );

    my $info = $s->{info};

    is($info->{bitrate_average}, 30183, 'Bitrate ok');
    is($info->{channels}, 1, 'Channels ok');
    is($info->{file_size}, 4086, 'File size ok' );
    is($info->{stereo}, 0, 'Stereo ok');
    is($info->{samplerate}, 48000, 'Sample Rate ok');
    is($info->{input_samplerate}, 44100, 'Input Sample Rate ok');
    is($info->{song_length_ms}, 1044, 'Song length ok');
    is($info->{audio_offset}, 147, 'Audio offset ok');
    is($info->{audio_size}, 3939, 'Audio size ok');
    is($info->{audio_md5}, '688ac880cdc01ae5709a6fb104eddc2e', 'Audio MD5 ok' );
}

{
    my $s = Audio::Scan->scan( _f('test-2-stereo.opus'), { md5_size => 4096 } );

    my $info = $s->{info};

    is($info->{bitrate_average}, 67900, 'Bitrate ok');
    is($info->{channels}, 2, 'Channels ok');
    is($info->{file_size}, 24973, 'File size ok' );
    is($info->{stereo}, 1, 'Stereo ok');
    is($info->{samplerate}, 48000, 'Sample Rate ok');
    is($info->{input_samplerate}, 44100, 'Input Sample Rate ok');
    is($info->{song_length_ms}, 2925, 'Song length ok');
    is($info->{audio_offset}, 147, 'Audio offset ok');
    is($info->{audio_size}, 24826, 'Audio size ok');
    is($info->{audio_md5}, 'bebb6f0f0a90ce4e4e90635a3c7408d0', 'Audio MD5 ok' );
}

{
    local $ENV{AUDIO_SCAN_NO_ARTWORK} = 1;
    my $s = Audio::Scan->scan( _f('large_embedded_picture.opus'), { md5_size => 4096 } );

    my $info = $s->{info};
    is($info->{bitrate_average}, 72640, 'Bitrate ok');
    is($info->{channels}, 1, 'Channels ok');
    is($info->{file_size}, 205606, 'File size ok');
    is($info->{stereo}, 0, 'Stereo ok');
    is($info->{samplerate}, 48000, 'Sample Rate ok');
    is($info->{input_samplerate}, 44100, 'Input Sample Rate ok');
    is($info->{song_length_ms}, 100, 'Song length ok');
    is($info->{audio_offset}, 204698, 'Audio offset ok');
    is($info->{audio_size}, 908, 'Audio size ok');
    is($info->{audio_md5}, 'c050e1584b6284c230708b8b0fb2f31e', 'Audio MD5 ok');

    my $tags = $s->{tags};
    is($tags->{ALLPICTURES}[0]{image_data}, 152291, 'Image size ok');
    is($tags->{ALLPICTURES}[0]{width}, 500, 'Image width ok');
    is($tags->{ALLPICTURES}[0]{height}, 500, 'Image height ok');
    is($tags->{ALLPICTURES}[0]{mime_type}, 'image/png', 'Image type ok');
}

{
    my $offset = Audio::Scan->find_frame( _f('3min_noise.opus'), 0 );

    is( $offset, 841, 'Find frame in first page ok' );
}

{
    for ( my $ms = 68000; $ms <= 70000; $ms += 100 ) {
        my $offset = Audio::Scan->find_frame( _f('3min_noise.opus'), $ms );
        if ( $ms < 69000 ) {
            is( $offset, 731993, "Wrong offset at $ms ms" );
        } elsif ($ms < 70000 ) {
            is( $offset, 742756, "Wrong offset at $ms ms" );
        } else {
            is( $offset, 753463, "Wrong offset at $ms ms" );
        }
    }
}

{
    my $offset = Audio::Scan->find_frame( _f('3min_noise.opus'), 179999 );

    is( $offset, 1936144, 'Find frame in last page ok' );
}

{
    my $offset = Audio::Scan->find_frame( _f('3min_noise.opus'), 180000 );

    is( $offset, -1, 'Find frame outside of file not ok' );
}

## A few of the official Opus test files from https://people.xiph.org/~greg/opus_testvectors/
{
  my $s = Audio::Scan->scan( _f('failure-end_gp_before_last_packet1.opus'), { md5_size => 4096 } );

  my $info = $s->{info};

  is($info->{bitrate_average}, 428183, 'Bitrate ok');
  is($info->{channels}, 1, 'Channels ok');
  is($info->{file_size}, 5996, 'File size ok' );
  is($info->{stereo}, 0, 'Stereo ok');
  is($info->{samplerate}, 48000, 'Sample Rate ok');
  is($info->{input_samplerate}, 11025, 'Input Sample Rate ok');
  is($info->{song_length_ms}, 109, 'Song length ok');
  is($info->{audio_offset}, 162, 'Audio offset ok');
  is($info->{audio_size}, 5834, 'Audio size ok');
  is($info->{audio_md5}, 'eb9191ba092ef91e45ec65356a2a6012', 'Audio MD5 ok' );
}

{
  my $s = Audio::Scan->scan( _f('broken.phobosstream.opus'), { md5_size => 4096 } );

  my $info = $s->{info};
  my $tags = $s->{tags};
  
  is($info->{bitrate_average}, 3715, 'Bitrate ok');
  is($info->{channels}, 2, 'Channels ok');
  is($info->{file_size}, 230827, 'File size ok' );



( run in 1.567 second using v1.01-cache-2.11-cpan-788537b7465 )