Open-sourced voice labeling application

Related tags

Video/Audio vlabeler
Overview

vLabeler

Discord

vLabeler is an open-sourced voice labeling application, aiming:

  • Modern and fluent UI/UX
  • Customizable labeling/import/export, to be used by different types of voice editor apps
  • High performance with multiplatforms

The project is now in Alpha. For helps, suggestions, issue reports etc. please join our Discord.

Download

See Releases.

The following platforms are provided in the releases.

  • Windows (.exe)
  • Mac (Apple Silicon or Intel) (.dmg)
  • Ubuntu (.deb)

For other linux os you may have to build it by yourself.

For macOS users

If you cannot open the app with a "damaged" error, please run sudo xattr -rc /Applications/vLabeler.app with your terminal. (sudo command requires your password)

Building

vLabeler is built by Compose Multiplatform. You can use Gradle to build the application. See more

Currently cross-platform building is not supported. Only packages for your OS are built.

Please ensure you have JDK 15+ for building.

// Package by installer
./gradlew package

// Or, build executable app
./gradlew createDistributable

Usage

Many behaviors of vLabeler depend on customizable labelers. Currenty built-in labelers include UTAU oto labeler and Sinsy (NNSVS/ENUNU) lab labeler.

  • oto labeler (Basic mode, SetParam style)

  • lab labeler (Continuous mode)

Get started

  1. Click New project..
  2. Select a folder containing your sample files
  3. If you don't want to save vLabeler files (project file, processed wav files etc.) in the sample folder, change the Working directory
  4. Change Project name if you would like
  5. Select a labeler (e.g. UTAU oto labeler if you are editign UTAU oto)
  6. Select a label file template and its encoding (e.g. a pre-filled oto file), or leave it blank to use the default template (not recommended)
  7. If you don't have a template file, select a template generator along with input file which it requires
  8. Click OK and start editing
  9. Click Export in the menu to get the edited label file

Available keyboard/mouse actions

Note that following Ctrl means Command if you are using macOS.

Move parameter lines

  • Mouse drag on normal parameters: move itself
  • Mouse drag on primary parameters: move all the lines together
  • Shift: invert normal/primary. e.g. mouse drag on primary parameters with Shift pressed only moves itself.

Audio playback

  • Space: play from the beginning / Stop
  • Ctrl + mouse click: play the clicked section

Scrolling

  • Shift + mouse wheel scroll: horizontal scroll
  • F or Focus button in the center of bottom bar: Scroll to center the current entry in the screen

Zoom in/out

  • = or numpad + or + button in the bottom bar: zoom in
  • - or numpad - or - button in the bottom bar: zoom out
  • Ctrl + Shift + mouse wheel scroll: zoom in/out
  • Resolution button in the bottom bar: open dialog for resolution input

Switch entry/sample

  • Mouse wheel scroll: go to previous/next entry
  • Up/Down: go to previous/next entry
  • </> buttons in the bottom bar: go to previous/next entry
  • Ctrl + mouse wheel scroll: go to previous/next sample
  • Ctrl + Up/Down: go to previous/next sample
  • <</>> buttons in the bottom: go to previous/next sample
  • Ctrl + G or entry number button in the bottom bar: show Go to entry... dialog

Multiple editing mode

For labelers with continuous: true (currently only the sinsy lab labeler), you can switch between the normal editing mode and a multiple editing mode which shows and allows you to edit all the connected entries in the same sample file. It's enabled by default. You can toggle the menu item Edit -> Edit All Connected Entries to enable or disable it.

Tools

The following editing tool is provided. You can use shortcuts or menu items under Edit -> Tools to switch tools, or toggle the Toolbox view by menu View -> Show Toolbox.

Note that you can use the Play the clicked section feature by Ctrl + Click with any tool.

Cursor

The normal cursor tool to drag parameter controllers (lines or the labels).

Scissors

Cut the current entry into two parts by your click position. By default, when you click on a valid position with the scissors:

  1. Audio of the former (left) part after cutting is played so that you can confirm the phoneme
  2. A dialog is shown, asking you to rename the former entry
  3. Cutting and renaming is conducted
  4. The editor navigates to the former entry if needed

