2

На форуме изифлеша был интересный вопрос, как прочитать русские id3 теги из mp3. Автор в принципе нашел решение, только не верно указал кодировку. Немного полазив в нете оказалось, что эти теги записываются в кодировке ISO-8859-1. А я по такому случаю написал маленький класс с статической функцией, которая преобразовывает текст из кодировки ISO-8859-1 в кодировку windows-1251.

А вот код класса:

package  
{
	import flash.utils.ByteArray;
 
	/**
	 * @author	Maxim Sidorkin aka hitab
	 * @site	http://byflasher.com/
	 */
 
	public class id3Rus 
	{
 
		public function id3Rus() 
		{
 
		}
 
		/*
		 * Функция возвращает русское название переданного в нее свойства id3 тега
		 * Т.н. передаем в функцию название песни, автора или любое другое свойства id3 тега
		 * и получаем нормальную строчку с русскими буквами
		 */
		static public function convert(s:String):String
		{
			// Создаем битовый массив
			var ba:ByteArray = new ByteArray();
			// Записываем в него значение строки в указанной кодировке
			ba.writeMultiByte(s, "ISO-8859-1");
			// Выставляем 0 позицию
			ba.position = 0;
			// Возвращаем строку в нормальной кодировке
			return ba.readMultiByte(ba.length, 'windows-1251'); 
 
		}
 
	}
 
}

Чтобы протестировать киньте этот код в класс рядом с fla и в нем в первом кадре вбейте нижеприведенный код и измените путь к mp3-шке

 import id3Rus;
 
var snd:Sound = new Sound();
// любая mp3 с русским исполнителем и/или названием песни
snd.load(new URLRequest("some.mp3"));
 
snd.play();
 
 
snd.addEventListener(Event.ID3, id3Handler)
 
//чтение тэгов
function id3Handler(event:Event):void 
{
	trace("До конвертации \t" + snd.id3.artist  + " - " + snd.id3.songName);
 
	trace("После конвертации \t" + id3Rus.convert(snd.id3.artist  + " - " + snd.id3.songName));
 
	trace();
}

p.s. почему функция id3Handler выполняется 2 раза не знаю =/


Отзывов (2) на «Русские id3 теги во флеше as3»

  1. tahau

    id3Handler выполняется дважды, если в файле прописаны id3-тэги и первой, и второй версии. Тогда флеш их дважды читает.

  2. byflasher

    спасибо, теперь буду знать =)


Трекбеки/Пинги


Ваш отзыв