PHP code example of remithefox / wave

1. Go to this page and download the library: Download remithefox/wave library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

remithefox / wave example snippets


use RemiTheFox\Wave\AbstractFloatWave;
use RemiTheFox\Wave\Wave;

$wave = Wave::createNew(
    __DIR__ . '/sound.wav', // filename
    2,                      // number of channels 
    44100,                  // sample rate
    16                      // bits per sample
);

// Wave object can be also decorated with FloatDecorator
$floatWave = AbstractFloatWave::decorate($wave); 

use RemiTheFox\Wave\Wave;

$builder = Wave::builder()
    ->setNumberOfChannels(2)
    ->setSampleRate(44100)
    ->setBitsPerSample(16)
    ->setFloatDecorator(true);

$wave = $builder->create(__DIR__ . '/sound.wav');

use RemiTheFox\Wave\AbstractFloatWave;
use RemiTheFox\Wave\Wave;

$wave = Wave::createFromFile(__DIR__ . 'existing-file.wav');

// Wave object can be also decorated with FloatDecorator
$floatWave = AbstractFloatWave::decorate($wave); 

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
$wave->seek(2137); // goes to sample number 2137

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
$position = $wave->getPosition(); // returns current position

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
$wave->seek($wave->time(1, 30)); // goes to 1:30 regardless of sampling frequency

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
$sample = $wave->read();

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
$sample = $wave->write([0,1]); // write one sample and go one sample forward

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
$sample = $wave[420]; // reads sample number 420
$wave[420] = [0, 0];  // replaces sample number 420
$wave[] = [0, 0];     // adds sample at the end of file

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */
foreach ($wave as $sampleNumber => $sampleValues) {
    // ...
}

// ...
/** @var \RemiTheFox\Wave\WaveInterface $wave */

$generator = $wave->toGenerator(21);
foreach ($generator as $sampleNumber => $sampleValues){
    // ...
}

// ...
function tone(int $sampleRate, float $frequency, int $length, float $volume = 1): \Generator
{
    for ($i = 0; $i < $length; $i++) {
        $sample = $volume * sin(2 * pi() * $frequency * $i / $sampleRate);
        yield [$sample];
    }
}

/** @var \RemiTheFox\Wave\WaveInterface $wave */

$sampleRate = $wave->getSampleRate();
$frequency = 1000; // 1kHz
$length = $wave->time(0, 5);

$generator = tone($sampleRate, $frequency, $length);
$wave->fromGenerator($generator);
text
 /\-/\
(=^w^=)
 )   (