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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

利用jave2进行音频处理

發布時間:2023/12/13 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 利用jave2进行音频处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很多朋友都知道,ffmpeg是一個功能強大的多媒體處理工具,可惜它并不是java語言開發,如果需要在java項目中使用時,得自己寫很多代碼,幸好github上有一個開源項目jave2把ffmpeg做了封裝,很大程度上簡化了開發,使用方法如下:

先添加依賴項

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
    <version>3.1.1</version>
</dependency>

以下是一些常用示例:

1、獲取音頻文件的編碼信息

   MultimediaInfo getMediaInfo() {
        String sourceFilePath = "/Users/jimmy/Downloads/bgm.wav";
        File file = new File(sourceFilePath);
        if (file != null && file.exists()) {
            try {
                MultimediaObject multimediaObject = new MultimediaObject(file);
                MultimediaInfo m = multimediaObject.getInfo();
                return m;
            } catch (Exception e) {
                e.printStackTrace();

            }
        }
        return null;
    }

System.out.println(getMediaInfo());輸出如下:

ws.schild.jave.info.MultimediaInfo (format=wav (metadata={encoder=Lavf58.27.103}, duration=101850, video=null, audio=ws.schild.jave.info.AudioInfo (decoder=pcm_s16le ([1][0][0][0] / 0x0001), samplingRate=44100, channels=2, bitRate=1411000))

從上面可以看出,該文件是wav格式,時長為101.850秒,編碼格式為pcm_s16le,采集率為44100,雙聲道,bit率為1411000

2、wav轉mp3

boolean convert2Mp3() {
        String sourceFilePath = "/Users/jimmy/Downloads/bgm.wav";
        String targetFilePath = "/Users/jimmy/Downloads/bgm.mp3";
        try {
            File source = new File(sourceFilePath);
            File target = new File(targetFilePath);

            //Audio Attributes
            AudioAttributes audio = new AudioAttributes();
            audio.setCodec("libmp3lame");
            audio.setBitRate(64000);
            audio.setChannels(2);
            audio.setSamplingRate(44100);

            //Encoding attributes
            EncodingAttributes attrs = new EncodingAttributes();
            attrs.setInputFormat("wav");
            attrs.setOutputFormat("mp3");
            attrs.setAudioAttributes(audio);

            //Encode
            Encoder encoder = new Encoder();
            encoder.encode(new MultimediaObject(source), target, attrs);

        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

  

3、轉換編碼格式

    static boolean changeCode() {
        String sourceFilePath = "/Users/jimmy/Downloads/bgm.wav";
        String targetFilePath = "/Users/jimmy/Downloads/bgm_2.wav";

        //Audio Attributes
        AudioAttributes audio = new AudioAttributes();
        audio.setCodec("pcm_u8");
        audio.setBitRate(64000);
        audio.setChannels(2);
        audio.setSamplingRate(8000);

        //Encoding attributes
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setInputFormat("wav");
        attrs.setOutputFormat("wav");
        attrs.setAudioAttributes(audio);

        //Encode
        Encoder encoder = new Encoder();
        try {
            encoder.encode(new MultimediaObject(new File(sourceFilePath)), new File(targetFilePath), attrs);

            //輔助輸出,觀察編碼格式的變化
            MultimediaObject srcObj = new MultimediaObject(new File(sourceFilePath));
            MultimediaObject targetObj = new MultimediaObject(new File(targetFilePath));
            System.out.println(srcObj.getInfo());
            System.out.println(targetObj.getInfo());
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

第7行,設置了新的編碼pcm_u8

4、分離左右聲道

boolean splitChannel() {
        String source = "/Users/jimmy/Downloads/bgm.wav";
        String left = "/Users/jimmy/Downloads/bgm_left.wav";
        String right = "/Users/jimmy/Downloads/bgm_right.wav";
        File leftFile = new File(left);
        File rightFile = new File(right);
        if (leftFile.exists()) {
            leftFile.delete();
        }

        if (rightFile.exists()) {
            rightFile.delete();
        }
        DefaultFFMPEGLocator locator = new DefaultFFMPEGLocator();
        ProcessWrapper ffmpeg = locator.createExecutor();
        ffmpeg.addArgument("-i");
        ffmpeg.addArgument(source);
        ffmpeg.addArgument("-map_channel");
        ffmpeg.addArgument("0.0.0");
        ffmpeg.addArgument(left);
        ffmpeg.addArgument("-map_channel");
        ffmpeg.addArgument("0.0.1");
        ffmpeg.addArgument(right);
        BufferedReader br = null;
        try {
            ffmpeg.execute();
            br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()));
            String line;
            while ((line = br.readLine()) != null) {
                //輸出處理過程中的日志(輔助觀察處理過程)
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            //輔助輸出,觀察編碼格式的變化
            MultimediaObject srcObj = new MultimediaObject(leftFile);
            MultimediaObject targetObj = new MultimediaObject(rightFile);
            System.out.println(srcObj.getInfo());
            System.out.println(targetObj.getInfo());
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return true;
    }

聲道分離后,會生成2個文件,分別對應于左右聲道。

  

5、拼接音頻(比如:把某段音頻重復N次,合成1個新音頻)

boolean mergeAudio() {
//        ffmpeg -i bullet.wav -i bullet.wav -i bullet.wav -filter_complex '[0:0] [1:0] concat=n=3:v=0:a=1 [a]' -map [a] bullet_3.wav

        //先生成要拼接的音頻清單
        int times = 5;

        String src = "/Users/jimmy/Downloads/bullet.wav";
        String target = "/Users/jimmy/Downloads/bullet_" + times + ".wav";

        File targetFile = new File(target);
        if (targetFile.exists()) {
            targetFile.delete();
        }

        DefaultFFMPEGLocator locator = new DefaultFFMPEGLocator();
        ProcessWrapper ffmpeg = locator.createExecutor();
        for (int i = 1; i <= times; i++) {
            ffmpeg.addArgument("-i");
            ffmpeg.addArgument(src);
        }
        ffmpeg.addArgument("-filter_complex");
        ffmpeg.addArgument("[0:0] [1:0] concat=n=" + times + ":v=0:a=1 [a]");
        ffmpeg.addArgument("-map");
        ffmpeg.addArgument("[a]");

        ffmpeg.addArgument(target);
        BufferedReader br = null;
        try {
            ffmpeg.execute();
            br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()));
            String line;
            while ((line = br.readLine()) != null) {
                //輸出處理過程中的日志(輔助觀察處理過程)
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return true;
    }

  

6、截取音頻中的某一段

void cut() throws EncoderException {
        String src = "/Users/jimmy/Downloads/bgm.wav";
        String target = "/Users/jimmy/Downloads/bgm_1_3.wav";

        File targetFile = new File(target);
        if (targetFile.exists()) {
            targetFile.delete();
        }

        File srcFile = new File(src);
        MultimediaObject srcMultiObj = new MultimediaObject(srcFile);
        MultimediaInfo srcMediaInfo = srcMultiObj.getInfo();

        Encoder encoder = new Encoder();


        EncodingAttributes encodingAttributes = new EncodingAttributes();
        //設置起始偏移量(秒)
        encodingAttributes.setOffset(1.0F);
        //設置切片的音頻長度(秒)
        encodingAttributes.setDuration(2.0F);

        //設置音頻屬性
        AudioAttributes audio = new AudioAttributes();
        audio.setBitRate(srcMediaInfo.getAudio().getBitRate());
        audio.setSamplingRate(srcMediaInfo.getAudio().getSamplingRate());
        audio.setChannels(srcMediaInfo.getAudio().getChannels());

        //如果截取的時候,希望同步調整編碼,可以設置不同的編碼
//        audio.setCodec("pcm_u8");
        audio.setCodec(srcMediaInfo.getAudio().getDecoder().split(" ")[0]);
        encodingAttributes.setInputFormat("wav");
        encodingAttributes.setAudioAttributes(audio);

        //寫文件
        encoder.encode(srcMultiObj, new File(target), encodingAttributes);

    }

  

最后說一個可能會存在的問題:默認情況下,jave2在執行時,會把ffmpeg可執行文件釋放到"java.io.tmpdir"臨時目錄下,但在tomcat等容器下執行時,如果啟用tomcat的用戶,與java應用的執行用戶不同,可能會存在無寫入權限的問題。遇到這種情況,可以先用代碼把java.io.tmpdir這個系統變量,指到其它有權限的目錄,執行完后,再還原回來

 String oldTmpDir = System.getProperty("java.io.tmpdir");
        try {
            System.setProperty("java.io.tmpdir", "有權限寫入的新臨時目錄");
            // todo (jave2的其它處理)
        }  finally {
            System.setProperty("java.io.tmpdir", oldTmpDir);
        }

  

作者:菩提樹下的楊過
出處:http://yjmyzz.cnblogs.com

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

總結

以上是生活随笔為你收集整理的利用jave2进行音频处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产一区二区视频在线观看 | 国产女人高潮的av毛片 | 免费看黄色三级三级 | 青青草原伊人网 | 在线免费看91 | 一级毛片黄片 | 91老女人 | 久草手机在线视频 | 看黄色一级片 | 国外成人免费视频 | 女同另类之国产女同 | asian性开放少妇pics | 国产成人无码av | 一本一本久久a久久精品综合麻豆 | 一本大道久久 | 日韩国产欧美综合 | 免费黄毛片 | 都市激情自拍 | 亚洲在线视频观看 | 欧美老司机 | 大地资源中文第三页 | 国产亚洲AV无码成人网站在线 | jizz日本18| 亲切的金子餐桌片段的金子 | 在线免费观看中文字幕 | 综合久久网 | 国产精品igao| 色七七视频 | 一区二区三区在线不卡 | 成人日韩 | 男人插女人免费视频 | 爱情岛论坛永久入址在线 | 男女午夜网站 | 亚洲AV第二区国产精品 | 在线免费| 超碰九七 | 日韩在线一卡二卡 | 中文字幕性 | 99久久精品免费看国产免费软件 | 美女被艹视频网站 | av在线a | 最新av网址在线观看 | 成人午夜免费观看 | 亚洲一区中文 | 口爆吞精一区二区三区 | 高跟丝袜av | 欧美日一区二区三区 | 无码av天堂一区二区三区 | 黄色片在线 | 狠狠鲁狠狠干 | 欧美日韩在线免费视频 | 日韩美女国产精品 | 天降女子在线 | 黄色aa网站 | 欧美午夜一区 | 99国产在线视频 | 亚洲中文字幕无码专区 | 国产精品观看 | 综合av第一页 | 色图插插插| 视频在线观看视频 | 亚洲在线观看av | 强行侵犯视频在线观看 | 91精品人妻一区二区三区蜜桃欧美 | 国产无遮挡裸体免费视频 | 天天操天天操天天操天天操天天操 | 丁香六月欧美 | 713电影免费播放国语 | 欧美视频精品 | 精品午夜久久久 | 中国二级毛片 | 亚洲第一黄 | 丝袜老师扒开让我了一夜漫画 | 欧美xxxx胸大 | av日韩精品| 一起草在线视频 | 久久精品国产亚洲AV成人雅虎 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 麻豆私人影院 | 国产麻豆精品在线观看 | a级一a一级在线观看 | 少妇黄色片 | 国产aa毛片 | 天堂无乱码 | 男人的天堂国产 | 黄色片www | 久久伊人免费 | 制服丝袜第二页 | 免费成人在线视频观看 | 亚洲午夜精品在线观看 | 专干中国老太婆hd | 91大神小宝寻花在线观看 | 久国产视频 | av首页在线| 亚洲视频精选 | 国产专区一 | 欧美猛男gaygay| 97视频免费看| 日日麻批免费视频播放 |