如何從ios酷我音樂盒中匯出已下載的音樂檔案(使用Java編程實現),iosjava

來源:互聯網
上載者:User

如何從ios酷我音樂盒中匯出已下載的音樂檔案(使用Java編程實現),iosjava
如何從ios酷我音樂盒中匯出已下載的音樂檔案
本文所涉及內容用於技術學習,請勿用於不正當用途,否則後果自負。
酷我音樂ios版下載的音樂檔案,通過同步助手等軟體查看時,發現音樂檔案都是一串數字命名。通過網上尋找和自己嘗試,發現那些檔案都是音頻檔案改了檔案名稱而已。只要修改迴文件名,就能和正常的音樂一樣播放了。
參考網址:http://blog.sina.com.cn/s/blog_4d5428240101enzu.html
在網上找到了一個軟體,也就是上面參考網址中的軟體,但是使用的時候出現了問題,提示subscript out of range,程式不能繼續執行。於是就決定自己用Java寫一個來處理。
首先從手機複製出cloud.db資料庫檔案,為SQLite資料庫檔案。用SQLite Database Browser開啟,看到裡面和音樂關係比較密切的主要有三個table,playlistsInfo中儲存著播放清單資訊,欄位title為列表名稱,欄位id為列表id。playlistMusics儲存了音樂和播放清單的對應關係,欄位title、artist等為音樂資訊,rid為音樂資源id,欄位playlist_id對應了所屬播放清單id。musicResource中是音樂資訊和檔案對應關係,欄位file為對應的檔案名稱,format為檔案格式,rid為音樂資源id。

於是程式的工作流程是這樣的:1、首先從musicResource逐一讀取每首音樂的rid;2、通過rid在playlistMusics中尋找playlist_id,可能找不到,也可能不止一個,因為同一首音樂可能在多個列表中,這裡簡單的取最大的playlist_id,通常應該是相對比較新的播放清單;3、然後在playlistsInfo中找到playlist_id對應的播放清單名,作為目標音樂的子檔案夾;4、最後把源檔案重新命名為“歌手名 - 歌曲名.副檔名”,並移動到目標檔案夾即可。
為方便交流學習,這裡提供本程式源碼。

import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import java.util.List;public class Test {/** * 儲存播放清單的資料結構 *  * @author jzj */static class PlayList {int id;String name;public PlayList(String name, int id) {this.name = name;this.id = id;}}// 資料庫完整路徑static final String db_path = "G:\\IOS\\cloud.db";// 源檔案夾static final String src_dir = "G:\\IOS\\Music\\";// 目標檔案夾static final String dst_dir = "G:\\IOS\\Music1\\";public static void main(String[] args) throws Exception {Class.forName("org.sqlite.JDBC");Connection conn = DriverManager.getConnection("jdbc:sqlite:" + db_path);Statement stat1 = conn.createStatement();Statement stat2 = conn.createStatement();// 讀取播放清單List<PlayList> lists = new ArrayList<Test.PlayList>();ResultSet rs_list = stat1.executeQuery("select * from playlistsInfo;");while (rs_list.next()) {final int id = rs_list.getInt("id");final String name = rs_list.getString("title");switch (name) {// 忽略這幾個列表case "本地歌曲":case "預設列表":case "最近播放":case "我的電台":break;case "我喜歡聽":default:lists.add(new PlayList(name, id));}}// 讀取音樂資訊ResultSet rs_res = stat1.executeQuery("select * from musicResource;");while (rs_res.next()) {// 源檔案路徑String fname = rs_res.getString("file");if (fname == null || fname.length() == 0) // 如果file欄位為空白則跳過continue;String src_path = src_dir + fname;File src = new File(src_path);if (!src.exists()) // 如果源檔案不存在則跳過continue;// 擷取音樂ridint rid = rs_res.getInt("rid");// 尋找該音樂所在播放清單id, 如果沒有找到則為-1ResultSet rs_pl = stat2.executeQuery(new StringBuilder("select playlist_id from playlistMusics where rid=").append(rid).append(';').toString());int playlist_id = -1;while (rs_pl.next()) { // 預設將一首歌放在編號最大的播放清單中(也就是最新建立的列表)int p_id = rs_pl.getInt("playlist_id");if (p_id > playlist_id)playlist_id = p_id;}rs_pl.close();// 目標檔案夾路徑StringBuilder b2 = new StringBuilder(dst_dir);if (playlist_id >= 0) {String playlist_name = getPlaylist(lists, playlist_id);if (playlist_name != null) {b2.append(playlist_name).append('\\');}}String dir = b2.toString();new File(dir).mkdirs();// 目標檔案名: "藝術家 - 歌曲名.副檔名"StringBuilder b3 = new StringBuilder();b3.append(rs_res.getString("artist")).append(" - ").append(rs_res.getString("title")).append('.').append(rs_res.getString("format"));String dst_path = dir + b3.toString();// 移動和重新命名File dst = new File(dst_path);src.renameTo(dst);// 輸出資訊System.out.println(new StringBuilder(src_path).append(" ---> ").append(dst_path));}rs_res.close();conn.close();}static String getPlaylist(List<PlayList> lists, int playlist_id) {for (PlayList pl : lists) {if (pl.id == playlist_id)return pl.name;}return null;}}


由於涉及資料庫操作,需要在Java工程中添加資料庫支援包,可參看這篇文章 http://ttitfly.iteye.com/blog/143934使用nested包:sqlitejdbc-v037-nested.jar
將音頻檔案全部複製出來,放到程式中src_dir所指定的目錄,資料庫檔案cloud.db儲存在db_path指定的位置,設定好目標檔案夾dst_dir,執行程式即可整流匯出的音頻檔案,實測700多首音樂,只需不到一分鐘時間即可完成重新命名和移動工作。
完整工程可在此下載:http://pan.baidu.com/s/1hGNT0

從ios版的酷我音樂盒把音樂匯出後在電腦上顯示 1129 1134 1246 等格式,用播放器可以播放

1,電腦的播放器是否也是酷我?如果是,換個別的試試。2,你確定開啟顯示檔案尾碼的開關了?
 
ios酷我音樂盒怎下載視頻

用itunes下載上傳~
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.