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


相关推荐

  • tkmybatis详细教程(一篇就明白)

    tkmybatis是对底层sql进行了抽象封装,不需要考虑sql怎么写,只需要按照逻辑思维,遵循tkmybatis的语法即可实现数据库操作。本文适合对springboot项目结构有一定了解的读者。本文的项目基础是一个demo项目(多模块的)。1.配置1、添加tkmybatis的依赖<dependency><groupId>tk.mybatis</groupId>

    2022年4月1日
    312
  • 电脑apk文件怎么打开_python pkl文件

    电脑apk文件怎么打开_python pkl文件importpickledoc=open(r’D:\dataset\st_gcn_processed_data\data\NTU_RGB_D\xview\val_label.txt’,’a’)#打开一个存储文件,并依次写入test=open(r’D:\dataset\st_gcn_processed_data\data\NTU_RGB_D\xview\val_label.pkl’,’rb’)data=pickle.load(test)print(data,file=doc).

    2025年8月26日
    6
  • ArcGIS server 10.2安装教程详细版

    ArcGIS server 10.2安装教程详细版详细讲述arcgisserver10.2的安装教程。默认已经安装arcgisDesktop10.2。提供一个arcgisserver下载地址:链接:https://pan.baidu.com/s/1iXol6v3RiqjU2MLvbnwNFA提取码:7fzf(失效了请和我说)一、所需文件1.ArcgisServer10.2安装文件。2.ArcgisSer…

    2022年5月25日
    84
  • 360无线路由器dns服务器,路由器的首选dns服务器怎么填

    360无线路由器dns服务器,路由器的首选dns服务器怎么填满意答案mirk60422020.04.25采纳率:42%等级:7已帮助:159人1、在管理员界面中输入命令:ipconfig/all然后按enter键确认即可显示windowsip配置,在这里我们可以查看我们的dns服务器地址。2、如果你连接了路由的话也可以通过路由来查看你的dns服务器地址,在浏览器输入地址192.168.1.1弹出路由器登入对话框,通常路由器默认的账户密码均为:ad…

    2022年6月10日
    56
  • CentOS8 Docker 端口映射

    CentOS8 Docker 端口映射概念端口映射:端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。例:我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。使用使用:dockerrun–namecontainer-name:tag-d-p服务器端口:Doc

    2022年10月18日
    3
  • 【精选】竟然还有你不知道的git神奇操作?

    【精选】竟然还有你不知道的git神奇操作?

    2022年2月20日
    66

发表回复

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

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