Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 10.11.2020, 11:50
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

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


Оба варианта портят звук. Второй вариант портит меньше.
В чем может быть причина ??
Ответить с цитированием
  #22 (permalink)  
Старый 10.11.2020, 15:30
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

Что бы не портились данные пришлось закодироваться.
Но возникла другая проблема, где то обрезаются по длине.

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 ??
Ответить с цитированием
  #23 (permalink)  
Старый 10.11.2020, 15:38
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

him, покажите код, который отправляет запрос на сервер и получает содержимое вашего wav-файла.
Ответить с цитированием
  #24 (permalink)  
Старый 10.11.2020, 15:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от him
Получаю:
95384
71538
Куда могли деться 23846 ??

https://wtools.io/php-sandbox/b22Y
<?php
    $string = '������';
    
    var_dump([
        strlen($string), // 4
        mb_strlen($string, 'UTF-8') // 1
    ]);


alert('������'.length);// 2
Ответить с цитированием
  #25 (permalink)  
Старый 11.11.2020, 12:35
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

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);



Как то так ..

Последний раз редактировалось him, 11.11.2020 в 12:54.
Ответить с цитированием
  #26 (permalink)  
Старый 20.11.2020, 09:35
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

Вобщем, на обычном компьютере все работает. Но радость моя была не долгой.
На 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();
		...

Последний раз редактировалось him, 20.11.2020 в 09:37.
Ответить с цитированием
  #27 (permalink)  
Старый 20.11.2020, 12:10
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от him
В чем может быть проблема еще ?
Проблема, почти уверен, в том, что после нажатия пользователем на кнопку вы сначала отправляете запрос (что требует какого-то времени) и только после этого пытаетесь воспроизвести audio.

Попробуйте предзагружать аудио и воспроизводить его сразу после нажатия пользователем на кнопку.
Ответить с цитированием
  #28 (permalink)  
Старый 20.11.2020, 13:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от him
mb_strlen($rawWave, '8bit')
То есть, бинарные данные, это как пить дать в UTF будут?
Ответить с цитированием
  #29 (permalink)  
Старый 20.11.2020, 13:56
him him вне форума
Аспирант
Отправить личное сообщение для him Посмотреть профиль Найти все сообщения от him
 
Регистрация: 19.08.2013
Сообщений: 93

Цитата:
Попробуйте предзагружать аудио и воспроизводить его сразу после нажатия пользователем на кнопку.
Как я могу что то загрузить, не зная что выбрал пользователь.
Пользователь выбирает что ему надо, и жмет кнопку.
На основании этих данных формируется ответ.
Или я не правильно что то понял ?

Цитата:
То есть, бинарные данные, это как пить дать в UTF будут?
Наверно. Посути содержимое файла wave.
Ответить с цитированием
  #30 (permalink)  
Старый 20.11.2020, 14:02
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от him
Нужно пользователю что то нажать. Ну у меня вроде нажимает.
Разные браузеры по разному могут трактовать, что play запускается после события вызванного действием пользователя.
Если запустить непосредственно в обработчике 'click' - это одно.
Но вы запускаете уже в обработчике другого события - какого то события XMLHttpRequest.

Надо бы проверить, может быть на fetch они среагируют более благосклонно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проигрывание MP3 аудио при нажатии на элемент. savsoft Общие вопросы Javascript 1 04.05.2020 13:14
Отследить воспроизведение аудио Galyanov Events/DOM/Window 2 23.11.2019 02:44
Воспроизведение аудио yumakar Events/DOM/Window 8 29.10.2019 13:53
Воспроизведение аудио при переходе по страницам сайта smegol Мобильный JavaScript 2 17.02.2018 01:03
Воспроизведение аудио MaksZua Общие вопросы Javascript 1 04.11.2015 22:23