PDA

Просмотр полной версии : Проблема проигрывания звука в MSIE


Petrovich_Z
28.12.2006, 16:52
Добрый день,
требуется воспроизводить загружаемый звук. Звуки грузятся с сайта. В самом Flash'е все работает отлично, нажимаю кнопку, файл загружается (music.load('http://site.ru/getsound.mp3?a=12345'), false), стабатывает onLoad, проверяю music.duration=20365, делаю music.start() и музыка играет. Как только начинаю смотреть флешку в msie - как будто все точно также, вот только music.duration=0. Чтобы услышать звук нудно снова нажать на кнопку. В Firefox все работает нормально (не важно где находится флешка - локально или на сайте). В чем подвох. Не писать же "пользователи MSIE нажимайте на кнопку 2 раза". Самое интересное, что закешированные файлы даже в MSIE играют с первой попытки. Не понимаю почему происходит onLoad(true). getSound.mp3 на самом деле php, но там вроде проблем нет.

silin
28.12.2006, 17:22
то что в IE бывает что криво работают события загрузки не новость,
как вариант можно и продублировать (отследить в onEnterFarme или интервальной функции)
а у тебя интересно какой такой music.load , music он же Sound, нет у него такого метода.. или он MovieClip ? тогда при чем music.start(), расшифруй тут что происходит..

FourSide
28.12.2006, 18:10
У него двойной клик в IE на мувике происходит :) Ничего нового, можно использовать SWFObject().

Petrovich_Z
28.12.2006, 18:24
var music:Sound = new Sound();

music.onLoad=function(success:Boolean){
if(success){
info.text=music.duration; //info - текстовое поле для отладки в IE
music.start();
}
};

// на кнопке висит:
on(release){
music.loadSound("http://www.site.ru/getsound.mp3?a=123654", false);
}



вот такой у меня был код.

модернизировал примерно так:

var music:Sound = new Sound();

music.onLoad=function(success:Boolean){
if(success){
if(music.duration>0){
info.text=music.duration; //info - текстовое поле для отладки в IE
music.start();
}else{
music.loadSound("http://www.site.ru/getsound.mp3?a=123654", false);
}
}
};


так он у меня ушел в бесконечный цикл.

silin
28.12.2006, 18:46
так и должен..
в качестве эксперимента, такой вариант замены родному onLoad:
var music=new Sound();
var intervalID;
but.onPress=function(){
music.loadSound('file.mp3', false);
intervalID=setInterval(watchLoad,10);
}
function watchLoad(){
if(music.duration){
clearInterval(intervalID);
music.start();
}
}

Petrovich_Z
28.12.2006, 18:57
Попробовал, результан оказался и ожидаемым и непредсказуемым одновременно: естественно с первого клика ничего не произошло - тишина, зато при втором клике случилось что-то странное - заиграл звук, но не один, а два одинаковых с небольшой задержкой. Как будто с эхом.

silin
28.12.2006, 19:03
почему с первого клика ничего - непонятно..
а почему эхо понятно:
потому что интервал не очистился, т.е. тут надо аккуратно с областями видимости разобраться: где что определено, чтоб в watchLoad intervalID была видна..
такое предложение: надо тестовый пример с глюком, чтоб было с чем играться..

silin
28.12.2006, 19:18
У него двойной клик в IE на мувике происходит :) Ничего нового, можно использовать SWFObject().
а что это, почему
FourSide, скажи подробнее: может в этом и дело (двойной звук)
зы: потому что если б интервал не очистился был бы не двойной, а вообще кошмарный звук..

FourSide
28.12.2006, 19:24
...Чтобы услышать звук нудно снова нажать на кнопку. В Firefox все работает нормально (не важно где находится флешка - локально или на сайте). В чем подвох. Не писать же "пользователи MSIE нажимайте на кнопку 2 раза"...
Я может быть неправильно понял автора, но мне показалось, что кнопка "Старт" для проигрывания музыки не нажимается в IE. Т.е. она нажимается со второго раза, в отличие от остальных браузеров, что и дало мне мысль, что мешает активация ActiveX компонента в IE.

Для Petrovich_Z - попробуйте после загрузки страницы с мувиком в IE просто навести указатель мыши на ваш мувик. Всплывающая подсказка случайно не такая будет: "Click to activate and use this control"?

Petrovich_Z
28.12.2006, 21:14
я подготовлю пример и выложу чуть позже, только ребенка спать уложу.
Кнопка нажимается нормально. Вообще результат можно посмотреть тут:
http://www.ringbacktones.ru

Petrovich_Z
29.12.2006, 10:39
Выкладываю пример.

FourSide
29.12.2006, 11:51
Как я и предполагал, пример на сайте без использования SWFObject.

silin
29.12.2006, 12:05
я не могу разгадать этих загадок IE, но если отсрочить действие (даже с нулевой задержкой) начинает работать и в IE тоже:
var music:Sound = new Sound();
var intervalID=0;
music.onLoad = function (ok){
if(ok){
//info.text=info.text+" duration:"+music.duration;
intervalID=setInterval(setInfo,0);
music.start();
}else{
info.text="Ошибка загрузки файла"
}
}
function setInfo(){
clearInterval(intervalID);
info.text=info.text+" duration:"+music.duration;
}