function encodeWav(array $raw) : array
{
$result = "RIFF"
. pack('V', count($raw))
. "WAVEfmt "
. pack('V', 16)
. pack('v', 1)
. pack('v', TTS_DEFAULT_OPTIONS['numChannels'])
. pack('V', TTS_DEFAULT_OPTIONS['sampleRate'])
. pack('V', TTS_DEFAULT_OPTIONS['sampleRate'] * 4)
. pack('v', 4)
. pack('v', 16)
. 'data'
. pack('V', count($raw) * 2);
$volume = 1;
foreach ($raw as $unit) {
$result .= pack('v', $unit * $volume);
}
return [
'type' => 'audio/x-wav',
'content' => $result
];
}