Coder Social home page Coder Social logo

basharovv / musicat Goto Github PK

View Code? Open in Web Editor NEW
289.0 4.0 19.0 60.74 MB

A sleek desktop music player and tagger for offline music ๐Ÿช• With experimental features like map view, GPT analysis, artist toolkit. Built with Svelte and Tauri

License: GNU General Public License v3.0

HTML 0.03% JavaScript 5.94% Rust 11.20% Svelte 65.10% CSS 0.39% TypeScript 17.00% SCSS 0.34%
music-player audio audio-player macos-app music-library svelte tauri-app windows-app mp3 music player sveltejs tauri tauri-apps gpt-3 gpt-4 ollama jsvectormap

musicat's Introduction

Musicat

A sleek player for your local music library
-
๐ŸŽต supports MP3, FLAC, WAV, AAC, OGG
๐Ÿ”Š gapless playback (same sample rate only)
๐ŸŽ›๏ธ auto-switch device sample rate
๐Ÿ”— linked library, using original files on disk
๐Ÿ‘€ auto-watch and re-scan folders
๐Ÿท with metadata tagging support (read and write ID3v2, Vorbis)
๐Ÿง  smart playlists
๐Ÿ–ผ download album art, origin country from Wikipedia
๐ŸŽค fetch lyrics for current song
๐Ÿ—บ World Map view - see your library on a map
๐Ÿ’ฟ a neat mini-player
๐ŸŽธ U2's latest album automatically added to your library
๐Ÿ“Š Stats, album timeline
-

screenshot

Warning

musicat is currently in major version zero (0.x) active development, and features are being added regularly. Things may break or change at any time! Keep an eye out for new releases, report bugs and give feedback!

Important

musicat is moving away from WebAudio towards native playback in Rust, read more and discuss here

Screenshots

screenshot screenshot screenshot screenshot screenshot screenshot

Build locally

Pre-requisites: Set up the Tauri framework.

You can then create a development build using npm run tauri dev.

macOS Universal build

To generate a Universal build for macOS: npm run tauri build -- --target universal-apple-darwin

Windows, Linux

Windows and Linux builds have not been tested yet, but you can generate this using npm run tauri build on your system.

Keyboard Shortcuts

  • Cmd + F : Search
  • Up / Down : Highlight next, prev track (also in metadata viewer/editor)
  • ENTER : Play highlighted track
  • Shift + Click : Highlight multiple tracks
  • Space : Play / pause
  • I: Show Info & Metadata

This app is built using Svelte + Tauri.

musicat's People

Contributors

basharovv avatar kirinokirino 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

musicat's Issues

Remember window size and position

It would be nice if the window size and position is remembered. Now it resets after each restart. This is mostly because Tauri doesn't support such feature by default. A separate position setting is needed.

Linux build fails

Here's the build log after running tauri build ( warnings and notes were removed leaving only errors ).
tested on stable and nightly.

error[E0432]: unresolved import `libpulse_binding`
  --> src/output.rs:50:9
   |
50 |     use libpulse_binding as pulse;
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^ no external crate `libpulse_binding`

error[E0432]: unresolved import `libpulse_simple_binding`
  --> src/output.rs:51:9
   |
51 |     use libpulse_simple_binding as psimple;
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no external crate `libpulse_simple_binding`

error[E0050]: method `write` has 2 parameters but the declaration in trait `AudioOutput::write` has 4
   --> src/output.rs:112:18
    |
