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();
                            }
                        }
                    });

     

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • git 命令总结

    1.配置gitconfig–globaluser.name"yourname"gitconfig–globaluser.emailmail@box.co

    2021年12月22日
  • 100+个Java项目视频教程+源码+笔记,项目经验不用愁了!

    100+个Java项目视频教程+源码+笔记,项目经验不用愁了!有很多朋友问我,说有没有项目可以分享,最近整理了一些项目,现在分享给大家,希望能帮助大家积累一些项目方面的经验。开源项目分享1、微信小程序开发【前端+后端(Java)】附完整源码地址:微信小程序开发【前端+后端(Java)】附完整源码2、springboot+vue.js搭建图书管理系统开源项目地址:springboot+vue.js搭建图书管理系统开源项目3、仿百度网盘的一款轻量级微服务架构网盘系统地址:仿百度网盘的一款轻量级微服务架构网盘系统4、仿京东电商项目终于开源了~项目经验不愁喽!

  • 网络层传输层(计算机网络传输层大题)

    概述传输层的意义网络层可以把数据从一个主机传送到另一个主机,但是没有和进程建立联系。传输层就是讲进程和收到的数据联系到一起,使数据能够为应用服务所以说传输层是主机才有的层次传输层的两个协议传输层的寻址和端口端口号只用于计算机分辨本地进程,总共有2^16=65536种端口号,端口号有很多种,不能随便使用常见的应用程序端口号UDP协议UDP概述注释:因为UDP一次发送一个完整报文不会分片,所以需要应用层传输过来的数据不要太大,否则网络层分片任务就很重,但是也不能太小,不然效率较低

  • linux修改smb端口_sftp默认端口号是多少

    linux修改smb端口_sftp默认端口号是多少本文介绍如何在Linux操作系统中更改默认的SFTP端口,支持Ubuntu、CentOS等发行版,同时还将向您展示如何配置防火墙以允许在新端口上使用。先声明的一点是不要将SFTP与FTPS混淆,因为两种协议具有相同的目的,FTPS代表FTPSecure,它是对标准FTP协议的扩展,支持TLS。简介SFTP(SSH文件传输协议)是一种安全文件协议,用于通过加密连接在两个主机之间传输文件,它还允许您…

  • Ubuntu中搭建ICE服务器(Coturn)

    Ubuntu中搭建ICE服务器(Coturn)1.WebRTC的P2P穿透WebRTC的P2P穿透部分是由libjingle实现的.步骤顺序大概是这样的:尝试直连.通过STUN服务器进行穿透无法穿透则通过TURN服务器中转STUN服务器比较简单.网上也有很多公开的STUN服务器可以用于测试,例如:stun.ideasip.com在WebRTC的P2P应用中,使用公开的STUN服务器时,有时响应比较慢,这就需要自己搭一个…

  • Java对象拷贝_对象的拷贝有几种方法

    Java对象拷贝_对象的拷贝有几种方法大多时候时候使用的是Apache或Spring“BeanUtils,今天,我们来看一下一个更高效的属性拷贝方式:BeanCopier。https://github.com/cglib/cglibhttps://github.com/cglib/cglib/blob/master/cglib/src/main/java/net/sf/cglib/beans/BeanCopier.java首先梳理出来现在有哪些对象拷贝的方式:Apache的BeanUtils:BeanUtils是Apach.

发表回复

您的电子邮箱地址不会被公开。

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