These actions can be configured, see the Configure section for details.

Configure

After the first run, you can find app.conf.json and labelers/*.labeler.json under .../<user>/vLabeler directory. (For macOS it's ~/Library/vLabeler) Check LabelerConf.kt and AppConf.kt and make sure you understand the content before you edit them.

You can reset configurations by removing the files.

Built-in configuration UI is not available yet. (Please wait!)

Plugins

Currently, only template generator plugins are available. You can copy a plugin folder to .../vLabeler/plugins/template/ to enable it, where vLabeler is the app's external directory described in the Configure section.

All valid template generators which support the selected labeler can be chosen in the New Project page.

Plugin management UI will be added in the future.

Plugin Development

We welcome plugin development for the application. You can distribute your plugin anywhere, or create a pull request to make it built-in.

See Plugin API Document for details.

Logs

Logs are written to files under .../vLabeler/.logs. You can check the logs for development/debug/test purposes. When reporting issues, please attach the recent log files.

Known issues

  1. Audio files with a higher bit depth than 16-bit cannot be played normally. Please convert them priorly.
  2. On Linux, file chooser may not be able to select an empty folder. Please creating something inside, or copy + paste its path.
Comments
  • relative working directory

    relative working directory

    Hi, I was wondering if there's a way to have a relative working directory with vlabeler ? I feel like this can make it easier to share vlabeler projects on multiple computers and to move the projects

    solved 
    opened by SeleDreams 7
  • Batch editing of oto.ini

    Batch editing of oto.ini

    I had previously been planning to create a batch editor for OTO.ini as a web application, but it may be more useful to incorporate this directly into an OTO.ini editor like vLabeler. This suggestion is based on my development plans. Since I'm not sure whether I can commit to adding this feature myself, any developer is welcome to work on this.

    Specifications

    A batch editing preset would consist of

    • A list of user-specified rules (applied to the oto in order)
    • A final rule for handling duplicate aliases (applied after user-specified rules)

    A few useful presets to include by default would be adding a suffix to all aliases, adding hiragana to a romaji voicebank (and vice versa), and changing the tempo of all oto lines.

    User-specified rules

    A user-specified rule would consist of

    • How to select lines
    • How to edit alias or how to edit parameters

    A rule could edit aliases only, edit parameters only, or edit both aliases and parameters.

    Selecting lines

    These are the options for selecting lines.

    • Select 1 specific line of the oto.ini
    • Select all lines of the oto.ini
    • Select lines where the alias matches a regex
    • Select lines where the filename matches a regex
    • Select lines where the alias and filename match regexes

    Editing aliases

    After selecting lines, these actions could be applied

    • Delete the lines
    • Replace the alias using a regex
    • Make a copy of the line and set the new alias with a regex

    Editing parameters

    After selecting lines, these actions could be applied

    • Change the values of parameters (set equal to x, or add/subtract/multiply/divide original value with x)
    • Recalculate parameters according to tempo change (user specifies which parameters will change)
    • Calculate 1 parameter from another parameter (eg. set preutterance to be 2x overlap)

    Duplicate alias rule

    Duplicate aliases are lines of the OTO where the alias is EXACTLY the same. These are the options for handling them.

    • Do nothing
    • Add number to the end of all duplicate aliases (ka, ka1, ka2, ka3, etc.)
    • Add number to the first X duplicates, then delete the rest (eg. if the limit is 2, then keep "ka" and "ka1", and delete the rest)
    • Delete all duplicates

    Old mockup

    This mockup was designed for the previous plan of making a web app. vLabeler can use this as inspiration, but it does not need to match exactly.

    find all
    find alias
    alias
    parameter value
    parameter tempo
    parameter calculate
    dupes

    solved 
    opened by adlez27 7
  • Render resampler playback for oto entry [UTAU]

    Render resampler playback for oto entry [UTAU]

    Add the feature to play what an oto entry would sound like in UTAU. SetParam has this feature, it's triggered by pressing F10 on the keyboard. This makes it easier to tell if your oto entry is correctly configured without having to open UTAU or reload voicebanks. As for a resampler that's crossplatform that it could use by default, macres should be ok.

    opened by nagotown 5
  • Vlabeler freezes when you accidentally scroll to an undefined .wav in pre-filled oto.ini

    Vlabeler freezes when you accidentally scroll to an undefined .wav in pre-filled oto.ini

    I wanted to test vlabeler on a voicebank for which I have not yet finished recording all the .wav files. I'm using a pre-filled oto.ini and so some lines refer to non-existent .wav files.

    When I scroll to select a line to edit and I go through a line that refers to a non-existent .wav, an error is displayed and vlabeler crashes (impossible to close the window or doing anything).

    Using a try/catch instead of a fatal error could be better, or maybe put those lines in grey so we can't accidentally scroll on it.

    P.S : thank you for developping this app, it so user friendly <3

    opened by KrankerApfel 4
  • Entries list filter will be reset after clicking any entry

    Entries list filter will be reset after clicking any entry

    • Version: 1.0.0-alpha10
    • Platform: Windows 11 x64 build 22000
    • Reproduce steps
      1. Load an existing UTAU library
      2. Wait after the entries list is loaded.
      3. Pin Entry List and then do a entry filter.
      4. Click on any entry filtered.
    • Expected result
      • The filter should be kept even after clicking on any entry.
    • Actual Result:
      • The filter will be resetted and return to all entries list.
      • However the filter keyword is not being cleared.
    opened by ghosrt 3
  • Cannot use negative overlap

    Cannot use negative overlap

    Negative overlap is mostly used when a plosive CV sample is cut too short. Negative overlap allows you to increase the length of the overlap so that the plosive will play correctly.

    What I was trying to do was convert a VCV sample to a - C sample. It is possible to set overlap to zero and it work, but I usually set overlap to negative in this case to make it look like a normal - C sample.

    opened by maeblythe 3
  • Doesn't recognize virtual keyboard input / buttons on drawing tablet

    Doesn't recognize virtual keyboard input / buttons on drawing tablet

    On Windows 10. Using a tablet PC not in mode S.

    The program only recognizes '-' and '=' when using the tablet's default keyboard. All other button presses are ignored.

    While the drawing tablet works for moving parameters, the buttons which are mapped to the correct keystrokes are ignored.

    The accessibility feature, On Screen Keyboard, does work as intended.

    Perhaps adding on screen buttons for next and previous would be helpful.

    Video demonstration: https://youtu.be/2h612gV085s

    opened by maeblythe 3
  • Getting `java.lang.IllegalStateException: cannot open system clipboard` when opening Editor

    Getting `java.lang.IllegalStateException: cannot open system clipboard` when opening Editor

    Env

    Windows 10, javaRuntimeVersion=16.0.2+7, appVersion=1.0.0-alpha19

    Reproduction rate

    2/80

    Error log

    [2022-09-06T13:22:23.180240500Z] Uncaught exception in Thread AWT-EventQueue-0: java.lang.IllegalStateException: cannot open system clipboard
    	at java.desktop/sun.awt.windows.WClipboard.openClipboard(Native Method)
    	at java.desktop/sun.awt.datatransfer.SunClipboard.getData(Unknown Source)
    	at org.jetbrains.skiko.Actuals_awtKt.ClipboardManager_getText(Actuals.awt.kt:62)
    	at org.jetbrains.skiko.ClipboardManager.getText(Platform.kt:28)
    	at androidx.compose.ui.platform.PlatformClipboardManager.getText(PlatformClipboardManager.skiko.kt:26)
    	at androidx.compose.foundation.text.ContextMenu_desktopKt$contextMenuItems$1.invoke(ContextMenu.desktop.kt:93)
    	at androidx.compose.foundation.text.ContextMenu_desktopKt$contextMenuItems$1.invoke(ContextMenu.desktop.kt:72)
    	at androidx.compose.foundation.ContextMenuData$allItemsSeq$1.invokeSuspend(ContextMenuProvider.desktop.kt:184)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at kotlin.sequences.SequenceBuilderIterator.hasNext(SequenceBuilder.kt:127)
    	at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:787)
    	at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:817)
    	at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:808)
    	at androidx.compose.foundation.ContextMenuData$allItems$2.invoke(ContextMenuProvider.desktop.kt:179)
    	at androidx.compose.foundation.ContextMenuData$allItems$2.invoke(ContextMenuProvider.desktop.kt:178)
    	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    	at androidx.compose.foundation.ContextMenuData.getAllItems$foundation(ContextMenuProvider.desktop.kt:178)
    	at androidx.compose.foundation.ContextMenuProvider_desktopKt$ContextMenuArea$2.invoke(ContextMenuProvider.desktop.kt:61)
    	at androidx.compose.foundation.ContextMenuProvider_desktopKt$ContextMenuArea$2.invoke(ContextMenuProvider.desktop.kt:57)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	at androidx.compose.foundation.ContextMenuProvider_desktopKt$ContextMenuDataProvider$2.invoke(ContextMenuProvider.desktop.kt:94)
    	at androidx.compose.foundation.ContextMenuProvider_desktopKt$ContextMenuDataProvider$2.invoke(ContextMenuProvider.desktop.kt:93)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    	at androidx.compose.foundation.ContextMenuProvider_desktopKt.ContextMenuDataProvider(ContextMenuProvider.desktop.kt:91)
    	at androidx.compose.foundation.ContextMenuProvider_desktopKt.ContextMenuArea(ContextMenuProvider.desktop.kt:57)
    	at androidx.compose.foundation.text.ContextMenu_desktopKt.ContextMenuArea(ContextMenu.desktop.kt:43)
    	at androidx.compose.foundation.text.CoreTextFieldKt.CoreTextFieldRootBox(CoreTextField.kt:618)
    	at androidx.compose.foundation.text.CoreTextFieldKt.CoreTextField(CoreTextField.kt:532)
    	at androidx.compose.foundation.text.BasicTextFieldKt.BasicTextField(BasicTextField.kt:151)
    	at com.sdercolin.vlabeler.ui.common.SearchBarKt.SearchBar(SearchBar.kt:39)
    	at com.sdercolin.vlabeler.ui.editor.EntryListKt.EntryList(EntryList.kt:91)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt$Editor$entryListCard$1$1.invoke(Editor.kt:92)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt$Editor$entryListCard$1$1.invoke(Editor.kt:91)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:145)
    	at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2351)
    	at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2641)
    	at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:137)
    	at androidx.compose.material.CardKt.Card-F-jzlyU(Card.kt:68)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt$Editor$entryListCard$1.invoke(Editor.kt:87)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt$Editor$entryListCard$1.invoke(Editor.kt:85)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt$Editor$splitPaneContent$1$1$2.invoke(Editor.kt:128)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt$Editor$splitPaneContent$1$1$2.invoke(Editor.kt:127)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	at org.jetbrains.compose.splitpane.DesktopSplitPaneKt.SplitPane(DesktopSplitPane.kt:41)
    	at org.jetbrains.compose.splitpane.SplitPaneKt.HorizontalSplitPane(SplitPane.kt:61)
    	at com.sdercolin.vlabeler.ui.editor.EditorKt.Editor(Editor.kt:162)
    	at com.sdercolin.vlabeler.ui.AppKt.App(App.kt:57)
    	at com.sdercolin.vlabeler.ui.AppKt$App$5.invoke(App.kt)
    	at com.sdercolin.vlabeler.ui.AppKt$App$5.invoke(App.kt)
    	at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:145)
    	at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2351)
    	at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2618)
    	at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3205)
    	at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3183)
    	at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:252)
    	at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source)
    	at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3183)
    	at androidx.compose.runtime.ComposerImpl.recompose$runtime(Composer.kt:3148)
    	at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:746)
    	at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:876)
    	at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:107)
    	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:485)
    	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:454)
    	at androidx.compose.runtime.BroadcastFrameClock$FrameAwaiter.resume(BroadcastFrameClock.kt:42)
    	at androidx.compose.runtime.BroadcastFrameClock.sendFrame(BroadcastFrameClock.kt:71)
    	at androidx.compose.ui.ComposeScene.render(ComposeScene.skiko.kt:411)
    	at androidx.compose.ui.awt.ComposeLayer$1$onRender$1.invoke(ComposeLayer.desktop.kt:303)
    	at androidx.compose.ui.awt.ComposeLayer$1$onRender$1.invoke(ComposeLayer.desktop.kt:302)
    	at androidx.compose.ui.awt.ComposeLayer.catchExceptions(ComposeLayer.desktop.kt:99)
    	at androidx.compose.ui.awt.ComposeLayer.access$catchExceptions(ComposeLayer.desktop.kt:79)
    	at androidx.compose.ui.awt.ComposeLayer$1.onRender(ComposeLayer.desktop.kt:302)
    	at org.jetbrains.skiko.SkiaLayer.update$skiko(SkiaLayer.awt.kt:507)
    	at org.jetbrains.skiko.redrawer.Direct3DRedrawer.update(Direct3DRedrawer.kt:54)
    	at org.jetbrains.skiko.redrawer.Direct3DRedrawer.access$update(Direct3DRedrawer.kt:10)
    	at org.jetbrains.skiko.redrawer.Direct3DRedrawer$frameDispatcher$1.invokeSuspend(Direct3DRedrawer.kt:28)
    	at org.jetbrains.skiko.redrawer.Direct3DRedrawer$frameDispatcher$1.invoke(Direct3DRedrawer.kt)
    	at org.jetbrains.skiko.redrawer.Direct3DRedrawer$frameDispatcher$1.invoke(Direct3DRedrawer.kt)
    	at org.jetbrains.skiko.FrameDispatcher$job$1.invokeSuspend(FrameDispatcher.kt:33)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
    	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
    	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
    
    bug 
    opened by sdercolin 2
  • Values are set to max integer value if sample is too long

    Values are set to max integer value if sample is too long

    While labeling a sample just under 4 minutes long, I exported the .lab file and noticed that the last couple of entries for that specific sample all had starting and ending values of 2147483648, which is roughly the max integer value. Looking at the project file in a text editor, those same entries all showed up with correct values before being converted to a .lab format. I've attached the related files. 0139.zip

    solved 
    opened by Zestea 2
  • Add tabs for multiple open projects

    Add tabs for multiple open projects

    I'm thinking of a feature where you could have multiple projects open as tabs for quicker editing. Thinking there could also be a kind of project to remember each of the "sub" projects so you don't have to reopen them every time. Here's how the layout for how it could be (just drew over the app) image

    opened by nagotown 1
  • View

    View "Go to entry..." on the side of the window

    Add a feature to view the "Go to entry..." popup on the side of the window so you can review the entries. Not entirely necessary for some, but I can see myself hitting ctrl+G a little too much due to memory.

    opened by nagotown 1
  • Sample Timing Matching feature for help aligning parameters on samples

    Sample Timing Matching feature for help aligning parameters on samples

    Just an Idea (Mainly for the UTAU Oto Labeler): Adding Timing Matching [to make sure the oto settings didn't offset, Similiar to Utterance Timing (Shortcut: F8) in SetParam]

    Timing Matching is a feature on setparam that plays the part of the sample on the tempo, which really helps to fit pre-utterance parameter to make sure it doesn't rendered off-time on UTAU or such

    opened by rkz07 0
  • F0 and Power views of the audio file

    F0 and Power views of the audio file

    Not sure if you already have this in the plans but being able to see the pitch as well as the power (dB) of the file helps a lot when otoing, especially when they're not the best in terms of recording. Screenshot of oremo (should also be in setparam but mine refuses to open) below to give an idea of what I'm talking about.

    image

    opened by VocAddict 0
Releases(1.0.0-beta8)
Owner
Mobile/Desktop developer. Kotlin/C#/TypeScript
null
pokestack is an all-in-one solution for mobile voice interfaces on Android.

Extensible Android mobile voice framework: wakeword, ASR, NLU, and TTS. Easily add voice to any Android app!

Spokestack 57 Nov 20, 2022
Fork of kord, mainly used for Voice

Kord Kord is still in an experimental stage, as such we can't guarantee API stability between releases. While we'd love for you to try out our library

Mixtape OSS 4 Jun 7, 2022
Video Transcoder is an application which uses the open source program FFmpeg to transcode video files from one format to another.

Video Transcoder Do you want to encode videos on your phone into different formats, trim videos, or extract audio? Are you looking for a free solution

Branden Archer 358 Dec 30, 2022
VideoView that plays video only when :eyes: are open and :boy: is detected with various other features

LookAtMe VideoView that plays video only when ?? are open and ?? is detected with various other features GIF AndroidPub (Medium) Post You can read the

Pradyuman Dixit 186 Dec 13, 2022
NOVA is an open source video player for Android

NOVA: opeN sOurce Video plAyer Overview NOVA is an open source video player for Android. It consists in a fork of the original Archos Video Player Com

NOVA 876 Jan 2, 2023
Fermata Media Player is a free, open source audio and video player with a simple and intuitive interface.

Fermata Media Player About Fermata Media Player is a free, open source audio and video player with a simple and intuitive interface. It is focused on

Andrey 227 Jan 6, 2023
Shuttle is an open source, local music player for Android.

Shuttle Music Player Shuttle is an open source, local music player for Android. Shuttle comes in two flavours: Shuttle (free) Shuttle+ The free versio

Tim Malseed 2.2k Jan 4, 2023
SocyMusic is an open-source Android music player written in Java with the aim of creating an easy-to-use app for exchanging and listening to top-quality music. Help us create it!

SocyMusic SocyMusic is an open-source Android music player written entirely in Java. It's objectives are to provide top-quality music to everyone for

Benji 23 Dec 26, 2022
Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and more.

Blade Player Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and m

Valentin HAUDIQUET 72 Jan 5, 2023
A radio player mobile application which streams audio from Radio Sai Global Harmony.

A radio player mobile application which streams audio from Radio Sai Global Harmony.

Sai Rajendra Immadi 11 Nov 26, 2022
Music Player application with you tube downloader

MusicHub Music Player application with you tube downloader Playing around with Kotlin compose the new UI framework Libraries & technologies used MVVM

Mohamed Almahdy 2 Mar 17, 2022
A basic natural gas mobile application homework.

Natural Gas Homework This is a basic natural gas mobile application project. Compiling You need Android Studio https://developer.android.com/studio/ a

null 0 Mar 9, 2022
This repository contains all the development I did to the Jitsi Video calling application.

This repository contains all the development I did to the Jitsi Video calling application. The jitsi-Media-Transform-mod directory contains the develo

null 1 Mar 22, 2022
Silky - Android application to convert videos from applications such as YouTube, Facebook, Twitter into audio (.mp3)

Silky Español (actualmente la app se encuentra en desarrollo ) Descripcion Aplic

null 2 Aug 24, 2022
ExoPlayer - an application level media player for Android

ExoPlayer is an application level media player for Android. It provides an alternative to Android’s MediaPlayer API for playing audio and video both locally and over the Internet. ExoPlayer supports features not currently supported by Android’s MediaPlayer API, including DASH and SmoothStreaming adaptive playbacks.

Halil Özel 6 Oct 31, 2022
This is a basic demo application for exoplayer library.

ExoPlayer Demo Application This is a basic demo application for exoplayer library. It can stream these types of file: MP3 MP4 DASH HLS You can minimiz

Soumik 1 Apr 8, 2022
Android Application that plays music through a Spotify API based on a user's current location found through Google Maps API and also checking Google Weather API.

GeoStereo Android Application that plays music through a Spotify API based on a user's current location found through Google Maps API and also checkin

Jonah Douglas 1 Jun 16, 2022
Extensible Android mobile voice framework: wakeword, ASR, NLU, and TTS. Easily add voice to any Android app!

Spokestack is an all-in-one solution for mobile voice interfaces on Android. It provides every piece of the speech processing puzzle, including voice

Spokestack 57 Nov 20, 2022
SmartLens uses Google's ML Kit for Barcode scanning, Face recognition, Text recognition, and Image labeling.

SmartLens SmartLens uses Google's ML Kit for Barcode scanning, Face recognition, Text recognition, and Image labeling. ?? Screen Shots ?? Features It

Prince Fahad 2 Sep 14, 2022
Slide is an open sourced, ad free Reddit browser for Android

Slide Slide is an open source, ad free Reddit browser for Android. It is based around the Java Reddit API Wrapper. Slide is available on the Google Pl

Carlos Crane 1.7k Jan 9, 2023