21  |     fn write(&mut self, decoded: AudioBufferRef<'_>, ramp_up_samples: u64, ramp_down_samples: u64);
    |              ------------------------------------------------------------------------------------ trait requires 4 parameters
...
112 |         fn write(&mut self, decoded: AudioBufferRef<'_>) -> Result<()> {
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 4 parameters, found 2

error[E0046]: not all trait items implemented, missing: `get_sample_rate`, `pause`, `resume`, `update_resampler`, `has_remaining_samples`, `ramp_down`, `ramp_up`
   --> src/output.rs:111:5
    |
23  |     fn get_sample_rate(&self) -> u32;
    |     --------------------------------- `get_sample_rate` from trait
24  |     fn pause(&self);
    |     ---------------- `pause` from trait
25  |     fn resume(&self);
    |     ----------------- `resume` from trait
26  |     fn update_resampler(&mut self, spec: SignalSpec, max_frames: u64) -> bool;
    |     -------------------------------------------------------------------------- `update_resampler` from trait
27  |     fn has_remaining_samples(&self) -> bool;
    |     ---------------------------------------- `has_remaining_samples` from trait
28  |     fn ramp_down(&mut self, buffer: AudioBufferRef, num_samples: usize);
    |     -------------------------------------------------------------------- `ramp_down` from trait
29  |     fn ramp_up(&mut self, buffer: AudioBufferRef, num_samples: usize);
    |     ------------------------------------------------------------------ `ramp_up` from trait
...
111 |     impl AudioOutput for PulseAudioOutput {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_sample_rate`, `pause`, `resume`, `update_resampler`, `has_remaining_samples`, `ramp_down`, `ramp_up` in implementation

error[E0061]: this function takes 2 arguments but 8 arguments were supplied
   --> src/player.rs:593:42
    |
593 |                     audio_output.replace(output::try_open(
    |                                          ^^^^^^^^^^^^^^^^
    |

error[E0308]: mismatched types
    --> src/player.rs:593:42
     |
593  |                       audio_output.replace(output::try_open(
     |  __________________________________-------_^
     | |                                  |
     | |                                  arguments to this method are incorrect
594  | |                         spec,
595  | |                         volume_control_receiver.clone(),
596  | |                         sample_offset_receiver.clone(),
...    |
601  | |                         app_handle.clone(),
602  | |                     ));
     | |_____________________^ expected `Result<Arc<Mutex<...>>, ...>`, found `Result<Box<dyn AudioOutput>, ...>`
     |
     = note: expected enum `std::result::Result<Arc<tokio::sync::Mutex<dyn AudioOutput>>, _>`
                found enum `std::result::Result<Box<(dyn AudioOutput + 'static)>, _>`
help: the return type of this call is `std::result::Result<Box<(dyn AudioOutput + 'static)>, AudioOutputError>` due to the type of the argument passed
    --> src/player.rs:593:21
     |
593  |                        audio_output.replace(output::try_open(
     |  ______________________^____________________-
     | | _____________________|
     | ||
594  | ||                         spec,
595  | ||                         volume_control_receiver.clone(),
596  | ||                         sample_offset_receiver.clone(),
...    ||
601  | ||                         app_handle.clone(),
602  | ||                     ));
     | ||_____________________-^
     | |______________________|
     |                        this argument influences the return type of `replace`

Some errors have detailed explanations: E0046, E0050, E0061, E0308, E0432.
For more information about an error, try `rustc --explain E0046`.
warning: `app` (bin "app") generated 49 warnings
error: could not compile `app` (bin "app") due to 6 previous errors; 49 warnings emitted
       Error failed to build app: failed to build app
error: script "tauri" exited with code 1

Issues with playlist functionality and album display

Thank you for developing this exceptional application! I have encountered two persistent issues that I would like to bring to your attention:

  1. After the last song in a playlist finishes playing, the application continues to play songs, but the player interface becomes unresponsive(e.g. the play button does not work). In fact, the play button deactivates whenever the next song starts playing.
    1

  2. I'm playing the songs in the playlist, and then I enter the album interface. If the playlist moves to the next song at this time, the title on the album interface successfully updates to display the name of the album that the next song belongs to. However, the displayed tracklist on the album interface still corresponds to the previous song's album.
    2

Additionally, I have a small suggestion. Would it be possible to add support for opening .cue text files and importing track splits into the playlist? Similar to the functionality found in foobar2000.

The app version I'm using is https://github.com/basharovV/musicat/tree/8fd5660ecdb534628c441d497c6ab53f49e78669

Player does not start on Windows

Player on windows will stay on 00:00 (does not play).
Latest version 0.5

I checked console and it says the asset://localhost scheme is not supported
ERR_UNKOWN_URL_SCHEME

Investigating if I can fix it myself, one reason that it would fail in the first place is the backslashes in windows filepath, while URL should have forward slashes. I did a replace, but that not yet fixed the unknown scheme error.

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.