zoukankan      html  css  js  c++  java
  • 音频拼接的简单实现方法(python一种,java两种)

    音频拼接,就是5s+5s=10s的这种拼接。

    需要修改的地方都是有三处,在代码里标注好了。

    一、Python实现:

    Python3

    #!/usr/bin/env python 
    # -*- coding:utf-8 -*-
    # ok,音频拼接
    from pydub import AudioSegment  # 先导入这个模块
    # 加载需要合并的两个mp3音频
    parameters = None
    input_music_1 = AudioSegment.from_mp3("D:/4.mp3") #需要修改的地方:音频1
    input_music_2 = AudioSegment.from_mp3("D:/5.mp3")#需要修改的地方:音频2
    #获取两个音频的响度(音量)
    input_music_1_db = input_music_1.dBFS
    input_music_2_db = input_music_2.dBFS
    # 获取两个音频的时长,单位为毫秒
    input_music_1_time = len(input_music_1)
    input_music_2_time = len(input_music_2)
    # 调整两个音频的响度一致
    
    # 合并音频
    output_music = input_music_1 + input_music_2
    # 简单输入合并之后的音频
    output_music.export("D:/output_music.mp3", format="mp3")# 前面是保存路径,后面是保存格式
    #复杂输入合并之后的音频
    # bitrate:比特率,album:专辑名称,artist:歌手,cover:封面图片
    #需要修改的地方:输出音频。cover那个没用着,可以删掉。
    output_music.export("D:/output_music.mp3", format="mp3", bitrate="192k", tags={"album": "专辑", "artist": "歌手"}, cover="D:/1.jpg")
    print(len(output_music), output_music.channels)# 合并音频的时长,音频的声道,1是单声道,2是立体声
    

      二、java实现

    1、第一种

    package com.fish;
    //ok,也是拼接!!!
    import java.io.*;
    import java.util.*;
    
    public class Test
    {
        public static void main(String[] args) throws Exception
        {
            String s = "D:/out.mp3"; // 输出目录 & 文件名
            List<String> list = new ArrayList<String>();
            File dir = new File("D:/aaa"); // 把两个mp3文件放在这个文件夹下面。这是要遍历的目录, 用递归拿文件,.
            recursion(dir.listFiles(), list); // 递归函数
            String[] ss = new String[list.size()];
            for (int i = 0; i < ss.length; i++)
            {
                ss[i] = list.get(i);
            }
            System.out.println();
            combine(s, ss);
        }
        public static void recursion(File[] fs, List<String> list) // 递归得所有子目录的.mp3文件.
        {
            for (File f : fs)
            {
                if (f.isDirectory())
                {
                    recursion(f.listFiles(), list);
                }
                else
                {
                    if (f.getName().endsWith(".mp3"))
                    {
                        list.add(f.getAbsolutePath());
                    }
                }
            }
        }
        private static boolean combine(String outFile, String[] inFiles) throws Exception
        {
            File out = new File(outFile);
            File[] files = new File[inFiles.length];
            for (int i = 0; i < files.length; i++)
            {
                files[i] = new File(inFiles[i]);
            }
            FileInputStream fis = null;
            FileOutputStream fos = new FileOutputStream(outFile, true); // 合并其实就是文件的续写,写成true
            for (int i = 0; i < files.length; i++)
            {
                fis = new FileInputStream(files[i]);
                int len = 0;
                for (byte[] buf = new byte[1024 * 1024]; (len = fis.read(buf)) != -1;)
                {
                    fos.write(buf, 0, len);
                }
            }
            fis.close();
            fos.close();
            return true;
        }
    }
    

      2、第二种

    package com.fish;
    //ok,又是音频拼接!
    /**
     * @Classname Test2
     * @Description TODO
     * @Data 2020/4/8   22:11
     * @Created by Amy
     */
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    public class Test2 {
    
    public static void main(String args[]) throws Exception{
    
     File f1 = new File("D:/4.mp3");
     File f2 = new File("D:/5.mp3");
    File f3 = new File("D:/8.mp3");//输出音频
    
    FileInputStream inpu1 = new FileInputStream(f1);
    FileInputStream inpu2 = new FileInputStream(f2);
    FileOutputStream out = new FileOutputStream(f3);
    
    byte b[] = new byte[1024];
    int len=0;
    
    //把f1的内容流到f3中
    while ((len = inpu1.read(b))!= -1)
    {
    for(int i = 0;i < len;i++)
    {
    out.write(b[i]);
    }
    }
    inpu1.close();
    
    //在刚才的后面流f2到f3中
    while ((len = inpu2.read(b))!= -1)
    {
    for(int i = 0;i<len;i++){
    out.write (b[i]);
    }
    }
    System.out.println("合并完成");
    out.write(b);
    inpu2.close();
    out.close();
    }
    }
    

     

    -----------------------------------------------------------------------------------

    这几天因为写论文做作业什么的,写博客都不爱叨逼叨了= =

  • 相关阅读:
    Django对静态文件的处理——部署阶段
    使用Django来处理对于静态文件的请求
    Django1.7如何配置静态资源访问
    Spring WebSocket中403错误解决
    FastJSON JSONObject 字段排序 Feature.OrderedField
    国际化(i18n) 各国语言缩写
    【转】java.io.Closeable接口
    【转】spring bean 卸载
    This content should also be served over HTTPS
    Failed to close the ServletOutputStream connection cleanly, Broken pipe
  • 原文地址:https://www.cnblogs.com/Amy-is-a-fish-yeah/p/12670092.html
Copyright © 2011-2022 走看看