Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Аудиоплеер на flash. (http://www.flasher.ru/forum/showthread.php?t=145869)

ShitZu 21.10.2010 19:05

Аудиоплеер на flash.
 
Доброго времени суток.
Возникла необходимость реализовать через flash плеер,который будет принимать аудиопоток с сервера.
Так как с AS ранее сталкивался лишь косвенно,возникло несколько вопросов)
Нужно,чтобы при нажатии на кнопку начиналось воспроизведение потока(избражение кнопки меняется на то что проставлено в кадре "down") ,при повторном нажатии на нее же ,останавливалось.(кнопка сбрасывается на состояние по дефолту.)
Код:


stop();

play_buttn.addEventListener(MouseEvent.CLICK,act_1);

function act_1(Event:MouseEvent)//функция кнопки "play" 1е нажатие
{
        import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;
 
    var s = "Global"; //  запиливаем "s" как глобальную перменную
    var req:URLRequest = new URLRequest("адрес сервера");
    var context:SoundLoaderContext = new SoundLoaderContext(1000, true);
    s = new Sound(); // определяем s
    s.load(req, context); // грузим поток
    s.play(); // слушаем.
       
    play_buttn.addEventListener(MouseEvent.CLICK,act_2); // 2 нажатие  - останавливает загрузку.
    function act_2(Event:MouseEvent)
        {
                s.stop();

                }


}

Естественно сие недоразумение творение работает...не совсем так как нужно
Подскажите,пожалуйста,как это исправить?
Заранее спасибо.

AlexDesinger 21.10.2010 19:59

пишите код в классах:
Код AS3:

package 
{
 
        import flash.media.Sound;
        import flash.events.MouseEvent;
        import flash.media.SoundLoaderContext;
        import flash.net.URLRequest;
 
        public class Main extends MovieClip
        {
 
                var s:Sound;//  запиливаем "s" как глобальную перменную
                var req:URLRequest;
                var context:SoundLoaderContext;
 
                private var played:Boolean = false;
 
                public function Main()
                {
                        s = new Sound();// определяем s
                        req = new URLRequest("адрес сервера");
                        context = new SoundLoaderContext(1000,true);
 
                        play_buttn.addEventListener(MouseEvent.CLICK,act_1);
 
                }
                private function act_1(e:MouseEvent):void
                {
                        var playBtn:MovieClip = e.target as MovieClip();
 
                        if (! played)
                        {
                                playBtn.gotoAndStop(2);
                                s.load(req, context);// грузим поток
                                s.play();// слушаем.
                        }
                        if(played)
                        {
                                playBtn.gotoAndStop(1);
                                s.stop();
                        }
                        played = ! played;
                }
        }
}

не тестировал, возможно ошибку выдаст, если что опишите, поправлю - потестить нет времени.

ShitZu 21.10.2010 21:19

Спасибо)
Как раз нашел решение проблемы...все оказалось проще.(через свойства видимости кнопки е т ц)

Вопрос номер 2:
Пытаюсь проверить доступность сервера внутри функции act_1(то есть при загрузке потока,дабы в случаи 404 выдать сообщение):
Код AS3:

....
 
if (s.isBuffering == false)
          {
                  try //останавливаем воспроизведение
              {
                      s_Chan.stop();
                      s_Chan = s.play(0);
                      s_Chan.stop();
                      s.close();
                }
                  catch(e:Error){
                      s_Chan.stop();
                      s_Chan = s.play(0);
                      s_Chan.stop();
    }
                  play_buttn.visible = true;    //возвращаем кнопки в исходное состояние                   
                  stop_buttn.visible = false;
 
                  //далее отправка сообщения в текстполе
                  }

isBuffering,я так понимаю тут лишнее,ибо ничего не дает
Не подскажете какую-нибудь альтернативу?

gloomyBrain 21.10.2010 21:34

Цитата:

Код AS3:

try {
        s_Chan.stop();
        s_Chan = s.play(0);
        s_Chan.stop();
        s.close();
} catch(e:Error) {
        s_Chan.stop();
        s_Chan = s.play(0);
        s_Chan.stop();
}


Да, плохо дело... =) Понимаю, что Вам некогда, но все же стоило бы почитать доки, там все есть.

in4core 21.10.2010 21:54

Цитата:

Да, плохо дело... =)
lol lol lol

AlexDesinger 22.10.2010 11:08

Цитата:

Спасибо)
Как раз нашел решение проблемы...все оказалось проще.(через свойства видимости кнопки е т ц)
ппц, ну ладно, как знаете +)

Hidest 22.10.2010 14:01

Цитата:

