Based on the personal NAS music player, Navidrome server development, theoretically supports Subsonic server
Xiu is a music anchor that I often watch recently. There is a word Xiu in her name, so she is called XiuMusic.
This is developed and debugged on the server environment of Navidrome based on the interface of Subsonic API , so all Subsonic api servers are supported. In the process, I got help from many people in the Navidrome discord group, thank them.
Notice The lyrics are saved in the sqlite at document. Currently, there is no export function.
The MacOS version is already on the Appstore, you can download it directly
iOS
Android
Lyric
iPad
-
Clone project
-
Delete ios and macos to regenerate
-
Execute
flutter create .
in the project directory -
Execute
flutter packages get
in the project directory
The following files are added DebugProfile.entitlements Release.entitlements
<key>com.apple.security.network.client</key>
<true/>
Turn on lock screen playback
Info.plist
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
AndroidManifest.xml
<manifest xmlns:tools="http://schemas.android.com/tools" ...>
<!-- ADD THESE TWO PERMISSIONS -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application ...>
...
<!-- EDIT THE android:name ATTRIBUTE IN YOUR EXISTING "ACTIVITY" ELEMENT -->
<activity android:name="com.ryanheise.audioservice.AudioServiceActivity" ...>
...
</activity>
<!-- ADD THIS "SERVICE" element -->
<service android:name="com.ryanheise.audioservice.AudioService"
android:foregroundServiceType="mediaPlayback"
android:exported="true" tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
<!-- ADD THIS "RECEIVER" element -->
<receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true" tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
</application>
</manifest>
You need to set the api of Netease Cloud. According to the instructions of setting NeteaseCloudMusicApi here, after configuring one on vercel, set the api The domain name can be used after it is saved in the set lyrics server.
- sqflite: ^2.2.25 data persistence.
- path: ^1.8.2 Find the location for the database, and it can also be used for image caching, but base64 is still good.
- just_audio: ^0.9.31 Music playback tool with 99% praise.
- just_audio_background: ^0.0.1-beta.9 supports mobile background playback and lock screen control.
- dio: ^4.0.6 and its simple Restful request tool.
- crypto: ^3.0.2 Used for encryption such as MD5.
- window_manager: ^0.2.8 It is used to limit the minimization of the form and hide the title bar.
- flutter_staggered_grid_view: ^0.6.2 Realize waterfall flow, easy to use.
- cached_network_image: ^3.2.3 implements image caching, easy to use.
- flutter_lyric: ^2.0.4+6 There is only one copy on the entire pub, which is easy to use.
- share_plus: ^6.3.0 share,suport all platform, which is easy to use.
- Debugged: macOS iPhone iPad Android
- Not yet: Windows/Linux should be fine?
- desktop shortcut key