开源音频编辑工具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

下载:百度云

密码:3usf

 
 

猜你喜欢

转载自blog.csdn.net/u010302327/article/details/81302445