Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.04.2007, 14:29
EddieA вне форума Посмотреть профиль Отправить личное сообщение для EddieA Найти все сообщения от EddieA
  № 1  
Ответить с цитированием
EddieA

Регистрация: Apr 2007
Сообщений: 8
По умолчанию Узнать длину подгружаемого mp3-трека

Доброго времени суток всем =)

Перерыл сейчас весь форум, вопроса конкретно на свой вопрос не нашел.

Итак - все просто. Mp3 плеер. Все работает, кроме того, что я хочу сделать нормально перемотку. Для этого нужно знать position и duration, насколько я понимаю. Но учитывая, что собственно трек подгружается, duration для меня параметр совсем не тот. На локалке ессно все ок, но вот чтоб реально работало...
Я конечно извратился и добавил getBytesTotal / getBytesLoaded - примерно попадает )))) Но это ж не то совсем, как бы криво очень выходит.
Куча сайтов с подобными плеерами есть - и там как-то все идеально...
Можно конечно php задействовать, но по-моему длину там вытащить не проще, пробовал (хотя может не то).

Сложновато выходит, а так хотелось в одну строчку)

В общем, посоветуйте, как красивее обойти сию проблему)

Старый 09.04.2007, 15:33
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 2  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
position - сколько проиграло, duration - сколько скачалось или весь клип.
Перемотать можно только в пределах скачаного.
Или перематывать на стороне сервера, но чем?

Старый 09.04.2007, 20:09
EddieA вне форума Посмотреть профиль Отправить личное сообщение для EddieA Найти все сообщения от EddieA
  № 3  
Ответить с цитированием
EddieA

Регистрация: Apr 2007
Сообщений: 8
position, duration - это ессно понятно.
но когда есть полоса прокрутки на 100% трека, загрузилось допустим 30% - как перемотать скажем на 15%, при этом видна вся полоса прокрутки (что очевидно) ... вот в чем вопрос.

собсно пример сразу - youtube.com. Только видео там, но это не важно - полоса прокрутки у меня аналогична.

Старый 09.04.2007, 20:20
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Выдернуть duration из ID3 тега?

Старый 10.04.2007, 00:35
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Можно вычислить достаточно точно длительность трека, имея длину скачаного участка, его вес в байтах и общий вес. Общая длина - серая, скачаный участок - белый, а то что перемотка ошибется секунд на 5, поди докажи, никто и внимания не обратит.
ID3 тоже хорошо, но смотря чем файл сжат - может и соврать, а может и вообще отсутствовать.

Старый 10.04.2007, 01:00
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
В mp3 информацию о длине трека в миллисекундах можно прочитать из тега TLEN (если она записана), но ID3 должна быть версии 2.0. Инфа 2.0 записывается в начале файла, в отличии от 1.0
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 10.04.2007, 03:04
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я думаю, об ID3 создатель должен позаботиться.

Старый 25.03.2010, 15:29
kpch вне форума Посмотреть профиль Отправить личное сообщение для kpch Найти все сообщения от kpch
  № 8  
Ответить с цитированием
kpch

Регистрация: Feb 2008
Сообщений: 2
Цитата:
Сообщение от Kikasso Посмотреть сообщение
Можно вычислить достаточно точно длительность трека, имея длину скачаного участка, его вес в байтах и общий вес. Общая длина - серая, скачаный участок - белый, а то что перемотка ошибется секунд на 5, поди докажи, никто и внимания не обратит.
можете дать формулу вычесления?

Добавлено через 51 минуту
preloader.onEnterFrame = function() {
//этот Бар связан с буферизацией
this.bloaded._xscale = Math.round(mp3_sound.getBytesLoaded()/mp3_sound.getBytesTotal()*100);

//вычесление длины трека ВОТ ЭТО ТО ЧТО ТЫ ИЩЕШь нааверн :P !!!!!!

var loaded = mp3_sound.getBytesLoaded();
var duration = mp3_sound.duration;
kbps = ((loaded)/(duration));
var total = mp3_sound.getBytesTotal();
timeTotal = (total/kbps);

//ну а тут отображаем текущую позицию
this.curentPosition._xscale = Math.round(mp3_sound.position/timeTotal*100);
};

