最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用IO流實現(xiàn)音頻的剪切和拼接

 更新時間:2017年06月03日 11:22:55   作者:沐易笙  
這篇文章主要為大家詳細(xì)介紹了Java使用IO流實現(xiàn)音頻的剪切和拼接,具有一定的參考價值,感興趣的小伙伴們可以參考一下

需求: 使用IO流將指定目錄下的若干個音頻文件的高潮部分,進行剪切,并重新拼接成一首新的音頻文件 

思路(以兩首歌為例):

  第一首歌有一個輸入流對象bis1。第二首歌有一個輸入流對象bis2,他們公用一條輸出流對象bos(在選擇構(gòu)造方法的時候選擇含有布爾類型參數(shù)的那個),待第一首歌剪切完成后,在此基礎(chǔ)上追加第二首歌的“高潮部分”。

實現(xiàn)代碼:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * 音樂剪切和拼接(音樂串燒)
 * @author 
 *
 */
public class CutMusic {

 public static void main(String[] args) {
  //f1,f2分別為需要剪切的歌曲路徑
   File f1 = new File("E:\\CutMusicTest\\殘酷月光(Cover:林宥嘉).mp3");
  File f2 = new File("E:\\CutMusicTest\\慢慢.mp3");
  //f為合并的歌曲
  File f = new File("E:\\CutMusicTest\\MergeMusic.mp3");
  cut1(f1,f2,f);
 }
 
 public static void cut1(File f1,File f2,File f){
  BufferedInputStream bis1 = null;
  BufferedInputStream bis2 = null;
  BufferedOutputStream bos = null;
  //第一首歌剪切部分起始字節(jié)
  int start1 = 2375680;//320kbps(比特率)*58s*1024/8=2375680 比特率可以查看音頻屬性獲知
  int end1 = 4915200;//320kbps*120s*1024/8=4915200
  
  //第二首歌剪切部分起始字節(jié),計算方式同上
  int start2 = 3686400;
  int end2 = 5324800;
  
  int tatol1 = 0;
  int tatol2 = 0;
  try {
   //兩個輸入流
   bis1 = new BufferedInputStream(new FileInputStream(f1));
   bis2 = new BufferedInputStream(new FileInputStream(f2));
   //緩沖字節(jié)輸出流(true表示可以在流的后面追加數(shù)據(jù),而不是覆蓋!?。?
   bos = new BufferedOutputStream(new FileOutputStream(f,true));
   
   //第一首歌剪切、寫入
   byte[] b1= new byte[512];
   int len1 = 0;
   while((len1 = bis1.read(b1))!=-1){
    tatol1+=len1;   //累積tatol
    if(tatol1<start1 ){  //tatol小于起始值則跳出本次循環(huán)
     continue;
    }
    bos.write(b1);   //寫入的都是在我們預(yù)先指定的字節(jié)范圍之內(nèi)
    if(tatol1>=end1 ){  //當(dāng)tatol的值超過預(yù)先設(shè)定的范圍,則立刻刷新bos流對象,并結(jié)束循環(huán)
     bos.flush();
     break;
    }
    
   }
   System.out.println("第一首歌剪切完成!");
   
   //第二首歌剪切、寫入,原理同上
   byte[] b2= new byte[512];
   int len2 = 0;
   while((len2 = bis2.read(b2))!=-1){
    tatol2 += len2; 
    if(tatol2 < start2){ 
     continue;
    }
    bos.write(b2);  
    if(tatol2>=end2){ 
     bos.flush();
     break;
    }
    
   }
   System.out.println("第二首歌剪切完成!");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
    try {//切記要關(guān)閉流!!
     if(bis1!=null) bis1.close();
     if(bis2!=null) bis2.close();
     if(bos!=null) bos.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
 }

}

獲取音頻文件比特率的方式:

運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JDK基于CAS實現(xiàn)原子類盤點解析

    JDK基于CAS實現(xiàn)原子類盤點解析

    這篇文章主要為大家介紹了JDK基于CAS實現(xiàn)原子類盤點解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 詳解mybatis generator代碼生成器的使用

    詳解mybatis generator代碼生成器的使用

    MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代碼生成器。這篇文章主要介紹了mybatis generator代碼生成器的使用,需要的朋友可以參考下
    2021-09-09
  • SpringBoot自定義注解及AOP的開發(fā)和使用詳解

    SpringBoot自定義注解及AOP的開發(fā)和使用詳解

    在公司項目中,如果需要做一些公共的功能,如日志等,最好的方式是使用自定義注解,自定義注解可以實現(xiàn)我們對想要添加日志的方法上添加,這篇文章基于日志功能來講講自定義注解應(yīng)該如何開發(fā)和使用,需要的朋友可以參考下
    2023-08-08
  • Linux服務(wù)器Java進程消失問題解決

    Linux服務(wù)器Java進程消失問題解決

    這篇文章主要介紹了Linux服務(wù)器Java進程消失問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • springboot中使用rabbitt的詳細(xì)方法

    springboot中使用rabbitt的詳細(xì)方法

    這篇文章主要介紹了springboot中使用rabbitt,通過本文學(xué)習(xí)讓我們了解如何在Spring Boot中使用RabbitMQ,并使用不同的交換機和隊列類型以及消息確認(rèn)模式,需要的朋友可以參考下
    2023-05-05
  • Spring Boot使用Log4j2的實例代碼

    Spring Boot使用Log4j2的實例代碼

    這篇文章主要介紹了Spring Boot使用Log4j2的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 使用Spring AOP實現(xiàn)MySQL數(shù)據(jù)庫讀寫分離案例分析(附demo)

    使用Spring AOP實現(xiàn)MySQL數(shù)據(jù)庫讀寫分離案例分析(附demo)

    分布式環(huán)境下數(shù)據(jù)庫的讀寫分離策略是解決數(shù)據(jù)庫讀寫性能瓶頸的一個關(guān)鍵解決方案,這篇文章主要介紹了使用Spring AOP實現(xiàn)MySQL數(shù)據(jù)庫讀寫分離案例分析(附demo),有興趣的可以了解一下。
    2017-01-01
  • Spring中的JdbcTemplate詳細(xì)解析

    Spring中的JdbcTemplate詳細(xì)解析

    這篇文章主要介紹了Spring中的JdbcTemplate詳細(xì)解析,JdbcTemplate是Spring框架中提供的一個對象,是對原始繁瑣的Jdbc API對象的簡單封裝,Spring框架為我們提供了很多的操作模板類,需要的朋友可以參考下
    2024-01-01
  • 分享Spring的下載組件

    分享Spring的下載組件

    這篇文章主要為大家分享了Spring的下載組件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java使用雪花id生成算法詳解

    Java使用雪花id生成算法詳解

    SnowFlake算法,是Twitter開源的分布式id生成算法,在2014年開源,開源的版本由scala編寫。其核心思想就是-使用一個64bit的long型的數(shù)字作為全局唯一id
    2022-12-12

最新評論

靖边县| 浮山县| 大新县| 清徐县| 阜阳市| 吉安县| 绩溪县| 石城县| 桐城市| 安义县| 依兰县| 应用必备| 樟树市| 天台县| 武义县| 溧阳市| 东光县| 潞西市| 罗定市| 开原市| 忻城县| 灵丘县| 静乐县| 桂阳县| 兰坪| 巫山县| 松潘县| 邳州市| 资中县| 河西区| 滁州市| 沐川县| 当阳市| 冕宁县| 广灵县| 武夷山市| 六枝特区| 宁阳县| 安顺市| 河间市| 乾安县|