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


相关推荐

  • latex怎样绘制表格_LaTeX排版

    latex怎样绘制表格_LaTeX排版latex在线生成表格的网站:http://www.tablesgenerator.com/latex_tables这个网站可以通过三种方式来生成latex表格代码:1、自己设置表格;2、直接导入csv表格;3、直接复制表格内容1、自己设置表格点击File,选择newtables,可以设置需要的行列数2、点击importcsvfile,可以直接导入3、 点击…

    2022年8月11日
    16
  • 企业怎么选择国产Web应用防火墙?

    企业怎么选择国产Web应用防火墙?企业怎么选择国产Web应用防火墙?2005年前后,Web应用防火墙(WAF)进入了IT安全领域,最早提供这类产品的供应商是几家新兴公司,如Perfecto、KaVaDo和NetContinuum。工作原理相当简单:随着攻击范围向IP堆栈的上层移动,瞄上针对特定应用的安全漏洞,这时势必需要开发旨在识别和预防这些攻击的产品。虽然网络防火墙在阻止较低层攻击方面很有效,但并不擅长解开IP数据包层,以分析较高层协议;这就意味着,网络防火墙缺少应用感知功能,而要关闭自定义Web应用中的漏洞窗口,就需要这种功能。但是

    2022年5月5日
    36
  • unity update 协程_Unity 协程的原理

    unity update 协程_Unity 协程的原理Unity协程的原理发布时间:2019-06-1318:45,浏览次数:1118,标签:Unity协程不是多线程,协程还是在主线程里面(注:在Unity中非主线程是不可以访问Unity资源的)1、线程、进程和协程的区别进程有自己独立的堆和栈,即不共享堆也不共享栈,进程由操作系统调度线程拥有自己独立的栈和共享的堆,共享堆不共享栈,线程亦有操作系统调度(标准线程是这样的)协程和线程一样共享堆不共…

    2022年6月16日
    78
  • JQuery Datepicker 中文显示设置

    JQuery Datepicker 中文显示设置

    2021年8月21日
    67
  • Centos7下 Redis的安装、配置开机自启动、开放远程连接

    Centos7下 Redis的安装、配置开机自启动、开放远程连接

    2021年10月5日
    38

发表回复

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

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