日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

音乐MP3文件剪切 与 两个MP3文件合并

發布時間:2024/3/26 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 音乐MP3文件剪切 与 两个MP3文件合并 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對Mp3文件剪切,剪切速度非常非常快。不到一秒

/**\* @param inputPath 原音樂路徑* @param outputPath 新音樂路徑* @param start 剪裁開始位置 單位毫秒* @param end 剪裁結束位置 單位毫秒* @return*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN)public boolean clip(String inputPath, String outputPath, int start, int end){MediaExtractor extractor = null;BufferedOutputStream outputStream = null;try {extractor = new MediaExtractor();extractor.setDataSource(inputPath);int track = getAudioTrack(extractor);if(track < 0){return false;}//選擇音頻軌道extractor.selectTrack(track);outputStream = new BufferedOutputStream(new FileOutputStream(outputPath), SAMPLE_SIZE);start = start * 1000;end = end * 1000;//跳至開始裁剪位置extractor.seekTo(start, MediaExtractor.SEEK_TO_PREVIOUS_SYNC);while (true){ByteBuffer buffer = ByteBuffer.allocate(SAMPLE_SIZE);int sampleSize = extractor.readSampleData(buffer, 0);long timeStamp = extractor.getSampleTime();if(timeStamp > end && timeStamp - end >= 1000000){Toast.makeText(CutMusicActivity.this,"剪切完畢",Toast.LENGTH_SHORT).show();break;}if(sampleSize <= 0){break;}byte[] buf = new byte[sampleSize];buffer.get(buf, 0, sampleSize);//寫入文件outputStream.write(buf);//音軌數據往前讀extractor.advance();}} catch (IOException e) {e.printStackTrace();}finally {if(extractor != null){extractor.release();}if(outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}return true;}/*** 獲取音頻數據軌道* @param extractor* @return*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private static int getAudioTrack(MediaExtractor extractor) {for(int i = 0; i < extractor.getTrackCount(); i++){MediaFormat format = extractor.getTrackFormat(i);String mime = format.getString(MediaFormat.KEY_MIME);if(mime.startsWith("audio")){return i;}}return -1;}

兩個MP3文件合并

/*** @param path Mp301路徑* @param path1 Mp302路徑* @param compoundName 合成完畢的路徑* @return* @throws IOException*/public static String heBingMp3(String path, String path1, String compoundName) throws IOException {String fenLiData = fenLiData(path);String fenLiData2 = fenLiData(path1);File file = new File(fenLiData);File file1 = new File(fenLiData2);//生成處理后的文件File file2 = new File(compoundName);FileInputStream in = new FileInputStream(file);FileOutputStream out = new FileOutputStream(file2);byte bs[] = new byte[1024 * 4];int len = 0;//先讀第一個while ((len = in.read(bs)) != -1) {out.write(bs, 0, len);}in.close();out.close();//再讀第二個in = new FileInputStream(file1);out = new FileOutputStream(file2, true);//在文件尾打開輸出流byte bs1[] = new byte[1024 * 4];while ((len = in.read(bs1)) != -1) {out.write(bs1, 0, len);}in.close();out.close();if (file.exists()) file.delete();if (file1.exists()) file1.delete();return file2.getAbsolutePath();}private static String fenLiData(String path) throws IOException {File file = new File(path);// 原文件File file1 = new File(path + "01");// 分離ID3V2后的文件,這是個中間文件,最后要被刪除File file2 = new File(path + "001");// 分離id3v1后的文件RandomAccessFile rf = new RandomAccessFile(file, "rw");// 隨機讀取文件FileOutputStream fos = new FileOutputStream(file1);byte ID3[] = new byte[3];rf.read(ID3);String ID3str = new String(ID3);// 分離ID3v2if (ID3str.equals("ID3")) {rf.seek(6);byte[] ID3size = new byte[4];rf.read(ID3size);int size1 = (ID3size[0] & 0x7f) << 21;int size2 = (ID3size[1] & 0x7f) << 14;int size3 = (ID3size[2] & 0x7f) << 7;int size4 = (ID3size[3] & 0x7f);int size = size1 + size2 + size3 + size4 + 10;rf.seek(size);int lens = 0;byte[] bs = new byte[1024 * 4];while ((lens = rf.read(bs)) != -1) {fos.write(bs, 0, lens);}fos.close();rf.close();} else {// 否則完全復制文件int lens = 0;rf.seek(0);byte[] bs = new byte[1024 * 4];while ((lens = rf.read(bs)) != -1) {fos.write(bs, 0, lens);}fos.close();rf.close();}RandomAccessFile raf = new RandomAccessFile(file1, "rw");byte TAG[] = new byte[3];raf.seek(raf.length() - 128);raf.read(TAG);String tagstr = new String(TAG);if (tagstr.equals("TAG")) {FileOutputStream fs = new FileOutputStream(file2);raf.seek(0);byte[] bs = new byte[(int) (raf.length() - 128)];raf.read(bs);fs.write(bs);raf.close();fs.close();} else {// 否則完全復制內容至file2FileOutputStream fs = new FileOutputStream(file2);raf.seek(0);byte[] bs = new byte[1024 * 4];int len = 0;while ((len = raf.read(bs)) != -1) {fs.write(bs, 0, len);}raf.close();fs.close();}if (file1.exists()) {file1.delete();}return file2.getAbsolutePath();}

?

總結

以上是生活随笔為你收集整理的音乐MP3文件剪切 与 两个MP3文件合并的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产av剧情一区二区三区 | 亚洲国产欧美一区二区三区深喉 | 最近中文字幕一区二区 | 日本三级日本三级日本三级极 | 九九热九九热 | 91高清免费视频 | 日韩国产欧美精品 | 女同互舔视频 | 亚洲69| 亚洲av无码一区二区三区人妖 | 日本黄在线观看 | 一曲二曲三曲在线观看中文字幕动漫 | 东京热一本视频一区 | av播播| 黄色录像毛片 | 精品国产一区在线 | xxxx18国产| www.欧美国产 | 一级黄色大全 | 夜色一区二区 | xx久久| 一区二区免费在线播放 | 乐播av一区二区三区 | 国产 日韩 欧美 制服丝袜 | 一级免费观看 | 亚洲男女在线 | 中文视频在线观看 | 亚洲高清视频在线 | 青青久久av | 亚洲黄色成人网 | 美国一区二区三区 | 男人午夜网站 | 91肉色超薄丝袜脚交一区二区 | 婷婷深爱激情 | 久久综合中文字幕 | 成人福利在线播放 | 日韩精品一区二区三区色欲av | 三级视频在线观看 | 久久久久久国产视频 | 欧美日韩大陆 | 日干夜操 | 日韩av毛片在线观看 | 特级西西444www高清大胆 | 涩色视频 | 欧美一区二区三区久久精品 | 深夜成人福利 | 夫妻啪啪呻吟x一88av | 中文字幕无码乱码人妻日韩精品 | www狠狠干| 在线观看免费视频黄 | 青草福利在线 | 国产一区二区在 | 欧美成人69 | 色婷婷av一区二区三区四区 | 天堂在线成人 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲成人一区二区三区 | 波多野结衣一区二区三区四区 | 精品一区二区av | 精品国产不卡 | 午夜精品视频在线观看 | 99久久人妻无码中文字幕系列 | 日韩av免费在线看 | 在线不卡视频 | 在线观看亚洲欧美 | 一区二区国产电影 | 四虎图库 | 欧美1| 99成人精品视频 | 国内精品国产三级国产aⅴ久 | 亚洲天堂网站 | 日本美女毛片 | 日韩精品在线观看一区 | 青青草原国产视频 | 波多野结衣1区 | 亚洲成人福利 | 日本xx视频免费观看 | 超碰激情在线 | 青青草视频国产 | 国产一二区在线观看 | 欧美手机在线观看 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 国产美女作爱全过程免费视频 | 99热这里只有精 | 亚洲一区免费在线 | 激情婷婷小说 | 亚洲深夜福利视频 | 国产视频资源 | 99热99在线| 亚洲毛片一区 | 久久成人免费视频 | 成人h视频在线观看 | 中字幕视频在线永久在线观看免费 | 色噜噜狠狠一区二区三区 | 国产精品免费观看视频 | 开心激情播播网 | 国产香蕉精品视频 | 久久一区二区三区四区五区 | 亚洲伦理在线观看 |