puter.ai.speech2speech()Convert an existing recording into another voice while preserving timing, pacing, and delivery. Uses ElevenLabs voices.
puter.ai.speech2speech(source, testMode = false)
puter.ai.speech2speech(source, options, testMode = false)
puter.ai.speech2speech({ audio: source, ...options })
source (String | File | Blob) (required unless provided in options)
Audio to convert. Accepts:
~/recordings/line-read.wavFile or Blob (converted to data URL automatically)data:audio/wav;base64,...)options (Object) (optional)
Fine-tune the conversion:
audio (String | File | Blob): Alternate way to provide the source input.voice (String): Target ElevenLabs voice ID. Defaults to 21m00Tcm4TlvDq8ikWAM.model (String): Voice-changer model. Defaults to eleven_multilingual_sts_v2. You can also use eleven_english_sts_v2 for English-only inputs.output_format (String): Desired output codec and bitrate, e.g. mp3_44100_128, opus_48000_64, or pcm_48000. Defaults to mp3_44100_128.voice_settings (Object|String): ElevenLabs voice settings payload (e.g. {"stability":0.5,"similarity_boost":0.75}).seed (Number): Randomization seed for deterministic outputs.remove_background_noise (Boolean): Apply background noise removal.file_format (String): Input file format hint (e.g. pcm_s16le_16) for raw PCM streams.optimize_streaming_latency (Number): Latency optimization level (0–4) forwarded to ElevenLabs.enable_logging (Boolean): Forwarded to ElevenLabs to toggle zero-retention logging behavior.test_mode (Boolean): When true, returns a sample response without using credits. Defaults to false.testMode (Boolean) (optional)
When true, skips the live API call and returns a sample audio clip so you can build UI without spending credits.
A Promise that resolves to an HTMLAudioElement. Call audio.play() or use the element’s src URL to work with the generated voice clip.
Change the voice of a sample clip
<html>
<body>
<script src="https://js.puter.com/v2/"></script>
<script>
(async () => {
const audio = await puter.ai.speech2speech('https://assets.puter.site/example.mp3', {
voice: '21m00Tcm4TlvDq8ikWAM',
});
audio.play();
})();
</script>
</body>
</html>
Convert a recording stored as a file
<html>
<body>
<script src="https://js.puter.com/v2/"></script>
<input type="file" id="input" accept="audio/*" />
<button id="convert">Change voice</button>
<audio id="player" controls></audio>
<script>
document.getElementById('convert').onclick = async () => {
const file = document.getElementById('input').files[0];
if (!file) return alert('Pick an audio file first.');
const audio = await puter.ai.speech2speech(file, {
voice: '21m00Tcm4TlvDq8ikWAM',
model: 'eleven_multilingual_sts_v2',
output_format: 'mp3_44100_128',
removeBackgroundNoise: true,
});
document.getElementById('player').src = audio.toString();
audio.play();
};
</script>
</body>
</html>
Develop with test mode
<html>
<body>
<script src="https://js.puter.com/v2/"></script>
<script>
(async () => {
const preview = await puter.ai.speech2speech('~/any-file.wav', true);
console.log('Sample audio URL:', preview.toString());
})();
</script>
</body>
</html>