Сообщение от ShitZu (Сообщение 944422)
var s = "Global"; // запиливаем "s" как глобальную перменную

Что это?

AlexDesinger 22.10.2010 16:17

Цитата:

Что это?
не прьтесь, ввиду того, что код написан в кадре, остальное можно не читать.

cleptoman 22.10.2010 18:08

господа in4core и AlexDesigner, я вас призываю к большей толерантности к новичкам в вопросе и их топикам..все мы такие были.
если нечего по делу сказать/спросить, лучше не писать вообще, учитывая, что сами то не далеко пока ушли (ИМХО)

п.с. сори за оффтоп, просто читать противно
п.п.с если код рабочий, то он будет и в кадре работать

djyamato 22.10.2010 18:31

Цитата:

Сообщение от cleptoman (Сообщение 944658)
п.п.с если код рабочий, то он будет и в кадре работать

Поддерживаю

AlexDesinger 22.10.2010 18:38

Цитата:

учитывая, что сами то не далеко пока ушли (ИМХО)
ну это вы не подумав сказали, я понимаю, бывает...
сорри за офтоп, не мог не ответить, действительно - читать и впрямь противно.

Hidest 22.10.2010 19:59

Ух, хорошо, что меня пронесло :)...

Цитата:

Что это?
Вопрос мой автору был адресован с целью выяснить, что он хотел добиться этой строчкой, потому как это бессмысленно. Выяснив цель, можно наставить уже на путь истинный заблудший разум новичка :)

ShitZu 24.10.2010 16:23

Hidest, уже понял что бессмысленно :)
После раскопок в хелпе все пришло в норму и заработало как нужно.
Так что,вопрос исчерпан.
Уж извините за этакое ...эм..недоразумение =/

Пытаюсь реализовать чтение ID3 звука,идущего с сервера,но ошибки не вижу вплотную...
Подскажите,что не так?
До id3Handler,видимо действие ,вообще,не доходит...
Код AS3:

//...
function s_play():void//функция кнопки "play"
{
        name_txt.text = "...Loading ID3...";
        s = new Sound(); // определяем s
        s.addEventListener(Event.ID3, id3Handler); //читает тэги
        s.load(req, context); // грузим поток
        s_Chan = s.play(); // пускаем звук к канале s_Chan
        soundTrans.volume = volumeS; // устанавливаем кромкость
        s_Chan.soundTransform = soundTrans; // и присваиваем громкость каналу
        play_buttn.visible = false;                       
        stop_buttn.visible = true;
      //....
}
 
function id3Handler(event:Event):void //читаем тэги
{
    var id3:ID3Info = s.id3;       
    name_txt.text =  s.id3.artist + " - " + s.id3.songName;
}


cleptoman 24.10.2010 16:38

Код AS3:

function id3Handler(event:Event):void //читаем тэги
{
var id3:ID3Info = s.id3;       
trace(s.id3.artist)
}
var s:Sound = new Sound();
s.addEventListener(Event.ID3, id3Handler); //читает тэги
s.load(new URLRequest("1.mp3")); // грузим поток
var s_Chan :SoundChannel= s.play(); // пускаем звук к канале s_Chan

у меня все работает. проверьте какой версии ваши тэги..если 1, то они в конце файла. если вы грузите поток из какого-нибудь icecast-а, то вы не получите метаданные таким образом

ShitZu 24.10.2010 18:54

cleptoman
Да,вы правы,как раз гружу из "какого-нибудь icecast-а" )
Не подскажите,каким образом можно вынимать эти теги?

cleptoman 24.10.2010 19:43

ну, я ,пока, кроме как по таймеру дергать ХМЛ с сервера с нужными данными ничем другим не разжился )

ShitZu 25.10.2010 00:19

Значит...придется отложить до лучших времен.
Еще один момент )
Пытаюсь выводить процент буферизации звука(в процессе загрузки с сервера):
Код AS3:

 
function progressHandler(event:ProgressEvent):void
{
            var loadTime:Number = s.bytesLoaded / s.bytesTotal; //s  - звук
            //var LoadPercent:uint = Math.round(loadTime * 100);
 
            load_txt.text = loadTime + "%.";
        }

Код взят из хелпа.
Суть в том,что величина,получаемая на выходе постоянно растет и ничего близкого к необходимому не отражает.
Как можно это реализовать?)

Maxi_Hunter 05.11.2010 13:41

Почитал я тут тему и задумался...
Насколько я знаю, у класса Sound нет метода stop()...
Так как же будет работать код, написанный автором в самом начале темы?
Код AS3:

var s:Sound = new Sound;
...
s.stop();



Часовой пояс GMT +4, время: 21:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.