範例:使用隨機存取權讀取和寫入資料Adobe AIR 1.0 以及更新的版本 MP3 檔案可包含 ID3 標籤,而這些標籤位於檔案 (包含可識別歌曲的中繼資料) 開頭或結尾的區段。ID3 標籤格式本身具有不同的版本。在下列範例中,會說明如何使用「檔案資料的隨機存取權」(表示範例可以在檔案中的任意位置執行存取和寫入作業),對包含最簡單之 ID3 格式 (ID3 1.0 版) 的 MP3 檔案執行讀取和寫入作業。 包含 ID3 標籤第 1 版的 MP3 檔案在檔案結尾處 (最後的 128 位元組中) 包含 ID3 資料。 當存取檔案供隨機讀取/寫入存取時,請務必將 open() 或 openAsync() 方法的 fileMode 參數設定為 FileMode.UPDATE: var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3"); var fileStr:FileStream = new FileStream(); fileStr.open(file, FileMode.UPDATE); 如此,您才可以對檔案執行讀取和寫入作業。 在開啟檔案時,您可以將 position 指標設定為檔案結尾之前 128 個位元組這個位置: fileStr.position = file.size - 128; 上述程式碼會將 position 屬性設定為檔案中的這個位置,因為 ID3 v1.0 格式指定 ID3 標籤資料必須儲存在檔案的最後 128 個位元組中。該版本的規格也規定下列項目:
id3TagRead() 方法會在資料已讀入之後 (complete 事件發生時) 檢查資料: 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); } } 您也可以對檔案執行隨機存取寫入作業。例如,您可以剖析 id3Title 變數,確保它已經透過正確方式改為大寫 (使用 String 類別的方法),接著再將經過修改的字串 (名為 newTitle) 寫入至檔案,如下所示: fileStr.position = file.length - 125; // 128 - 3 fileStr.writeMultiByte(newTitle, "iso-8859-1"); 為了符合 ID3 第 1 版的標準,newTitle 字串的長度必須為 30 個字元,並且在結尾處以字元碼 0 來填補 (String.fromCharCode(0))。 |
|