MP3 dosyaları, dosyanın başında veya sonunda yer alan, kaydı tanımlayan meta verileri içeren bölümler olan ID3 etiketlerine sahip olabilir. ID3 etiket biçiminin farklı sürümleri vardır. Bu örnek, en basit ID3 biçimini içeren (ID3 sürüm 1.0) MP3 dosyasından, dosyadaki rastgele konumlara okuma ve yazma işleminin gerçekleştirildiği anlamına gelen "dosya verilerine rastgele erişim" kullanılarak nasıl veri okunacağını ve yazılacağını gösterir.
ID3 sürüm 1 etiketini içeren bir MP3 dosyası, ID3 verilerini dosyanın sonunda, son 128 baytta içerir.
Bir dosyaya rastgele okuma/yazma erişimi için erişirken,
open()
veya
openAsync()
yönteminin
fileMode
parametresi olarak
FileMode.UPDATE
öğesini belirtmek gerekir:
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
Böylece dosyaya hem okur hem de yazarsınız.
Dosyayı açtıktan sonra,
position
işaretçisini, dosyanın sonundan 128 bayt önce konumuna getirebilirsiniz:
fileStr.position = file.size - 128;
Bu kod
position
özelliğini dosyada bu konuma ayarlar, çünkü ID3 v1.0 biçimi, ID3 etiket verilerinin dosyanın son 128 baytında saklandığını belirtir. Bu belirtim ayrıca şunu da gösterir:
-
Etiketin ilk 3 baytı
"TAG"
dizesini içerir.
-
Sonraki 30 karakter, bir dize olarak MP3 parçasının başlığını içerir.
-
Sonraki 30 karakter, bir dize olarak sanatçının adını içerir.
-
Sonraki 30 karakter, bir dize olarak albümün adını içerir.
-
Sonraki 4 karakter, bir dize olarak yılı içerir.
-
Sonraki 30 karakter, bir dize olarak yorumu içerir.
-
Sonraki bayt, parçanın türünü belirten bir kod içerir.
-
Tüm metin verileri ISO 8859-1 biçimindedir.
id3TagRead()
yöntemi, okunduktan sonra verileri kontrol eder (
complete
olayından sonra):
function id3TagRead():void
{
if (fileStr.readMultiByte(3, "iso-8859-1").match(/tag/i))
{
var id3Title:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Artist:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Album:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Year:String = fileStr.readMultiByte(4, "iso-8859-1");
var id3Comment:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3GenreCode:String = fileStr.readByte().toString(10);
}
}
Ayrıca dosyada rastgele erişimli yazma işlemi de gerçekleştirebilirsiniz. Örneğin
id3Title
değişkenini baş harfinin doğru şekilde büyütüldüğünden emin olmak için ayrıştırabilirsiniz (String sınıfının yöntemlerini kullanarak) ve ardından aşağıdaki gibi, dosyaya
newTitle
adlı değiştirilmiş bir dize yazabilirsiniz:
fileStr.position = file.length - 125; // 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
ID3 sürüm 1 standardına uymak için,
newTitle
dizesinin uzunluğu, sonunda karakter kodu 0 ile tamponlu 30 karakter olmalıdır (
String.fromCharCode(0)
).