NAME
    Audio::Wav::Write - Module for writing Microsoft WAV files.

SYNOPSIS
        use Audio::Wav;

        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;
            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
    Audio::Wav

    Audio::Wav::Read

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
        Nick Peskett (see http://www.peskett.co.uk/ for contact details).
        Kurt George Gjerde <kurt.gjerde@media.uib.no>. (from 0.02)

