Удалось запустить воспроизведение двумя способами:
var audio = new Audio(); audio.src = URL.createObjectURL(new Blob([data], {type: "audio/x-wav"})); audio.play(); var wavString = data; var audio = new Audio(); var len = wavString.length; var buf = new ArrayBuffer(len); var view = new Uint8Array(buf); for (var i = 0; i < len; i++) { view[i] = wavString.charCodeAt(i) & 0xff; } var blob = new Blob([view], {type: "audio/x-wav"}); audio.src = URL.createObjectURL(blob); audio.play(); Оба варианта портят звук. Второй вариант портит меньше. В чем может быть причина ?? |
Что бы не портились данные пришлось закодироваться. :)
Но возникла другая проблема, где то обрезаются по длине. toFile("len.txt", strlen($rawWave)); echo base64_encode($rawWave); success: function(data) { var decodeWave = atob(data); var len = decodeWave.length; console.log(len); Получаю: 95384 71538 Куда могли деться 23846 ?? |
him, покажите код, который отправляет запрос на сервер и получает содержимое вашего wav-файла.
|
Цитата:
https://wtools.io/php-sandbox/b22Y <?php $string = '������'; var_dump([ strlen($string), // 4 mb_strlen($string, 'UTF-8') // 1 ]); alert('������'.length);// 2 |
header('Content-type: audio/x-wav'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.mb_strlen($rawWave, '8bit')); toFile("len.txt", strlen($rawWave)); // 95384 toFile("len2.txt", mb_strlen($rawWave, '8bit')); // 95384 echo base64_encode($rawWave); $.ajax({ type: "POST", .. success: function(data) { var decodeWave = atob(data); var len = decodeWave.length; // 71538 console.log(len); Как то так .. |
Вобщем, на обычном компьютере все работает. Но радость моя была не долгой.
На iPad-е аудио не проигрывается. Лазил в интернете. Своя система безопасности (статья от 2012 года). Нужно пользователю что то нажать. Ну у меня вроде нажимает. Да, у меня нету тега <audio> в html документе. Но он вроде не обязательный. В чем может быть проблема еще ? <form> <input type="button" id="But" value="Проиграть"> </form> ... $(document).on('click', '#But', function(e) { ... $.ajax({ .. success: function(data) { var audio = new Audio(); ... var blob = new Blob([view], {type: "audio/wav"}); audio.src = URL.createObjectURL(blob); audio.addEventListener('ended', function () { console.log(" ended !! ");}); audio.play(); ... |
Цитата:
Попробуйте предзагружать аудио и воспроизводить его сразу после нажатия пользователем на кнопку. |
Цитата:
|
Цитата:
Пользователь выбирает что ему надо, и жмет кнопку. На основании этих данных формируется ответ. Или я не правильно что то понял ? Цитата:
|
Цитата:
Если запустить непосредственно в обработчике 'click' - это одно. Но вы запускаете уже в обработчике другого события - какого то события XMLHttpRequest. Надо бы проверить, может быть на fetch они среагируют более благосклонно. |
Часовой пояс GMT +3, время: 05:52. |