Удалось запустить воспроизведение двумя способами:
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, время: 11:49. |