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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm社区版与专业版区别_vs社区版和企业版区别

    pycharm社区版与专业版区别_vs社区版和企业版区别【时间】2018.09.22【题目】pyCharm专业版和社区版的区别以及如何查看其版本【参考链接】https://zhidao.baidu.com/question/584331885111670725.html一、pyCharm专业版和社区版的区别pycharm产品主页:https://www.jetbrains.com/pycharm/有说明1、专业版是收…

    2022年8月27日
    10
  • origin双y轴柱状图_双Y轴柱状图和折线图

    origin双y轴柱状图_双Y轴柱状图和折线图Origin双Y轴柱状图画法及两柱重合有间居问题解决1、所遇问题2、作图方法1、所遇问题做双Y轴柱状图时,一开始是将左Y轴数据和右Y轴数据放在了两个sheet中,一顿操作最后发现两个柱要么重合要么有间距,怎么调都不行,就像下图这样。。。2、作图方法正确作图方法:1、将X数据左Y数据以及右Y数据放在一个sheet中,主要这里边的两个空列,是正确画图的关键。2、选择ABCD四列画柱状图,注意这里C列为误差,画出来图你就明白D列作用是让柱子向左偏一格。3、点击空白区域,右键加入右Y轴,也

    2022年9月26日
    5
  • 操作系统期末总复习(题库)[通俗易懂]

    操作系统期末总复习(题库)[通俗易懂]问答题什么是操作系统,主要功能有哪些?操作系统:计算机最基本最重要的基础性系统软件,可以使计算机系统能协调、高效和可靠地进行工作主要功能:处理器管理、存储器管理、设备管理、文件管理、作业管理等功能模块什么是微内核技术,主要有哪些功能?微内核技术把操作系统中更多的成分和功能放到更高的层次(即用户模式)中去运行,而留下一个尽量小的内核,用它来完成操作系统最基本的核心功能,称这种技术为微内核技术。主要功能:进程(线程)管理、低级存储器管理、中断和陷入处理等功能。简述进程的基本状态及状态之间的转换

    2022年6月1日
    224
  • 求两个矢量的夹角(带正负)[通俗易懂]

    求两个矢量的夹角(带正负)[通俗易懂]文章目录1由点乘求夹角,再判断正负向量点乘求夹角:2由点乘和叉乘,使用atan2(y,x)求角度1由点乘求夹角,再判断正负向量点乘求夹角:ab=|a||b|cos<a,b>=a.xb.x+a.y*b.y  所以<a,b>=acos((ab)/(|a||b|));  结果为正值,需要判定正负,来确定角方向;由向量叉乘判断正负:  aXb=……

    2022年8月30日
    1
  • dropDownList属性

    dropDownList属性Bootstrap是当下流行的前端UI组件库之一。利用Bootstrap,可以很方便的构造美观、统一的页面。把设计师从具体的UI编码中解放出来。 Bootstrap提供了不少的前端UI组件。带下拉菜单的文本框就是其中之一,效果图如下(真要自己完全设计,还得费一番功夫) 关于该组件的详情参看Bootstrap官网、带下拉菜单的文本框 看到上面的效果图,使我想到WinFor

    2022年10月17日
    2
  • 数字图像处理均值滤波matlab函数_均值滤波怎么计算

    数字图像处理均值滤波matlab函数_均值滤波怎么计算图像的平滑、锐化都是利用掩模操作来完成的。通过掩模操作实现一种邻域运算,待处理像素点的结果由邻域的图像像素以及相应的与邻域有相同维数的子图像得到。这些子图像被称为滤波器、掩模、核、模板或窗口;掩模运算的数学含义是卷积(或互相关)运算;掩模子图像中的值是系数值,而不是灰度值;……

    2025年7月21日
    3

发表回复

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

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