Open Source Music Player

Hello Koders :wave:
Today I’m going to present you my first app that is build entirely in Kodular: Just Another Musicplayer

Features

  • Languages: :de: :uk: :tr: :serbia:
  • Music stops when headphones get unplugged
  • Playlists
  • Repeat
  • Shuffle

AIA

musicplayer_opensource.aia (254,8 KB)
The project is licensed under CC-BY-SA 4.0 license

Issues

Only mp3 files are supported for now, until Kodular fixes the bugs in the metadata component
Library is not sorted correctly. Quickfix: Change the inner loop of the sort function to
grafik

Extensions in this project

Thanks to all extension developers

You can help

You have an idea for a feature or want to contribute? Awesome! Leave a comment and we will find a way

Translations are welcome

Here is a list of strings to be translated

translations.json
{
"appName": "JAM",
"createPlaylistTitle": "New playlist",
"enterPlaylistName": "Enter playlist name",
"positiveButton": "OK",
"negativeButton": "Cancel",
"tracks": "Songs",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "Rename",
"deleteOption": "Delete",
"selectPlaylists": "Select Playlists",
"playlistNameHint": "Enter playlist name",
"libraryTab": "Library",
"playlistsTab": "Playlists",
"queueTab": "Now playing",
"settings": "Settings",
"track": "Song",
"renamePlaylistTitle": "Rename playlist",
"addToPlaylist": "Add to playlist",
"errorDeleteFromLibrary": "Cannot delete file from library",
"errorRecursivePlaylist": "Cannot add Playlist because the target already contains the source playlist",
"errorMessageTitle": "Error",
"warningDeleteFromLibrary":"The file will be removed permantently from the device. Continue?",
"warningMessageTitle": "Warning",
"selectLibraryFolders": "Choose in which folders the app searches for files",
"darkMode": "Dark Mode",
"deleteFromPlaylist": "Delete from Playlist",
"deleteFromQueue": "Delete from queue"
}
21 Likes

Can we see some screenshots if possible? :grin:

3 Likes

Nice waiting for that to be completed s users can learn lot from that. Good luck

2 Likes

IIRC, the Add Title Bar Icon method doesn’t work if you have options menu disabled. Make sure it is enabled for the above method to work.
Screenshot_20200214-112804_1


Kodular Creator have Metadata component in the Media category, maybe you can use it instead of the Metadata extension.

4 Likes

Thank you for the tips, they fixed the issues :slight_smile: The title bar icon is disabled for now, until I have implemented the settings screen

2 Likes

I added a screenshot and the source file

2 Likes

I just uploaded a new version. Version 2 contains a few bugfixes and new features for the songs. You can now remove songs from a playlist or the queue

5 Likes

I just uploaded a new version. Version 3 contains several bugfixes for the apk. Here is the full list

  • Replaced KIO4_FileExplorer because it prevented the apk compilation
  • Fixed resume music error, the reason was an error in the ExoPlayer component
  • You are now able to delete tracks from a playlist and the queue (but not from the library)
  • Long click on a track now always shows a radio list picker

A big shoutout to @bodymindpower who helped with the permissions

1 Like

What permission have you added?

I didn’t add a permission. It was really difficult to figure out how to ask for permission. The only permission is READ_EXTERNAL_STORAGE

1 Like

If you want, I can translate it to Turkish language if you send the strings file :grin: (and also I can translate upcoming strings :slightly_smiling_face:)

That would be great. Translating is always appreciated. Do you have the strings?

1 Like

I got the translations file from app assets and added a Turkish language. Here is the latest edited translations file:

translations.zip (1.3 KB)

2 Likes

Thanks, I also added a translation request to the original post

1 Like

how to make it read all storage?


It currently reads from /Music, but you can extend that. Either add more folders to the list or design a new screen where the user can add more folders to the database

10 posts were split to a new topic: Mp3 file from external storage (duplicate thread)

sr-rs (latin)

{
"appName": "JAM",
"createPlaylistTitle": "Nova plejlista",
"enterPlaylistName": "Upiši ime plejliste",
"positiveButton": "Potvrdi",
"negativeButton": "Otkaži",
"tracks": "Pesme",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "Preimenuj",
"deleteOption": "Izbriši",
"selectPlaylists": "Izaberi plejliste",
"playlistNameHint": "Upiši ime plejliste",
"libraryTab": "Kolekcija",
"playlistsTab": "Plejliste",
"queueTab": "Trenutno pušta",
"settings": "Podešavanja",
"track": "Pesma",
"renamePlaylistTitle": "Preimenuj plejlistu",
"addToPlaylist": "Dodaj u plejlistu",
"errorDeleteFromLibrary": "Došlo je do greške pritom brisanja pesme iz kolekcije",
"errorRecursivePlaylist": "Nemoguće dodati plejlistu jer ona već postoji",
"errorMessageTitle": "Greška",
"warningDeleteFromLibrary":"Dadoteka će biti trajno obrisana sa uređaja. Nastaviti?",
"warningMessageTitle": "Upozorenje",
"selectLibraryFolders": "Izaberite u kom folderu da aplikacija pretražuje",
"darkMode": "Taman režim",
"deleteFromPlaylist": "Izbriši iz plejliste",
"deleteFromQueue": "Izbriši iz reda"
}