Старый 25.03.2010, 17:13
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Вот выдерка из моего класса. Посмотри внимательнее разберись что зачем. Там полностью организована прокрутка ( как со 100% так и до 100% , то что ты хотел).
Код AS1/AS2:
function setMusicActive(c, f) {
 
 
		sound = new Sound(c);
		sound.setVolume(100);
		sound.onSoundComplete = mx.utils.Delegate.create(this, Complete_control);
		sound.loadSound(soundArray[f],true);
		sound.onLoad = mx.utils.Delegate.create(this, Complete_control);
		sound.start();
		CLP[0]._parent.o.drag.enabled = false; // клип драггера ползунка
		CLP[0]._parent.stop_btn.onRelease = mx.utils.Delegate.create(this, Stop_control); // кнопка остановки трека
		CLP[0]._parent.play_btn.onRelease = mx.utils.Delegate.create(this, Play_control); // кнопка проигрывания
		CLP[0]._parent.pause_btn.onRelease = mx.utils.Delegate.create(this, Pause_control); // кнопка паузы
		CLP[0]._parent.v.drag.onPress = mx.utils.Delegate.create(this, DRAGGER); // далее идут  события для драгов
		CLP[0]._parent.o.drag.onPress = mx.utils.Delegate.create(this, DRAG2);
		CLP[0]._parent.o.drag.onRelease = mx.utils.Delegate.create(this, SDRAGGER2);
		CLP[0]._parent.o.drag.onReleaseOutside = mx.utils.Delegate.create(this, SDRAGGER2);
		CLP[0]._parent.v.drag.onRelease = mx.utils.Delegate.create(this, SDRAGGER);
		CLP[0]._parent.v.drag.onReleaseOutside = mx.utils.Delegate.create(this, SDRAGGER);
		clearInterval(_int2);
		clearInterval(SU);
		SU = setInterval(this, "checkProgress", 200);
		update();
	}
	function Play_control() {
		if (paused) {
			sound.start(currentPosition);
			paused = false;
		}
	}
	function Stop_control() {
		sound.stop();
		currentPosition = 0;
		paused = true;
	}
	function Pause_control() {
		if (!paused) {
			currentPosition = sound.position/1000;
			sound.stop();
			paused = true;
		} else {
			if (currentPosition>0) {
				sound.start(currentPosition);
				paused = false;
			}
		}
	}
 
	function Complete_control(success) {
		clearInterval(inn);
		if (success) {
			inn = setInterval(this, "UP", 20);
			CLP[0]._parent.o.drag.enabled = true;
		}
	}
	function DRAGGER() {
		clearInterval(_int2);
		CLP[0]._parent.v.drag.startDrag(false,-50,0,50,0);
		_int2 = setInterval(this, "update", 1);
	}
	function SDRAGGER() {
		CLP[0]._parent.v.drag.stopDrag();
		clearInterval(_int2);
	}
	function update() {
		var vol = CLP[0]._parent.v.drag._x+50;
		sound.setVolume(vol);
	}
	function DRAG2() {
		clearInterval(inn);
		clearInterval(_int2);
		CLP[0]._parent.o.drag.startDrag(false,0,0,100,0);
		_int2 = setInterval(this, "update2", 200);
	}
	function update2() {
		sound.start((Math.floor(sound.duration/1000)*CLP[0]._parent.o.drag._x)/100);
		clearInterval(_int2);
	}
	function SDRAGGER2() {
		CLP[0]._parent.o.drag.stopDrag();
		inn = setInterval(this, "UP", 20);
	}
	function UP() {
		CLP[0]._parent.o.drag._x = Math.floor(sound.position/sound.duration*100);
	}
	function checkProgress() {
		var Loaded = Math.round(sound.getBytesLoaded());
		var Total = Math.round(sound.getBytesTotal());
		var pct = Math.floor((Loaded/Total)*100);
		if (Loaded/Total != 1) {
			LIST_ITEM._parent["LIST_ITEM"+CI].progress._visible = true;
			LIST_ITEM._parent["LIST_ITEM"+CI].progress.gotoAndStop(pct);
		} else {
			clearInterval(SU);
			LIST_ITEM._parent["LIST_ITEM"+CI].progress._visible = false;
		}
	}
	function UnFocusCicled() {
		for (var a = 0; a<ar.length; a++) {
			LIST_ITEM._parent["LIST_ITEM"+a].progress.gotoAndStop(1);
		}
	}
	function DELETE() {
		delete sound;
	}
П.с. 1 - обрати внимане на функции UP и update2 . Честно щас не помню какие именно функции для ползунка громкости , а какие для прокрутки. но думаю разберешься
П.с. 2 много лишнего тут. обращай внимание только на механику. все удалить лишнее просто нет времени щас. удачи


Последний раз редактировалось in4core; 25.03.2010 в 17:15.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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