thecodrr / BreadPlayer

Bread Player, a free and open source music player powered by UWP and C#/.NET with a sleek and polished design built for, and by, the people seeking a better alternative to Groove and Windows Media Player by Microsoft.

Home Page:https://theweavrs.github.io/BreadPlayer/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

All suggestions/requests here.

thecodrr opened this issue · comments

As this project is open source and for the people, let's make it by the people too! Any suggestions and requests are welcome. By any I mean any; you can request a berry on top of the bread! Anything.

Unique ideas that don't sound good in your head are especially welcome here. Let us fill this issue with suggestions and requests!

List of suggestions already given by the people:

  • 1. Display Up Next on shuffle. (Basic support added)
  • 2. DLNA Support. (Basically casting).
  • 3. Xbox One & Android Support.
  • 4. FM Radio.
  • 5. Live Tile
  • 6. Equalizer/Effects
  • 7. Folder Navigation
  • 8. Last.fm Scrobbling.
  • 10. Manual adding of Album arts
  • 11. Most Played and Recently Added and Now Playing section
  • 12. Database resetting support Fully supported
  • 13. Favorites List
  • 14. Gapless Playback
  • 15. Prevent screen from locking.
  • 16. Stop playing after this song.
  • 17. Syncing across devices (Pick up where you left off on the PC),
  • 18. Sub-sorting for albums and artists.
  • 19. Replay Gain
  • 20. Silence Skipping in a song.
  • 21. .lrc lyrics (Synchronized lyrics)
  • 22. Custom background (in all regions)
  • 23. Deep ID3 tag reading
  • 24. Ability to hide a specific folder and its songs.
  • 25. Private Playlists
  • 26. Party Mode (Probably with a nice UI)
  • 27. Remote Control support (Using Phone to control Bread on PC)
  • 28. Continuum Support. (Basic support is of course already there but many things need to be changed.)
  • 29. Ability to relocate (change location) of a song.
  • 30. Auto play on connecting headphones.
  • 31. Compact Player Mode (Only PCs).
  • 32. Reencode for target device (Your library is flac, but your player doesn't have that much room)
  • 33. Volume normalization
  • 34. Fade in/out when changing the song.
  • 35. Custom track formatting. (Prefix the file name with the track number like 001, etc) Bulk formatting would be amazing.
  • 36. Transparent Tiles.
  • 37. Customization for columns. (Show/Hide additional columns if so desired.)
  • 38. Spectral Frequency Diagram.
  • 39. Smart Playlists. (Calculate songs ratings and play count and according to that make a playlist based on genre.)
  • 40. Play queue. ( A list of songs to play before the next upcoming song.)
  • 41. OPUS Codec Support.
  • 42. Show artist and album sorting in grids (like in album view)
  • 43. Download Playlists to MP3 Players and other removable devices like USB etc.

Come on people! There are a thousand more to go!

Long live Bread!

commented

What about lyrics (embedded/.lrc/ online database) support? :DDD I remember my symbian had it and Windows never delivered any support ever :(

@DannyTalent the only problem is that there aren't any .lrc databases available and the only ones that are available have websites in Chinese and no API :D Its a very beautiful idea, I myself wanted something like this.

commented

@theweavrs Hmmm what about viewlyrics.com ? There's a github project https://github.com/PedroHLC/ViewLyricsOpenSearcher that could perhaps be of use...

But also maybe it could read independent .lrc files or mrv embedded in the mp3?
MusiXmatch also offers API support afaik...

MusiXmatch has an API, I will have to try it though. The site says they have synced lyrics, so this is a nice discovery.

@DannyTalent Viewlyrics.com doesn't show lyrics at all. Gives a constant error "Failed to read lyrics content, please contact us to report this issue.". You try and tell.

commented

@theweavrs Yeah I just noticed, no luck... And I think musiXmatch charges money for that...
LyricFind also offers API, and I found this article http://www.programmableweb.com/category/lyrics/api
I'd love to help you but I'm just now getting familiarized with C#

What about being able to choose the background of the app?

@Bond-009 What do you mean?

Now you see the cover under the list of songs but if you would be able to toggle it so it shows a costum image as background (also under the buttons) like this music player:
example

@Bond-009 I have added this into the suggestion list, it's certainly a cool feature. More customizability never hurts. If you have any other suggestions, please feel free to share!

opinion

@DannyTalent @Bond-009 Opinions? Is this better or was the previous one better?

commented

I think the previous one was better, I imagine that closing the hamburger would make it smaller though? If it does, then yeah this one might work better

I think that a play all button for your whole library would be nice.

@Bond-009 Can you explain a bit?

Side question: Do you have a windows phone?

@theweavrs There is a play all button in the playlists but not for the whole music library

Yes I have a windows phone (8.1)

commented

Maybe an option to resume a song when you plug in your headphones (if the song is paused, of course) like foobar's

@DannyTalent Can you explain a bit? I don't quite get what you mean.

commented

@theweavrs Let's say your phone is playing on loudspeaker, but then you pause for a second maybe because you're playing a game and want to hear the sounds of the game app.

And then, you plug in your headphones, and the app will continue the song by itself

@DannyTalent I will research and see if this is possible. If there is an event to know that something connected...then it is certainly possible.

commented

Yeah man I mean it has to be lol, foobar does it as an advanced option

I find this especially helpful for me because my headphone jack has been starting to fail (this phone is a bit old) and sometimes doesn't recognize my headphones or stops detecting them in certain positions... Which makes music stop on most players

@DannyTalent Would it be cool if it happened on PCs too?

commented

Probably, as an option.. I don't really listen to music on pc all that much so I don't really know :/

@DannyTalent It is certainly possible to implement this behaviour. Basically, when the headphones are plugged in the music will automatically start and when they are plugged out, it will stop.

commented

The music stopping is regular behavior I believe, but yeah it's an added plus

Excellent!

Will you make it a setting, so you can disable it?

@Bond-009 You mean a setting for "auto play when headphone is connected"?

@theweavrs Yes

@DannyTalent @Bond-009 How about a compact mode on PCs? Something like VLC when you reduced the height to minimum, perhaps.

@theweavrs That would be a nice feature.

suggestion: Adding multiple songs to a playlist at once (and maybe an add the whole library to playlist button)

suggestion: play queue, a short playlist that you can add songs to that will play before the regular next song
(can be the same feature as play next)

EDIT: queue

I want an option for different column items.

For example, I want to remove title and album from the columns, instead I want to show the file name and codec. Something like that.
It would be awesome to have such an option to change the column information.

And possible for generate Spectral Frequency diagram for music in UWP?
like this: http://i.stack.imgur.com/pXIap.png

@cdytoby I added your suggestions to the suggestions list, thank you so much. As for custom columns, they are planned in future releases so you can be sure that they are definitely coming. The spectral frequency diagram, on the other hand, is a bit complicated as UWP is devoid of any good in-built WPF-like drawing library. Of course, we have Win2D and I was able to draw a WaveForm with it. See the result here. Its pretty lousy but awesome for a start :)

Please add support for the Opus codec (and the .opus file extension, which is actually the Ogg container). BASS already has a plugin for Opus.

@myfreeweb Yes, you are quite right about that but it hasn't been ported to Windows Store yet but I will try the other one and see if it works. I am adding this to the suggestions list, thanks a lot. Keep tuned.

I've always hated iTunes, but they had a couple of nice features: For every song, you could set a separate start and endpoint for when it is played in shuffle (e.g to get rid of the album intro/outro to next song), or disable shuffling entirely. I plan to fork the branch and get to work on this, but how should we store this data? Any ideas?

@charliefoxtwo Storing this data is really really easy. In BreadPlayer.Core project, there is a Mediafile.cs model. Create the properties to hold data there. They will automatically get saved into the database. Next comes actually setting the values for StartPoint & EndPoint. Any ideas?

@theweavrs I'm not familiar with any of the APIs, but I assume we have the ability to start a song from whatever time stamp we want, right? We can just present a slider on the properties dialog of the song that allows the user to select start and end point. In order to stop at the end, we would probably need a function like Song.Play(int start, int duration);

The ability to fade in and out at the start/end of songs via a checkbox would also be beneficial.

@charliefoxtwo Fade in/out is already there and the Song.Play(int start, int duration) like function is also there.

@theweavrs Running into issues implementing the skip on shuffle. Since you can't create playlists currently, the only way for me to test is to reset my library and import an album as my library. However, for a 12 track library, I noticed severe problems with the track selection and playback - it will play a few songs, before getting stuck on one. Trying to skip forward or backward only pauses the current song. In other cases when on shuffle, it will skip between the same few songs. I also observed this behavior when sorting by artist or genre. I wanted to see if anyone else could confirm before I filed it as a bug though, just in case I somehow really messed something up on my fork.

@charliefoxtwo I am fixing the playlist feature, will push a commit today. The current library backend is really, really buggy and duct-taped. I plan on fixing all these issues, including #155. A much-needed clean-up of the code will also take place very soon. So, hopefully, these issues will be fixed.

@charliefoxtwo Can you please send me your log file? I would like to see all the error details.

@theweavrs I'll see if it has anything when I get home. Great to see so many issues closed today. Do you have an estimate as to when the new build might be out? I'd like to rebase onto it before continuing with the skip on shuffle implementation.

@charliefoxtwo 1-2 days probably but could be more or less. Basically, this release will be focused on bug-fixes so I am not adding anything big, so yeah 1-2 days probably and the new release will be out and about.

@theweavrs here is my log file

Log.txt

@charliefoxtwo I fixed all the exceptions in the Log file already. Thanks anyway 😄

@charliefoxtwo I have released the new version. You can continue with the skip on shuffle.

@theweavrs sweet! Will do.

@charliefoxtwo What news? Are you any closer to a basic implementation of the feature?

@theweavrs Haven't been able to work on it much this week. Started on it last weekend. Logic is implemented, just need to handle the UI and property binding. Was working on it last weekend (and I swear I had it working before I rebased...), and I'll get back to work on it this weekend for sure.

@charliefoxtwo Okay, no problem. If you are having any problem or if there are any other bugs you find, feel free to report.

Also, you should open a pull request for the feature, it will organize things more and you will find it easier to contribute further.

thanks

@theweavrs got some time to work on the Skip on Shuffle today. The property seems to not be persisting between each run of the application. Am I missing something?

private bool _skipOnShuffle;
public bool SkipOnShuffle { get => _skipOnShuffle; set => Set(ref _skipOnShuffle, value); }

I also reworked the shuffle method to check for the skip on shuffle option, which seems to be working. However, in line with my latest bug report, I think we should consider rebuilding the way the shuffle method works. I can try to tackle it, but I don't know how many little intricacies there are.

I also seem to be having an issue where songs aren't playing unless I manually click the play button in the bottom bar every time. Not sure what's going on there... I pulled a fresh version of the code from Github and it doesn't have that issue, but I'm not sure how I possibly could have messed that up.

@charliefoxtwo Sorry for the late response. I was having some internet issues.

About the persistence issue, yes that is expected. Basically, you have to call Database.Update() like function so that it may know that the value has updated. Look at this example:

await BreadDispatcher.InvokeAsync(async () =>
            {
                if (TracksCollection.Elements.Any(t => t.Path == lastPlayingSong.Path))
                {
                    lastPlayingSong.PlayCount++;
                    lastPlayingSong.LastPlayed = DateTime.Now.ToString(CultureInfo.CurrentCulture);
                    TracksCollection.Elements.First(T => T.Path == lastPlayingSong.Path).PlayCount++;
                    TracksCollection.Elements.First(T => T.Path == lastPlayingSong.Path).LastPlayed = DateTime.Now.ToString();
                    await _service.UpdateMediafile(lastPlayingSong); //this needs to be called
                }
                await ScrobblePlayingSong(lastPlayingSong);                
            });

This example code is used in saving the PlayCount and LastPlayed properties of the song that is ending. Which are further used in Recently Played and MostPlayed Lists. You will need to do something similar so that the Database knows that which file has updated and update that file.

I will talk about the shuffle on the new issue.

That issue #163 has been resolved. 😄 It wasn't your fault but a mistake on my end.

Hi, I don't really know what you use to show the user's library, but I think you use ListView to show all the user's music and ListView and SemanticZoom when grouping them based on artists. Can you please add the option so that the user's library when grouping them based on artists or albums would be displayed as grids instead of lists.

@ErwinSuwito I will add your suggestion to the suggestion list. What you are asking is possible but will take quite a rework so there will be sometime before you actually see it in production. Thanks for the suggestion.

Hi, how about streaming music from Media Servers. It seems a lot of touch screen friendly music player apps lack built in functionality to do so.

@thewan056 I think DLNA (# 2 suggestion) covers that or is Media Server Streaming different?

@theweavrs not necessarily. Some media players have DLNA servers, but lack the ability to stream from them. Having both would be a huge plus, but as there are many capable DLNA servers, I suggest prioritizing DLNA streaming over serving. That's just me though, as I want a touch-friendly music player with streaming from DLNA but I can't seem to find a nice player to do so.

@thewan056 DLNA and other devices is my first priority after I release v2.7.0. I already have done a basic device implementation but its not anything big. What I really want is Bread Player to detect Mobile and Media devices and then Sync and stream music from them. It will be a challenging task but I am looking forward to it.

What about an ability to download playlists to an MP3 player or USB thumbdrive?

Ability to use this player on Chrome via Chromebook would be nice.

@MilkmanDan Chrome Apps are JavaScript based and I don't think they can handle C# or any other such language officially.

As for your first request, Internet Capabilities are being implemented gradually. You will see a lot of improvements in the next versions. In the meantime, I will add your suggestion to the list.

Does this support AIFF-C (.aifc) files?