Android开源音频编辑工具ringdroid - Go语言中文社区

Android开源音频编辑工具ringdroid


最近在研究音视频编辑功能,在网上找到一个开源的音频编辑工具ringdroid效果挺好的就贴出来,先看效果

我只是简单的改了点界面,功能基本保留

先新建个项目,把ringdroid所有文件都复制到这个项目中,run一下,报错,由于ringdroid项目时代久远,不支持动态权限,所以要自己添加,简单的方法就是新建一个activity获取权限,再跳转到RingdroidSelectActivity

修改AndroidManifest.xml

<activity android:name="GuideActivity" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name="RingdroidSelectActivity"  android:label="@string/main_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.OPENABLE" />
        <data android:mimeType="audio/*" />
    </intent-filter>
</activity>

GuideActivity就是我获取权限的activity

成功进入RingdroidSelectActivity后,点击音乐或铃声后没有反应,出现这中情况是因为包名问题,创建项目的时候默认包名和ringdroid的包名不对应,只要改build.gradle的applicationId和AndroidManifest.xml的package就可以了

build.gradle

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.ringdroid"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ringdroid">

好了,这样就可以编辑音频了,如果要编辑视频音轨就要改soundfile文件夹内的代码

先修改RingdroidEditActivity的代码,把mFilename写成固定路径

然后把

if (!mFilename.equals("record")) {
    loadFromFile();
} else {
    recordAudio();
}

改成

loadFromFile();

这样就会直接读取视频音轨了,再修改SoundFile的getSupportedExtensions函数

public static String[] getSupportedExtensions() {
    return new String[] {"mp3", "wav", "3gpp", "3gp", "amr", "aac", "m4a", "ogg","mp4"};
}

添加一个MP4,这样就不会不识别MP4了,将下面这段判断代码注释掉

//                if (firstSampleData
//                        && format.getString(MediaFormat.KEY_MIME).equals("audio/mp4a-latm")
//                        && sample_size == 2) {
//                    // For some reasons on some devices (e.g. the Samsung S3) you should not
//                    // provide the first two bytes of an AAC stream, otherwise the MediaCodec will
//                    // crash. These two bytes do not contain music data but basic info on the
//                    // stream (e.g. channel configuration and sampling frequency), and skipping them
//                    // seems OK with other devices (MediaCodec has already been configured and
//                    // already knows these parameters).
//                    extractor.advance();
//                    tot_size_read += sample_size;
//                } else

这样就不会跳过视频了,然后关于进度条,ringdroid是通过文件大小来判断进度的,而视频有图像所以文件大小不能用来判断进度,所以改一下用时间来进行判断在

if (i == numTracks) {
    throw new InvalidInputException("No audio track found in " + mInputFile);
}

下添加

long duration = format.getLong(MediaFormat.KEY_DURATION);

来获取总时长,再把

if (!mProgressListener.reportProgress((float)(tot_size_read) / mFileSize))

改成

if (!mProgressListener.reportProgress((float)(presentation_time) / duration))

这样就大功告成,贴demo

昨天忘贴一段代码了不然有些视频会只加载前5秒的数据后边就没有了,把

int newSize = (int)((position * (1.0 * mFileSize / tot_size_read)) * 1.2);
if (newSize - position < info.size + 5 * (1<<20)) {
    newSize = position + info.size + 5 * (1<<20);
}

改成

int newSize = position + info.size + 5 * (1<<20);

mAvgBitRate = (int)((mFileSize * 8) * ((float)mSampleRate / mNumSamples) / 1000);

改成

mAvgBitRate = (int)((tot_size_read * 8) * ((float)mSampleRate / mNumSamples) / 1000);

好了,这次是真的大功告成了,重新上传demo

下载:百度云

密码:k9q3

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u010302327/article/details/81302445
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 03:57:43
  • 阅读 ( 1488 )
  • 分类:Go开源项目

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