Bass库Mp3转wav、samplerate/channel修改[通俗易懂]

Bass库Mp3转wav、samplerate/channel修改[通俗易懂]代码地址:https://download.csdn.net/download/qq_14931305/10803169Bass库官网:http://www.un4seen.com/Bass库参考文档:http://www.un4seen.com/doc/#bass/bass.html1.Bass库集成集成请参考我之前的博客:https://blog.csdn.net/qq_149…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

代码地址:https://download.csdn.net/download/qq_14931305/10803169

Bass库官网:http://www.un4seen.com/

Bass库参考文档:http://www.un4seen.com/doc/#bass/bass.html

1.Bass库集成

集成请参考我之前的博客:https://blog.csdn.net/qq_14931305/article/details/84374301

需要注意的是,此处集成还需添加 libbassmix.so

2.Mp3转Wav、Channel/Samplerate修改

无论是Mp3转Wav还是Channel/Samplerate的修改都可采用以下方法,操作步骤都是将文件先转成pcm,然后再转成wav文件

3.代码

  1. BassOperationHelper类核心代码
    static boolean mp3ToPcm(String pathMp3, String pathPcm,int wavSize) {
            if (!BASS.BASS_Init(-1,mSampleRate,0)) {
                Error("cannot BASS_Init");
                return false;
            }
            // 重采样后的流
            int mixedStream = BASSmix.BASS_Mixer_StreamCreate(mSampleRate, mChannels, BASS.BASS_STREAM_DECODE | BASSmix.BASS_MIXER_END);
            if (mixedStream == 0){
                Error("BASS_Mixer_StreamCreate error");
                return false;
            }
            // 原音频流
            int srcStream = BASS.BASS_StreamCreateFile(pathMp3, 0, 0, BASS.BASS_STREAM_DECODE);
            if (srcStream == 0){
                Error("BASS_StreamCreateFile error");
                return false;
            }
    
            //将源音频流加入到Mixer里面,以实现重采样转换  
            boolean flag = BASSmix.BASS_Mixer_StreamAddChannelEx(mixedStream,srcStream,0,0,wavSize);// plug in the source  
            //如果全部转换成wav文件,请采用下面这个方法
            //boolean flag = BASSmix.BASS_Mixer_StreamAddChannelEx(mixedStream,srcStream,0);// plug in the source 
    
            if (!flag){
                Error("BASS_Mixer_StreamAddChannel error");
                return false;
            }
            try {
                // 写到output流
                ByteBuffer byteBuffer = ByteBuffer.allocate(wavSize);
                FileOutputStream fos = new FileOutputStream(pathPcm);
                while (BASS.BASS_ChannelIsActive(mixedStream) != BASS.BASS_ACTIVE_STOPPED)
                {
                    BASS.BASS_ChannelGetData(mixedStream, byteBuffer, byteBuffer.capacity());
                    fos.write(byteBuffer.array());
                }
                BASSmix.BASS_Mixer_ChannelRemove(mixedStream);
                BASSmix.BASS_Mixer_ChannelRemove(srcStream);
                BASS.BASS_Free();
            } catch (IOException e) {
                e.printStackTrace();
                Error(e.getMessage());
                return false;
            }
    
            return true;
        }

     

  2. MainActivity类调用
    private static final String oldFilePath ="/storage/emulated/0/夏季.wav";
        private static final String newFilePath ="/storage/emulated/0/夏季"+System.currentTimeMillis()+".wav";
    
    BassOperationHelper.modifyChannelOrSample(oldFilePath, newFilePath, 1024 * 3000, new BassOperationHelper.Mp3ToWavCallBack() {
                        @Override
                        public void onComplete(boolean isSuccess) {
                            //mp3转pcm
                            Log.e("BassOperationHelper","oldFilePath= "+oldFilePath);
                            Log.e("BassOperationHelper","newFilePath= "+newFilePath);
                            if (isSuccess){
                                Toast.makeText(MainActivity.this,"文件操作成功",Toast.LENGTH_SHORT).show();
                            }else {
                                Toast.makeText(MainActivity.this,"文件操作失败",Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

     

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184364.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卡盟销售官网源码php,卡盟整站程序源码 php版「建议收藏」

    卡盟销售官网源码php,卡盟整站程序源码 php版「建议收藏」卡盟整站源码是该网站的内核程序,内核是Ecshop,类似平台开钻之类整站程序,也是重要的源码文件,其中包含了各种源码类型文件,比较全,安装操作比较简单。卡盟整站源码是一个点卡销售/充值平台程序,可以开钻,自动发货点卡,充值点卡,充值QB,如果自己想搭建卡盟的朋友可以下载使用。卡盟整站程序源码功能模块介绍系统公告、行业新闻、帮助信息、网址导航、用户注册,购卡中心。后台可以进行商品管理、订单管理、用户…

    2022年8月12日
    7
  • 在中国程序员工作是青春饭吗_码农为什么是青春饭

    在中国程序员工作是青春饭吗_码农为什么是青春饭是?

    2022年10月11日
    2
  • 20个数据库常见面试题讲解!「建议收藏」

    20个数据库常见面试题讲解!「建议收藏」进了互联网公司,整天也就是搬砖,等到了面试的时候,发现数据库方面,忘得一塌糊涂,抽时间整理了一些数据库方面的题。欢迎大家向我推荐你在面试过程中遇到的问题,我会把大家推荐的问题添加到下面的常用面试题清单中供大家参考。事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别? MySQL常见的三种存储引擎(InnoDB…

    2022年6月18日
    35
  • ASP.NET GridView 内嵌 DropDownList 绑定数据「建议收藏」

    ASP.NET GridView 内嵌 DropDownList 绑定数据「建议收藏」aspx页面代码:’DataValueField=”Val”DataTextField=”Text”>

    2022年10月8日
    2
  • java删除数组中指定元素_java学习中如何删除数组中的指定元素「建议收藏」

    java删除数组中指定元素_java学习中如何删除数组中的指定元素「建议收藏」java的api中,并没有提供删除数组中元素的方法。虽然数组是一个对象,不过并没有提供add()remove()或查找元素的方法。这就是为什么类似ArrayList和HashSet受欢迎的原因。不过,我们要感谢ApacheCommonsUtils,我们可以使用这个库的ArrayUtils类来轻易的删除数组中的元素。不过有一点需要注意,数组是在大小是固定的,这意味这我们删除元素后,并不会减少数组的…

    2022年8月11日
    10
  • 常微分方程初值问题数值解法MATLAB(泛函微分方程)

    Matlab解常微分方程的初值问题题目:Matlab解常微分方程的初值问题设计目的:1、熟练掌握Matlab的基本编程方法,及其编程风格。2、熟练掌握Matlab常用函数的使用。3、与本专业相关知识相结合,掌握其在程序开发中的应用方法以及和word、C语言等接口方法。4、通过计算机数值求解的方式来加深微分方程解的理解。5、熟悉初等方法可获得解析解之外的数值近似解的求解方法,提高对差分格式的认识…

    2022年4月12日
    191

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号