Если вам действительно нужно прокси-сервер над своим сценарием (если был какой-либо токен аутентификации API Google), то упакуйте двоичные данные в URL-адрес base64 data:
для атрибута src=
.
<?php
// Content-Type for whole PHP output remains text/html
$voice = file_get_contents('http://translate.google.com/translate_tts?tl=' . urlencode($_POST['language']) . '&q=' . urlencode($_POST['word']) . '');
?>
<audio controls="controls" autoplay>
<source src="data:audio/mpeg;base64,<?php echo base64_encode($voice); ?>" />
</audio>
Однако это более крупный перевод.
Фактический ответ, как уже дано, заключается в том, что вы должны разделять типы контента. Ваш скрипт должен возвращать только аудиоданные, а не смешанный HTML и двоичный контент. По сути это должно быть просто:
<?php
header("Content-Type: audio/mpeg");
readfile('http://translate.google.com/translate_tts?tl=' . urlencode($_POST['language']) . '&q=' . urlencode($_POST['word']) . '');
?>
Таким образом, вместо этого вы должны были создать тег <audio>
через jQuery (вместо ajax-загрузки):
$("#speakWord")
.html("<audio... src='speakWord.php?language=nl&word=test'></audio>");
Таким образом, этот атрибут src=
извлекает выходные данные из вашего скрипта speakWord, который, в свою очередь, извлекает его из службы перевода.