AudioTool - an android library that provides useful audio processing functions. This library based on FFMPEG and uses mobile-ffmpeg library
- Filters
- filterAudio(. . .)
- removeAudioNoise(. . .) - remove noise from audio
- normalizeAudioVolume(. . .) - normalize audio volume
- Equalizer
- changeAudioBass(. . .) - reduce or increase audio bass
- changeAudioVolume(. . .) - reduce or increase audio volume
- changeAudioPitch(. . .) - reduce or increase audio pitch
- changeAudioSpeed(. . .) - reduce or increase audio speed
- Effects
- applyShifterEffect(. . .) - apply audio pan shifter effect
- applyReverbEffect(. . .) - apply audio reverb effect
- applyEchoEffect(. . .) - apply audio echo effect
- reverseAudio(. . .) - reverse audio
- Modificators
- cutAudio(. . .) - cut audio
- convertVideoToAudio(. . .) - convert video to audio
- joinAudios(. . .) - join few audio files to single
- Other
- generateWaveform(. . .) - generate image waveform (png)
- getMaxLevelData(. . .) - retrive audio max level data (data can be used to draw waveform)
- getDuration(. . .) - retrive audio duration
AudioTool.getInstance(this)
.withAudio(new File("/storage/emulated/0/Music/Linc - AudioTool.mp3"))
.removeVocal(new OnFileComplete() {
@Override
public void onComplete(File output) {
// Output file - audio without vocal
}
})
.applyEchoEffect(Echo.ECHO_OPEN_AIR, new OnFileComplete() {
@Override
public void onComplete(File output) {
// Output file - audio file with echo effect and without vocal
}
})
/* calls */
.release();
If you want to save current audio file state - use saveCurrentTo(path). Current audio will be saved as separate file and AudioTool continue modify input file from withAudio() parameters.
AudioTool.getInstance(this)
.withAudio(new File("/storage/emulated/0/Music/Linc - AudioTool.mp3"))
.removeVocal(output-> {/* do something with output */})
.applyEchoEffect(Echo.ECHO_OPEN_AIR, output-> {/* do something with output */})
.saveCurrentTo("/storage/emulated/0/Music/NewAudio.mp3") // Audio file with echo and without vocal
.release();
AudioTool.getInstance(this)
.withAudio(new File("/storage/emulated/0/Music/Linc - AudioTool.mp3"))
.removeVocal(output-> {/* do something with output */})
.saveCurrentTo("/storage/emulated/0/Music/Instrumental.mp3") // Audio file without vocal
.applyEchoEffect(Echo.ECHO_OPEN_AIR, output-> {/* do something with output */})
.saveCurrentTo("/storage/emulated/0/Music/NewAudio.mp3") // Audio file with echo and without vocal
.release();
AudioTool.getInstance(this)
.withAudio(new File("/storage/emulated/0/Music/Linc - AudioTool.mp3"))
.removeVocal(null) // It's ok.
.saveCurrentTo("/storage/emulated/0/Music/Instrumental.mp3") // Save audio without vocal to local file
.release();
Also, don't forget to call release() function when you finish work with AudioTool. The function remove buffer files from storage and clear other resources.
AudioTool.getInstance(this)
.withAudio(new File("/storage/emulated/0/Music/Linc - AudioTool.mp3"))
/* calls */
.release(); // Always call this function
When you add AudioTool to your project, you also should implement tanersener mobile-ffmpeg library which provides you full access to ffmpeg funcitons!
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.lincollincol:AudioTool:1.2.1'
implementation 'com.arthenica:mobile-ffmpeg-full:4.3.1.LTS'
}
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.lincollincol</groupId>
<artifactId>AudioTool</artifactId>
<version>1.2.1</version>
</dependency>
Add permissions to Manifest.xml file in your app and grant it, before using AudioTool
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
AudioTool process audio in the main thread ! You can run AudioTool functions with RxJava, Kotlin coroutines and Java Threads to process audio in the background therad.
AudioTool don't process audio in the background thread because of :
- You can use your own approach to work in the background thread. It makes AudioTool library more flexible.
- Reduce library size. Third-party library uses a lot of space and AudioTool delegates this task to user.
Copyright 2020 lincollincol
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.