I am Nguyen Duc Tuan Minh, an Android Developer, and a final-year student at UEH University.
I am the creator of SimpMusic.
I love Kotlin so much ❤️.
A simple music app using YouTube Music for backend
Home Page: https://simpmusic.tech/
License: GNU General Public License v3.0
I am Nguyen Duc Tuan Minh, an Android Developer, and a final-year student at UEH University.
I am the creator of SimpMusic.
I love Kotlin so much ❤️.
the app crashes frequently, mostly in the settings menu. if you e.g. clicks Downloads or most played.
Device: Samsung Galaxy a8, Android 9
Feature description
Some songs are louder than others in a playlist. Replay Gain Normalization can be used to make them equally loud.
The variable volume is annoying and some songs aren't even audible unless you manually set the volume right for the song.
Hello,
Unfortunately, when I try to start playing music, the app crashes.
type: crash
osVersion: google/cheetah/cheetah:13/TQ3A.230705.001/2023072600:user/release-keys
package: com.maxrave.simpmusic:5
process: com.maxrave.simpmusic
processUptime: 8018 + 228 ms
installer: io.github.muntashirakon.AppManager
java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number. Expected identity hash: 584c84929cc872dea0e4fa287c3c6809, found: 0b79be7c71e3cd87102b15f8daf00fd9
at androidx.room.RoomOpenHelper.checkIdentity(RoomOpenHelper.kt:147)
at androidx.room.RoomOpenHelper.onOpen(RoomOpenHelper.kt:128)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onOpen(FrameworkSQLiteOpenHelper.kt:287)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:434)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:323)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableOrReadableDatabase(FrameworkSQLiteOpenHelper.kt:232)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.innerGetDatabase(FrameworkSQLiteOpenHelper.kt:190)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getSupportDatabase(FrameworkSQLiteOpenHelper.kt:151)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.kt:104)
at androidx.room.RoomDatabase.internalBeginTransaction(RoomDatabase.kt:528)
at androidx.room.RoomDatabase.beginTransaction(RoomDatabase.kt:517)
at com.maxrave.simpmusic.data.db.DatabaseDao_Impl$28.call(DatabaseDao_Impl.java:601)
at com.maxrave.simpmusic.data.db.DatabaseDao_Impl$28.call(DatabaseDao_Impl.java:598)
at androidx.room.CoroutinesRoom$Companion$execute$2.invokeSuspend(CoroutinesRoom.kt:65)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
at androidx.room.TransactionExecutor.execute$lambda$1$lambda$0(TransactionExecutor.kt:36)
at androidx.room.TransactionExecutor.$r8$lambda$AympDHYBb78s7_N_9gRsXF0sHiw(Unknown Source:0)
at androidx.room.TransactionExecutor$$ExternalSyntheticLambda0.run(Unknown Source:4)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@790b6d2, Dispatchers.Main.immediate]
I have a premium account but I hate the Google apps. Is it possible to implement a YouTube login?
Add option "use system equalizer" option so we can use third party equalizer
Hello,
after the update to the 0.0.4 the app unfortunately still crashes, immediately after the start.
type: crash
osVersion: google/cheetah/cheetah:13/TQ3A.230705.001/2023072600:user/release-keys
package: com.maxrave.simpmusic:4
process: com.maxrave.simpmusic
processUptime: 218 + 245 ms
installer: com.looker.droidify
java.lang.ArrayIndexOutOfBoundsException: length=2; index=-1
at com.maxrave.simpmusic.viewModel.HomeViewModel$getHomeItemList$3.invokeSuspend(HomeViewModel.kt:80)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
at kotlinx.coroutines.EventLoop.processUnconfinedEvent(EventLoop.common.kt:68)
at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:375)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:25)
at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110)
at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
at com.maxrave.simpmusic.viewModel.HomeViewModel.<init>(HomeViewModel.kt:55)
at com.maxrave.simpmusic.DaggerSimpMusicApplication_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider.get(DaggerSimpMusicApplication_HiltComponents_SingletonC.java:782)
at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory$1.create(HiltViewModelFactory.java:102)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.kt:90)
at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:114)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:153)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:53)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:35)
at com.maxrave.simpmusic.ui.fragment.home.HomeFragment.getViewModel(HomeFragment.kt:48)
at com.maxrave.simpmusic.ui.fragment.home.HomeFragment.initObserver(HomeFragment.kt:225)
at com.maxrave.simpmusic.ui.fragment.home.HomeFragment.onViewCreated(HomeFragment.kt:81)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3147)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:114)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1455)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3034)
at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2945)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3148)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:588)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:114)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1455)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3034)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2952)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1548)
at android.app.Activity.performStart(Activity.java:8414)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3680)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:224)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:204)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2313)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7940)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ExecInit.main(ExecInit.java:49)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@ed22cd4, Dispatchers.Main.immediate]
Make SimpMusic available in the "Share" menu.
This would make sharing from the left easier.
When you are in artist page or in album page, songs should have a context menu so that you can like it without playing the song, you can add it in a play queue, ...
Poweramp equalizer not working with simpmusic even if i turned on "use system equalizer" option from setting
Is there a way for simpmusic to use the android api to make the navbar transparent? Also, although on stock android, the status bar is transparent, on Samsung devices, there's like a little tint that remains which looks weird~
In an album I'd like to select some songs and like them. You can't select any song by keep pressing on a song
Is Piped account and custom instance support planned for library backup? This app looks beautiful so far and I would love to see it work as a drop in replacement for any other proprietary app.
App crashes at random during playback, and songs are downloaded 10% of the time if even that.
Regions is US
Please add maybe blur to the background of the navigation bar so it's clearer to see or maybe ingrate dynamic theme in both navigation bar and the main background like homescreen and other pages.
Implement swipe down on thumbnail to minimize now playing screen we need to press button everytime whenever we need to minimum now playing screen.
I will merge this into next build. Thanks for support me
Originally posted by @maxrave-dev in #14 (comment)
Currently in my opinion it is too transparent.
Implement animation while we swipe down now playing screen. There is an only animation for minimize to now playing screen. So it will be great if you implement animation while we swipe down
Saw this app on Izzydroid repo on F-Droid. Gave it a try. Now it is my go-to music app because it is brilliant and it has synced lyrics. Keep it up Max!
Can you support import backup from Innertune?
I have a premium account but I hate the Google apps. Is it possible to implement a YouTube login?
Why downloads are cached not a local file?
Is it possible to lower the min SDK to level 25?
@maxrave-dev
Hey man I'm a ex moderator of many github projects and also the main dev of redbot discord bot I was thinking can I make you a discord sever for this project this opens up a Community for people to report bugs and ask for new features obviously I can keep track on the issues they open and remove any duplicate ones we can also upload bigger files like screen records that github can't do.
Many thanks 😊
It'd be cool to have a swipe feature so we could skip tracks back and forth without touching a button and we could swipe down to get back to home screen and minimize the currently playing tab.
Thanks 🦸♂️
As you can see here you can generate nightly version of that app after every PR. It can help you in finding and solving bugs
Android 13, 1+ 8
It would be useful to be able to synchronize YouTube Playlists to SimpMusic. That way you can see them in the library. And when you create a new playlist, it is synchronized across all devices with YouTube Music. You can see an example from SpMp.
https://github.com/toasterofbread/spmp
You may add crashlytics to tracking app crash
An automatic backup function like Blackhole would be very useful if you change your phone or tablet
It will be great if you implement "refresh playlists" button in playlists. That help us to get songs that we added recently in playlists by youtube.
It would be great if you implement the resumption of the last played track after restarting the application, or at least return to the previous playlist. For now, if I open the app again, I need to select the playlist again.
Can you please add 270 and 320 kbps audio quality options also?
The current name is too long and may be associated with the slang term simp. This may induce discrimination of users. And could also allow them making fun of your app.
It will be great if you maw rounded corner thumbnail for songs that available in playlists
I don't know if it's feasible but is there a way to be informed in some way about new releases from the artists you follow? Be it a notification or a hint through a dot or something similar.
Thanks for the great app and your hard work.
My scanner found a library in your app which it does not know about. Do you have any idea where the source for com.example.expandabletextview_compose
can be found? It's not mentioned in your code base either, so it must be a dependency of a dependency; maybe running gradle :app:dependencies
can reveal it?
Hi! First of all I want to give you a huge thanks for this incredible app. SimpMusic is super useful and simple to use! I just want to ask if it's possible to add a Crowdin Page for the app, because it's easier for people instead of downloading Android Studio. I don't know if it's possible or if it's easier for you, but if you have time, please consider it! I'm interested in translating the app into Italian, but I don't have Android Studio on my PC and I don't have too much space to download it (I already have Visual Studio and Visual Studio Code). Thanks in advance, have a nice day!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.