#!/usr/bin/perl -w

use strict;
use warnings;

use POSIX 'fmod';
use MP3::Tag;

my $want_mins = 6;
my $tracks = 10;
my $dir = '.';
my $mp3 = sprintf 'cuetest_%d.mp3', $want_mins;

my $frame = unpack(
	'u' => 'M_^,8Q/\```-(`````%555555555555555555555555555555555555555555;555555555555555555555555555555555555'
);
my $frame_secs = 0.072;
my $nl = "\015\012";

# make mp3 file

my $want_frames = $want_mins * ( 60 / $frame_secs );
open( MP3, ">$dir/$mp3" )
	or die "problems creating $dir/$mp3: $!";
binmode MP3;
for ( my $i = 0; $i < $want_frames; $i ++ ) {
	print MP3 $frame;
}
close MP3;

# make cue sheet

my $cue = qq{FILE "$mp3" MP3$nl};
my $pic = "  TRACK %02d AUDIO$nl    INDEX 01 %02d:%02d:%02d$nl";
my $pos = 0;
my $sec_step = ( $want_mins * 60 ) / $tracks;
for ( my $track = 1; $track <= $tracks; $track ++ ) {
	$cue .= sprintf(
		$pic,
		$track,
		$pos / 60,
		$pos % 60,
		fmod( $pos, 1 ) * 75
	);
	$pos += $sec_step;
}

# add id3 tag

my $id3 = MP3::Tag
	-> new( "$dir/$mp3" )
	-> new_tag( 'ID3v2' );
$id3 -> frame_select(
	'TXXX',
	'CUESHEET',
	0,
	$cue
) or die "Problem adding tag\n";
$id3 -> write_tag()
    or die "Problem writing tag\n";
