ZIO AV is a library for audio (video coming soon) processing with ZIO, built on top of the FFmpeg libraries using JavaCPP and JavaCV. It provides a simple way to work with audio data, enabling you to perform various operations such as transcoding (encode audio with different codec, sample rate, bitrate), getting audio metadata, cropping audio and etc.
- Transcoding: transcode your audios to other format, change codec and other parameters.
- Metadata: retrieve audio metadata
- Cropping: cut necessary passages from audio
- VAD: detect voice in audio (only for audio with dialogs, not for music)
Add the following dependency to your build.sbt
file:
libraryDependencies += "io.github.victornguen" %% "zio-av" % "<version>"
Since library uses TarsosDSP, you need to add following resolver:
resolvers += "be.0110.repo-releases" at "https://mvn.0110.be/releases"
Here's a simple example that demonstrates how to transcode MP3 to WAV with downsampling to 8 kHz:
import com.github.victornguen.av.settings.{AVLogLevel, AudioCodec, AudioFormat}
import com.github.victornguen.av.storage.DefaultTempFileStorage
import com.github.victornguen.av.{Audio, Multimedia}
import zio.{Console, Scope, ZIO, ZIOAppArgs, ZIOAppDefault}
import java.io.File
object TranscodingExample extends ZIOAppDefault {
override def run: ZIO[Environment with ZIOAppArgs with Scope, Any, Any] = {
val audioFilePath = "zio-av-examples\\src\\main\\resources\\Shooting Stars.mp3"
val file = new File(audioFilePath)
for {
_ <- Multimedia.setLogLevel(AVLogLevel.Info)
_ <- Multimedia.logToFile(new File("./log.log"))
audio <- Audio.fromFile(file)
newAudio <- audio.transcode(AudioCodec.PCM.S16LE, AudioFormat.WAV, Some(8000))
newAudioInfo <- newAudio.getInfo
newAudioFile <- newAudio.getFile
_ <- Console.printLine(newAudioInfo)
_ <- Console.printLine(newAudioFile.toString)
} yield ()
}
.provide(
DefaultTempFileStorage.makeLayer,
Scope.default,
)
}
More examples available in zio-av-examples.
Contributions to zio-av are welcome! If you find any issues or have suggestions for improvements, please submit a bug report or feature request in the issue tracker. Pull requests are also appreciated.
This project is licensed under the Apache 2.0 License.