前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Bass库Mp3转wav、samplerate/channel修改[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-09-27 16:10:58
8940
发布2022-09-27 16:10:58
举报
文章被收录于专栏:全栈程序员必看

代码地址: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.代码

代码语言:javascript
复制
BassOperationHelper类核心代码
代码语言:javascript
复制
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;
    }

MainActivity类调用

代码语言:javascript
复制
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.cn/184364.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Bass库集成
  • 2.Mp3转Wav、Channel/Samplerate修改
  • 3.代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档