NAME
Audio::Wav::Write - Module for writing Microsoft WAV files.
SYNOPSIS
my
$wav
= new Audio::Wav;
my
$sample_rate
= 44100;
my
$bits_sample
= 16;
my
$details
= {
'bits_sample'
=>
$bits_sample
,
'sample_rate'
=>
$sample_rate
,
'channels'
=> 1,
# if you'd like this module not to use a write cache, uncomment the next line
#'no_cache' => 1,
};
my
$write
=
$wav
->
write
(
'testout.wav'
,
$details
);
&add_sine
( 200, 1 );
sub
add_sine {
my
$hz
=
shift
;
my
$length
=
shift
;
my
$pi
= ( 22 / 7 ) * 2;
$length
*=
$sample_rate
;
my
$max_no
= ( 2 **
$bits_sample
) / 2 - 1;
for
my
$pos
( 0 ..
$length
) {
$time
=
$pos
/
$sample_rate
;
$time
*=
$hz
;
my
$val
=
sin
$pi
*
$time
;
my
$samp
=
$val
*
$max_no
;
$write
->
write
(
$samp
);
}
}
$write
-> finish();
DESCRIPTION
Currently only writes to a file.
SEE ALSO
NOTES
This module shouldn't be used directly, a blessed object can be returned from Audio::Wav.
METHODS
finish
Finishes off & closes the current wav file.
$write
-> finish();
add_cue
Adds a cue point to the wav file. If $sample is undefined then the position will be the current position (end of all data written so far).
# $byte_offset for 01 compatibility mode
$write
-> add_cue(
$sample
,
"label"
,
"note"
);
set_sampler_info
All parameters are optional.
my
%info
= (
'midi_pitch_fraction'
=> 0,
'smpte_format'
=> 0,
'smpte_offset'
=> 0,
'product'
=> 0,
'sample_period'
=> 0,
'manufacturer'
=> 0,
'sample_data'
=> 0,
'midi_unity_note'
=> 65,
);
$write
-> set_sampler_info(
%info
);
add_sampler_loop
All parameters are optional except start & end.
my
$length
=
$read
-> length_samples();
my
(
$third
,
$twothirds
) =
map
int
(
$length
/
$_
), ( 3, 1.5 );
my
%loop
= (
'start'
=>
$third
,
'end'
=>
$twothirds
,
'fraction'
=> 0,
'type'
=> 0,
);
$write
-> add_sampler_loop(
%loop
);
add_display
set_info
Sets information to be contained in the wav file.
$write
-> set_info(
'artist'
=>
'Nightmares on Wax'
,
'name'
=>
'Mission Venice'
);
file_name
Returns the current filename.
my
$file
=
$write
-> file_name();
write
Adds a sample to the current file.
$write
->
write
(
@sample_channels
);
Each element in @sample_channels should be in the range of;
where
$samp_max
= ( 2 ** bits_per_sample ) / 2
-
$samp_max
to +
$samp_max
write_raw
Adds some pre-packed data to the current file.
$write
-> write_raw(
$data
,
$data_length
);
Where;
$data
is the packed data
$data_length
(optional) is the
length
in bytes of the data
write_raw_samples
Adds some pre-packed data to the current file, returns number of samples written.
$write
-> write_raw_samples(
$data
,
$data_length
);
Where;
$data
is the packed data
$data_length
(optional) is the
length
in bytes of the data
AUTHORS
Kurt George Gjerde <kurt.gjerde
@media
.uib.
no
>. (0.02-0.03)