2006年2月アーカイブ

主要使用モジュール
  • Audio::Wave
  • Audio::Cuefile::Parser
コード

#!/path/to/perl
#

use Audio::Cuefile::Parser;
use Audio::Wav;
use File::Basename;
use File::Spec;

sub index2second($);

my $cue = Audio::Cuefile::Parser->new(cue_filename.cue);

my $path = $cue->file;
my $name = $cue->title or basename($path, qw(.wav));

my $wav = Audio::Wav->new;
my $r_wav = $wav->read($path);

my $samples_per_seconds = $r_wav->length_samples / $r_wav->length_seconds;
print "Samples/Second (Bit-Rate): ", $samples_per_seconds, "\n";

my @data;
foreach ( $cue->tracks ) {
	my ($idx, $pos) = ($_->index, $_->position);
	my $filename = $name . '_' . $pos;
	$filename .= '_' . $_->title if ($_->title);
	$filename .= '.wav';

	print sprintf("Position: %s, Index: %s\n", $pos, $idx);
	my ($sec, $frm) = index2second($idx);
	my $smp = int(($sec + ($frm / 75.0)) * $samples_per_seconds);
	print sprintf("from %U secs, %U frames (%U samples)\n", $sec, $frm, $smp);

	push @data, [ $filename, $smp ];
}
push @data, [ undef, $r_wav->length_samples ];

foreach ( 0 .. $#data - 1) {
	my ($file, $s_idx, $s_idx_next) = 
		($data[$_][0], $data[$_][1], $data[$_+1][1]);
	my $smp_length = $s_idx_next - $s_idx;
	
	if ( $file ) {
		$r_wav->move_to_sample( $s_idx );
		my $w_wav = $wav->write( $file, $r_wav->details() );
		my $written_smp =
			$w_wav->write_raw_samples(
				$r_wav->read_raw_samples( $smp_length ) );

		print sprintf("File: %s, %U samples written\n", $file, $written_smp );
		$w_wav->finish;
	}
}
sub index2second($)
{
	$_ = shift;
	/(\d+):(\d+):(\d+)/ || die "$_ is not time index";
	(($1 * 60) + $2,  $3);
}
後は適当なエンコーダで圧縮とか。

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic