GithubHelp home page GithubHelp logo

super-badmen-viper / nsmusics Goto Github PK

View Code? Open in Web Editor NEW
711.0 5.0 37.0 699.47 MB

NSMusicS,Multi platform Multi mode Music Software ,Electron(Vue3+Vite+TypeScript)+.net core+AI

License: GNU Affero General Public License v3.0

HTML 0.05% TypeScript 32.46% Vue 67.00% CSS 0.37% Batchfile 0.12%
music music-player audio-player player audio multimodal deep-learning electron javascript machine-learning natural-language net netcore python pytorch typescript vue3 librosa csharp

nsmusics's Introduction

Frame

NSMusicS

A local music software that is expected to support multiple platforms with AI capabilities and multimodal features.

The current development phase is to develop an Elecetron cross platform music software that is compatible with Navichrome and has a beautiful UI, and to simultaneously develop music artificial intelligence and streaming services as cloud services for NSMusicS

The goal of NSMusicS is to integrate various functions (such as artificial intelligence, streaming, music library management, cross platform, etc.), which can be understood as similar to Navidrome but with more features than Navidrome. It wants to become a plugin integrated application that can almost have all music functions.

Version:

Project Development status Technology Framework Author/Copyright Owner Operating systems LICENSE Software positioning
NSMusicS (Now) updateing electron,docker,vue,nodejs,ts,vite,sqlite My Skills Xiang Cheng (Windows,Linux(ubuntu+,Docker),MacOS,Android11++,IOS) Based on the Chrome kernel A-GPL 3.0 Open source + Commercial
NSMusicS_WPF (Old) complete dotnet8(wpf),cs,window,sqlite My Skills Xiang Cheng (Windows10++) A-GPL 3.0 Open source + Commercial
NSMusicS_For_PythonApp_Of_AudioProcessing will developed pytorch,py My Skills Xiang Cheng python Apache License 2.0 Open source
NSMusicS_For_Knowledge_Graph Not started NebulaGraph / Neo4j Xiang Cheng (Windows10++/Linux) A-GPL 3.0 Open source + Commercial
NSMusicS_For_Flutter Not started flutter,dart My Skills Xiang Cheng (Windows10++,Linux(ubuntu+,群晖Nas+Docker),MacOS,Android11++,IOS) A-GPL 3.0 Open source + Commercial
MZMusic Not started electron,docker,vue,nodejs,ts,vite My Skills MZMusic Team (win,linux,macos...) Apache License 2.0 Open source

The management dashboard for NSMusicS_Web

Downloads

Interface preview:

  • NSMusicS(Electron):Under development

Using the source code of NSMusicS

If you would like to experience the latest development progress of NSMusicS Electron:

  • If you haven't installed Navidrome, please install and start its service, and then add your computer's music to Navidrome.
  • Copy and replace the navidrome.db file located in the resources folder of the folder where NSMusicS Electron is installed with the navidrome installation location \ navidrome installation version \ navidrome.db.

Why is it necessary to install Navidrome for this test version?:

  • Because the library management module has not been written yet, Navidrome is temporarily borrowed to achieve this. After the official version is released, users can choose whether to be compatible with Navidrome (if compatibility is needed, Navidrome service must exist on your host).
cd NSMusicS
# node      -v  20.15.0
# npm       -v  10.4.0
npm install 
# Install MPV in the Windows environment (requires its executable file compressed file) 
# https://mpv.io/installation/
# unzip its contents to (NSMusicS\resources\mpv-x86_64-20240623)
# You need to recompile the native module better sqlite3 to allow the sqlite database to read normally
cd NSMusicS/node_modules/better-sqlite3 
npm install electron-rebuild -D
# 1.open better-sqlite3/package.json 
# 2.scripts addline: "rebuild": "electron-rebuild -f -w better-sqlite3" 
npm run rebuild 
cd NSMusicS
npm run dev # Direct operation NSmusicS
cd NSMusicS
npm run build-only # Package into the current system_configs's software package (such as exe)

Related projects:(Thanks)

Author's Message

  • As this project is currently independently developed by Xiang Cheng(myself), programming standards are a personal habit of the Xiang Cheng(myself), and coding standards are not yet standardized enough. However, this project will continue to undergo self refactoring and reverse development. It can be affirmed that in the future, NSMusicS will form a standard coding specification, which will be beneficial for the community to develop third-party NSMusicS plugins, Enable NSMusicS to meet the diverse needs of more potential customers,Most importantly, NSMusicS will always be open source and continuously updated

nsmusics's People

Contributors

dependabot[bot] avatar super-badmen-viper avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

nsmusics's Issues

{开源,共建}多歌手写真轮播UI动画优化,需要减少性能开销

此多歌手写真轮播UI动画会占用大量系统资源,显示的歌手写真像素越大则卡顿几率越大,需要精简优化,或者替换性能更好更美观的UI动画
相关代码:(代码位置在MoZhiMusicPlayer/mainwindows.xaml.cs中3282行)

    ObjectAnimationUsingKeyFrames oa;
    ObjectAnimationUsingKeyFrames oa_2;
    private void BgSwitch(string imgPath)
    {
        oa = bgstoryboard.Children.FirstOrDefault(c => c is ObjectAnimationUsingKeyFrames) as ObjectAnimationUsingKeyFrames;
        oa.KeyFrames[0].Value = new BitmapImage(new Uri(imgPath));
    }
    Storyboard bgstoryboard = null;
    private void BgSwitchIni()
    {
        //动画占用过高CPU及GPU
        //此动画效果为渲染所有的像素,效率过低
        //应更改为     多区块渲染过渡 / 线性渲染过渡 / 淡化渲染过渡 / 模糊重叠过渡渲染
        DoubleAnimationUsingKeyFrames da = new DoubleAnimationUsingKeyFrames();
        EasingDoubleKeyFrame sd = new EasingDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200)));
        da.KeyFrames.Add(sd);
        Storyboard.SetTargetName(da, musicPlayer_Main_UserControl.Grid_down_Singer_Photo.Name);
        DependencyProperty[] propertyChain = new DependencyProperty[]
        {
                Panel.BackgroundProperty,
                Brush.OpacityProperty
        };
        Storyboard.SetTargetProperty(da, new PropertyPath("(0).(1)", propertyChain));

        ObjectAnimationUsingKeyFrames oa = new ObjectAnimationUsingKeyFrames();
        DiscreteObjectKeyFrame diso = new DiscreteObjectKeyFrame(new BitmapImage(new Uri(Path_App + @"\Button_Image_Ico\Space.png", UriKind.Absolute)), KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(10)));
        oa.KeyFrames.Add(diso);
        oa.BeginTime = new TimeSpan(0, 0, 0, 1, 0);
        Storyboard.SetTargetName(oa, musicPlayer_Main_UserControl.Grid_down_Singer_Photo.Name);
        DependencyProperty[] propertyChain2 = new DependencyProperty[]
        {
                Panel.BackgroundProperty,
                ImageBrush.ImageSourceProperty
        };
        Storyboard.SetTargetProperty(oa, new PropertyPath("(0).(1)", propertyChain2));

        DoubleAnimationUsingKeyFrames da2 = new DoubleAnimationUsingKeyFrames();
        da2.BeginTime = new TimeSpan(0, 0, 0, 1, 5);
        EasingDoubleKeyFrame sd2 = new EasingDoubleKeyFrame(1, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200)));
        da2.KeyFrames.Add(sd2);
        Storyboard.SetTargetName(da2, musicPlayer_Main_UserControl.Grid_down_Singer_Photo.Name);
        Storyboard.SetTargetProperty(da2, new PropertyPath("(0).(1)", propertyChain));
     
        bgstoryboard.Children.Add(da);
        bgstoryboard.Children.Add(oa);
        bgstoryboard.Children.Add(da2);
    }

All Detail requirements for users

user 0001:from bilibili 2024/4/14

  • Page information expansion (album, song, singer)
  • Favorite tags ☆ (album, song, artist)
  • Add collection tags ☆ Sort/filter by category (album, song, artist)

user 0002:from bilibili 2024/4/08

  • Allow hot loading of third-party plugins

user 0003:from bilibili 2024/4/07

  • Supports 5.1 channels

user 0004:from bilibili 2024/4/10

  • Transparent Frosted theme compatible with Windows mica theme

user 0005:from bilibili 2024/4/11

  • Support webdav to synchronize songs and connect to third-party cloud storage for synchronization

user 0006: from bilibili 2024/4/7

  • urv5 extracts human voice and converts it to MIDI or lightweight MIDI converter

user 0007:from bilibili 2024/4/10

  • 192Khz 24bit Audio sampling setting

user 0008:from bilibili 2024/5/13

  • Sort songs by folder directory, sort by directory, and accurately search for songs

user 0009:from github 2024/5/13

  • Automatic (manual) switching of internal and external network connections to connect multiple streaming APIs(navidrome..) simultaneously

歌词逐字算法:终极Plus版:暂停音乐后再继续音乐,当前所在歌词行的歌词逐字动画不会继续

由于今日新升级的,歌词逐字算法,相比之前的算法更加复杂一点,所以目前无法对准确获取正在播放的动画

新算法已解决了不同语言字体之间不兼容的BUG(韩文等特殊字体,在UI展现上的系统BUG,此BUG并非为软件本身的问题)

新算法效果(最优解歌词逐字算法):(韩文+英文的场景)(韩文等特殊字体自带BUG)

image

旧算法效果:(韩文+英文的场景)(韩文等特殊字体自带BUG)

image

Hot loading plugins

I plan to use the better-sqlite3 read-write plugin module

The development of nsmusics plugins requires four documents(Naive UI,vue-virtual-scroller,nsmusics,howler.js)

Before that, I need to design a good development standard and provide a series of APIs (or classes) that can be used for third-party development

And it will distinguish between NSMusicS official plugins and third-party plugins:

  • The official plugin is provided by NSMusicS Web and supports the installation of the official plugin manager (various AI modules, various recommendation system modules, various Python audio processing modules, etc.) ,These will all come from NSMusicS open-source code
  • NSMusicS is not responsible for any third-party plugins, and the official plugin manager does not have built-in third-party plugins (such as third-party audio sources, etc.)

There are two modes of combining third-party plugins with NSMusicS Web:

  • Plugins are independent (do not interact with NSMusicS Web)
    • How can plugins be independent (user perspective)?:
      • The functional area will have an additional button that will call up a separate interface, such as third-party audio sources plugins, and data access will be implemented using SQL
  • Plugin extensions (interacting with NSMusicS web)
    • How can plugins be extended (user perspective)?:
      • In the NSMusicS web interface, the gray disabled function will be disabled and can be called up normally

{开源,共建}当MZMusic播放超高比特率的无损音乐时,CurrentTime属性可能会出现异常跳动

CurrentTime属性出现异常跳动时,会导致歌词栏异常滚动一次,滚动到第1行。
设备内存越不足时,CurrentTime属性出现异常跳动的可能性越高。
可能是MZMusic播放超高比特率的无损音乐时所需要的内存开销很大,当设备内存不足以提供时出现CurrentTime属性可能会出现异常跳动。
需要优化超高比特率的无损音乐读取时的性能占用

Feature Request: Comprehensive API for Software Functionality and Information Access

I am suggesting the development of a comprehensive API for our software. This API should encompass all the functionalities offered by the software and provide access to all available information.

The primary objectives of this API are:

To enable users to interact with the software programmatically, facilitating automation and integration with other tools and services.
To provide a means to retrieve all information within the software, enhancing its utility for developers and advanced users.
The API can be hosted on a local address, such as http://127.0.0.1:port/, ensuring easy and secure access within local development environments.

Key features of the proposed API could include:

Support for all software features through programmatic interaction.
Retrieval of all data and settings available within the software.
Compatibility with various data formats like JSON for seamless integration with other applications.
Implementing such an API would greatly enhance the utility and flexibility of our software, particularly for developers looking to automate tasks or integrate the software into larger workflows.

{开源,共建}歌词字同步算法中的UI及后端算法优化,减少性能开销,(算法版本当前为LrcLinearAnimationMrc,迭代为ByteAnimationMrc可解决,我已提供ByteAnimationMrc的思路,等待你的解决)

TextBlock中的Text内容如包括不同的字体(例如中文+韩文),UI渐变效果的起点将会不从歌词行起点开始,而是从各自字体的首字位置分别开始
使用LinearGradientBrush运用在TextBlock中的Foreground,当TextBlock的Text含有韩文和中文时,LinearGradientBrush渐变的动画起点会从设置的歌词行X:-0.5 Y:0 起点变成 各自字体的首字位置分别开始。
将LinearGradientBrush中的MappingMode设置为"Absolute",依然解决不了动画渐变的起点问题,这是语言字体不同导致的

相关代码:

    <TextBlock x:Name="TextBlock_1"  HorizontalAlignment="Center" Text="科技源于生活,技术源于创新" 
                FontSize="36" Height="68" IsEnabled="False" FontWeight="Bold" VerticalAlignment="Top" >
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="UIElement.MouseLeftButtonDown">
                <BeginStoryboard>
                    <Storyboard x:Name="Text_Storyboard">
                        <DoubleAnimationUsingKeyFrames x:Name="Text_DoubleAnimation"
                                        Duration="0:0:6"
                                        Storyboard.TargetName="Trans" Storyboard.TargetProperty="X"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TextBlock.Triggers>
        <TextBlock.Foreground>
            <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
                <LinearGradientBrush.RelativeTransform>
                    <TranslateTransform X="-0.5" x:Name="Trans"/>
                </LinearGradientBrush.RelativeTransform>
                <GradientStop Color="#FF00FFA2" Offset="0.49"/>
                <GradientStop Color="#FFF99F00" Offset="0.51"/>
            </LinearGradientBrush>
        </TextBlock.Foreground>
        ....
    </TextBlock>

Bug截图:
image
image

解决方案:
1.继续优化现有的UI机制LrcLinearAnimationMrc,将不同的语言字体融合为同一通用字体
2.算法与UI迭代升级为ByteAnimationMrc:假设歌词行含有10个字符,10个字符使用10个TextBlock分别存储,将每个TextBlock都设置当前字符的同步时间,触发第一个TextBlock的动画,将第一个TextBlock的动画complete事件设置为触发第二个TextBlock的动画,以此类推通过递归绑定动画complete事件算法,实现几乎100%的歌词字同步算法效果,同步每一个字符的歌词演唱进度,也解决了歌词同步动画渐变的起点问题

PS:
So,哪位老哥来实现这个ByteAnimationMrc[doge],我之前已经实现了这个方案的95%,卡在了动画绑定这最后一步上,我最近有其他的事情要解决,所以我暂时不能继续接下来的ByteAnimationMrc工作,交给你们了[doge]

{开源,共建}MZMusic内存占用优化

MZMusic随着使用时间的增加,从初始内存占用211M会增加到850M,且无法在运行过程中释放其多余的内存残余,需要优化的内存占用大小应为(当前占用的内存 减去 初始内存211M)

[ Probation/试用 ] 一些问题/lack of demo program

我在闲暇时稍微试用了一下Releases中的demo
发现如下:

  1. 点击歌曲缩略图后打开了动态播放的界面,这没问题。但!再次点击同一个地方无法退出该界面,必须点击远在左上角的>按钮
  2. 不能向主界面拖放歌曲文件及文件夹以添加歌曲
  3. 同上,甚至在添加歌曲的专用界面(那个很多文本框的界面)也不行!!
  4. 添加音乐时若保持默认设置,音乐会进入“我的收藏”,而所谓的“本地音乐”里没有出现(那难道刚才那首歌不存储在我的设备上了吗?这属于逻辑谬论)
  5. 进度条仅在点击时响应,拖动无效
  6. 最重要的,不能读取.MP3内嵌的歌词(我亲手写了150+份内嵌逐字时间轴歌词)
  7. 似乎 封面也不能内嵌
  8. 调节音量后不会自动收起,并且点击空白处不能收起音量控件
  9. 音量控件不支持点击快速静音
  10. 重新进入程序直接点击开始播放 无动作。此时检查播放列表为空(具体说就是不会记住上次运行的列表并且在列表为空时自动生成新表)
  11. 同上,重新进入程序直接点击开始播放 无动作,但播放按钮却已经变成正在播放的样式
  12. 不存在收起到任务栏右侧隐藏后台程序的功能(你可以理解为像挂QQ一样)

暂时以上,
加油

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.