Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2015, 16:11
Новичок на форуме
Отправить личное сообщение для CEMA Посмотреть профиль Найти все сообщения от CEMA
 
Регистрация: 12.01.2015
Сообщений: 5

Android + JS + Audio
Доброго времени суток, уважаемые форумчане!

При разработке одной странички возникла проблема с хитрым элементом Audio. Суть проблемы такова:
Необходимо воспроизвести некий файл из группы файлов, в зависимости от некоторых данных на странице, которые могут измениться. В функции-обработчике события при изменении вызывается функция воспроизведения. Но ничего не воспроизводится...

Объект испытаний: Планшет на базе ОС Android 4.4.2, браузер Google Chrome

Код функции и ее вызов происходят так:

var playing = 0;
function PlaySound()
{
	if (playing != 0) return;
	
	var Sound = new Audio();
	Sound.src = Sounds[InputData];
	Sound.onended = function() {
									playing = 0;
									console.log("PL = 0\r\n");
								};
	
	playing = 1;
	console.log("PL = 1\r\n")
	
	Sound.load();
	Sound.play();
}

...бла-бла-бла...

PlaySound();


Провожу отладку через JSConsole на компьютере и вижу следующее:
PL = 1
...и больше ничего. Ни звука, ни каких-либо сообщений об ошибке.

Пишу в консоли: playing = 0
Делаю так, чтобы событие произошло и история повторяется...

Добавляю кнопку, для "принудительного" вызова функции (данные ВСЕГДА находятся в диапазона массива Sounds), нажимаю и... Звук есть и в консоли вижу все, что нужно:
PL = 1
PL = 0

Может кто сталкивался с этой проблемой и может что-нибудь подсказать?
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2015, 16:28
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

…
Sound.oncanplay = function () {
    Sound.play();
};
…
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2015, 18:24
Новичок на форуме
Отправить личное сообщение для CEMA Посмотреть профиль Найти все сообщения от CEMA
 
Регистрация: 12.01.2015
Сообщений: 5

Пробовал... Результат тот же... Вернул обратно, т.к. считаю, что это событие бесполезно, если файл хранится в переменной, в кодировке Base64 с описанием MIME-типа audio/mpeg
Ответить с цитированием
  #4 (permalink)  
Старый 13.01.2015, 13:26
Новичок на форуме
Отправить личное сообщение для CEMA Посмотреть профиль Найти все сообщения от CEMA
 
Регистрация: 12.01.2015
Сообщений: 5

Нашел такую особенность...
Вызов функции делался так:
if (LastParam != Param) PlaySound();

Это, очевидно, нужно для того, чтобы при обработке этого события, озвучивался параметр только при его изменении. НО... Если условие убрать и оставить только вызов PlaySound, то звук есть.

Может я чего-то совсем не понимаю?! Или есть какая особенность?
Ну же, профессионалы, помогите новичку разобраться и выполнить поставленную задачу
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2015, 10:20
Новичок на форуме
Отправить личное сообщение для CEMA Посмотреть профиль Найти все сообщения от CEMA
 
Регистрация: 12.01.2015
Сообщений: 5

Упрощаем и изменяем задачу до нельзя, чтобы понять проблему. Функция:
function PlaySound()
{
	var Sound = new Audio();
	Sound.src = Sounds[1];
	Sound.load();
	Sound.oncanplay = function() {
							Sound.play();
							console.log("ok\r\n");
						 };
	console.log("loading...");
}


Если вызываю функцию по кнопке - звук есть, в консоли вижу "loading...ok".

Если вызываю по таймеру:
setInterval("PlaySound();", 5000);

Звука нет, но в консоли вижу "loading...ok".

Неужели никто не сталкивался? Может хоть идеи какие будут?
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2015, 14:49
Новичок на форуме
Отправить личное сообщение для CEMA Посмотреть профиль Найти все сообщения от CEMA
 
Регистрация: 12.01.2015
Сообщений: 5

С неоценимой помощью форумчан, а так же чуть-чуть интернета и спецификаций различного рода, причина такого недуга была найдена. Если у кого-то еще будет подобная заморочка, вот причина: в соответствии с непонятными политиками операционных систем Android и iOS, медиа на странице не может работать без предшествующего включению "тапа" по экрану. А дальше думайте сами
Ответить с цитированием
  #7 (permalink)  
Старый 19.08.2015, 19:00
Новичок на форуме
Отправить личное сообщение для igor-tv Посмотреть профиль Найти все сообщения от igor-tv
 
Регистрация: 19.08.2015
Сообщений: 1

Сообщение от CEMA Посмотреть сообщение
С неоценимой помощью форумчан, а так же чуть-чуть интернета и спецификаций различного рода, причина такого недуга была найдена. Если у кого-то еще будет подобная заморочка, вот причина: в соответствии с непонятными политиками операционных систем Android и iOS, медиа на странице не может работать без предшествующего включению "тапа" по экрану. А дальше думайте сами
А не подскажите, как включить "тап"?
Ответить с цитированием
  #8 (permalink)  
Старый 20.08.2015, 15:33
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от igor-tv Посмотреть сообщение
А не подскажите, как включить "тап"?
-пальчиком тапнуть по экрану
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Вывыод контента через JS inet_boy Элементы интерфейса 0 18.11.2013 01:00
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 18:05
drag-and-drop и position:fixed dotwatt Элементы интерфейса 5 05.12.2012 06:44
JS audio смена треков Beriagts jQuery 0 10.08.2012 12:41