59 lines
1.5 KiB
Perl
59 lines
1.5 KiB
Perl
# waveform to ASM converter
|
|
|
|
if(!open(RHA, "p1.wav")) # source file
|
|
{ die "File could not opend." }
|
|
binmode RHA;
|
|
|
|
read(RHA, $sign, 4);
|
|
if($sign ne "RIFF") { die "Not wav file"; }
|
|
read(RHA, $dmy, 4);
|
|
read(RHA, $sign, 4);
|
|
if($sign ne "WAVE") { die "Not wav file"; }
|
|
|
|
read(RHA, $sign, 4);
|
|
if($sign ne "fmt ") { die "Not fmt"; }
|
|
read(RHA, $siz, 4);
|
|
$lfmt = unpack('L4', $siz);
|
|
if($lfmt > 100) { die "Invalid format"; }
|
|
read(RHA, $cfmt, $lfmt);
|
|
$id = unpack('S2', substr($cfmt, 0, 2));
|
|
$nchan = unpack('S2', substr($cfmt, 2, 2));
|
|
$nsamp = unpack('L4', substr($cfmt, 4, 4));
|
|
$nrate = unpack('L4', substr($cfmt, 8, 4));
|
|
$nblk = unpack('S2', substr($cfmt, 12, 2));
|
|
$nbit = unpack('S2', substr($cfmt, 14, 2));
|
|
print "id = $id\n";
|
|
print "channels = $nchan ch\n";
|
|
print "sampling freq = $nsamp Hz\n";
|
|
print "data rate = $nrate bytes/sec\n";
|
|
print "block size = $nblk bytes\n";
|
|
print "bit/sample = $nbit bit\n";
|
|
|
|
if($id != 1) { die "Invalid format (not LPCM)"; } # linear?
|
|
if($nchan != 1) { die "Invalid format (not Mono)"; } # mono?
|
|
if($nbit != 16) { die "Invalid format (not 16bit)"; } # 16bit?
|
|
|
|
read(RHA, $sign, 4);
|
|
if($sign ne "data") { die "No data"; }
|
|
read(RHA, $siz, 4);
|
|
$ldata = unpack('L4', $siz) / 2;
|
|
print "samples = $ldata\n";
|
|
|
|
$c = 0;
|
|
while ($ldata--) {
|
|
read(RHA, $bdat, 2);
|
|
$val = int(unpack('s2', $bdat) / 256);
|
|
if($c == 0) {
|
|
print "\n\t.db $val";
|
|
} else {
|
|
print ", $val";
|
|
}
|
|
$c = ($c+1) & 15;
|
|
}
|
|
print "\n";
|
|
|
|
close RHA;
|
|
|
|
exit;
|
|
|