---
name: "Audio::Wav::Write"
section: "3pm"
platform: "linux"
package: "libaudio-wav-perl"
version: "0.14-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Audio::Wav::Write"
---

# Audio::Wav::Write(3pm)

Module for writing Microsoft WAV files.

## 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 - 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

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>. (0.02-0.03)
```