sr-rs (cyrillic)

{
"appName": "ЈАМ",
"createPlaylistTitle": "Нова плејлиста",
"enterPlaylistName": "Упиши име плејлисте",
"positiveButton": "Потврди",
"negativeButton": "Откажи",
"tracks": "Песме",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "Преименуј",
"deleteOption": "Избриши",
"selectPlaylists": "Изабери плејлисте",
"playlistNameHint": "Упиши име плејлисте",
"libraryTab": "Колекција",
"playlistsTab": "Плејлисте",
"queueTab": "Тренутно пушта",
"settings": "Подешавања",
"track": "Песма",
"renamePlaylistTitle": "Преименуј плејлисту",
"addToPlaylist": "Додај у плејлисту",
"errorDeleteFromLibrary": "Дошло је до грешке притом брисања песме из колекције.",
"errorRecursivePlaylist": "Немогуће додати плејлисту јер она већ постоји",
"errorMessageTitle": "Грешка",
"warningDeleteFromLibrary":"Дадотека ће трајно бити обрисана са уређаја. Наставити?",
"warningMessageTitle": "Упозорење",
"selectLibraryFolders": "Изаберите у ком фолдеру да апликација претражује",
"darkMode": "Таман режим",
"deleteFromPlaylist": "Избриши из плејлисте",
"deleteFromQueue": "Избриши из реда"
}
1 Like

i have translated it into nepali (ne)

    { 
"appName": "JAM",
"createPlaylistTitle": "नयाँ प्लेलिस्ट",
"enterPlaylistName": "प्लेलिस्टको नाम प्रविष्ट गर्नुहोस्",
"positiveButton": "ठिक छ",
"negativeButton": "रद्द गर्नुहोस्",
"tracks": "गितहरु",
"albumArt": "album.png",
"trackArt": "album.jpg",
"renameOption": "पुनःनामाकरण गर्नुहोस्",
"deleteOption": "मेटाउनुहोस",
"selectPlaylists": "प्लेलिस्ट चयन गर्नुहोस्",
"playlistNameHint": "प्लेलिस्ट नाम प्रविष्ट गर्नुहोस्",
"libraryTab": "लाइब्रेरी",
"playlistsTab": "प्लेलिस्टहरू",
"queueTab": "अहिले बज्दै",
"settings": "सेटिंग्स",
"track": "गित",
"renamePlaylistTitle": "प्लेलिस्टको नाम बदल्नुहोस्",
"addToPlaylist": "प्लेलिस्टमा थप्नुहोस",
"errorDeleteFromLibrary": "लाइब्रेरीबाट फाइल हटाउन सकिएन",
"errorRecursivePlaylist": "प्लेलिस्ट थप्न सकिएन",
"errorMessageTitle": "त्रुटि भयो",
"warningDeleteFromLibrary":"फाइल उपकरणबाट स्थायी रूपमा हटाइनेछ।  जारी राख्नु हुन्छ?",
"warningMessageTitle": "चेतावनी",
"selectLibraryFolders": "कुन फोल्डरहरूमा एपले फाइलहरूको खोजी गर्ने हो, छनौट गर्नुहोस्",
"darkMode": "अध्यारो मोड",
"deleteFromPlaylist": "प्लेलिस्टबाट हटाउनुहोस्",
"deleteFromQueue": "लाम बाट हटाउनुहोस्"
}
2 Likes

{
“appName”: “JAM”,
“createPlaylistTitle”: “قائمة جديدة”,
“enterPlaylistName”: “أدخل إسم القائمة”,
“positiveButton”: “نعم”,
“negativeButton”: “إلغاء”,
“tracks”: “الأغاني”,
“albumArt”: “album.png”,
“trackArt”: “album.jpg”,
“renameOption”: “تغيير الإسم”,
“deleteOption”: “حذف”,
“selectPlaylists”: “إختر قائمة اخرى”,
“playlistNameHint”: “أدخل إسم القائمة”,
“libraryTab”: “المكتبة”,
“playlistsTab”: “قوائم الأغاني”,
“queueTab”: “التشغيل الآن”,
“settings”: “إعدادات”,
“track”: “الأغنية”,
“renamePlaylistTitle”: “تغيير إسم قائمة الأغاني”,
“addToPlaylist”: “اضف إلى قائمة الأغاني”,
“errorDeleteFromLibrary”: “لا يمكن حذف الملف من المكتبة”,
“errorRecursivePlaylist”: “لا يمكن إضافة قائمة التشغيل لأن الوجهة تحتوي فعلا على قائمة التشغيل المصدر”,
“errorMessageTitle”: “خطأ”,
“warningDeleteFromLibrary”:“ستتم إزالة الملف نهائيًا من الجهاز. هل تكمل؟”,
“warningMessageTitle”: “تحذير”,
“selectLibraryFolders”: "اختر في أي مجلد سيبحث التطبيق عن الملفات ",
“darkMode”: “الوضع المظلم”,
“deleteFromPlaylist”: “إحذف من قائمة التشغيل”,
“deleteFromQueue”: “إحذف من قائمة الانتظار”
}

arabic traslation
taoufiq el barnoussi from morocco :morocco: