hakko / subsonic Goto Github PK
View Code? Open in Web Editor NEWA streaming music server. Based on Subsonic, with MusicCabinet integration.
A streaming music server. Based on Subsonic, with MusicCabinet integration.
Hi hakko,
first of all: thank you for your work, musiccabinet is awesome!
I got one suggestion: what about track.getSimilar? That feature would be really great at parties and could be integrated into the playlist. I have no experience at all with last.fm and java, so unfortunately I can't program this myself. But maybe you like the idea?
Another thing: The downsampling command in the transcoding section only works with mp3 files, all other files are just piped. Any chance to change that behavior? ffmpeg doesn't care for the input (downsampling can be done with ffmpeg instead of lame).
//edit: this is set in https://github.com/hakko/subsonic/blob/master/subsonic-main/src/main/java/net/sourceforge/subsonic/service/TranscodingService.java in line 438. I guess just removing that check should do the trick.
Regards,
Moritz
Needs to be broken down, but in general: phase out current playlist engine and replace with something less annoying.
Enhance configuration page with details on whether last import finished normally, possibly an error, amount of imported data etc.
Auto-complete artist names in top search bar.
Add some configuration to control how album artwork is loaded. (last.fm, embedded, files from directory etc)
Ideally, it should be optional which method to use and which order they are run in.
When MusicCabinet supports updating of tag info, add GUI support as well to edit/store.
For artists with many albums, add a link at the bottom of the page for switching between sorting by album year/name without bothering to alter the default behavior via personal settings.
If an artist biography reads "ABBA was a pop group", replace the link "pop" leading to last.fm, with a link leading to local artists labelled as "pop"?
Include album name when scrobbling tracks to last.fm.
Make it chronological.
Subsonic keeps track of number of plays, recently played etc. Replace by using last.fm scrobbling statistics instead, it's more accurate.
For instance there's an artist called Röyksopp and there is no way to find results when seraching for Röyksopp.
See screenshots:
http://cl.ly/image/3w412D362J3w
http://cl.ly/image/3o0y072Q0X00
Imho it should be even found when I search for Royksopp without the umlaut.
I can give you access to my server if you want to test this.
There are other examples like "Пётр Ильич Чайковский" what should be findable with "Pyotr Ilyich Tchaikovsky" ( artist-sort / ALBUMARTISTSORT in the Tags) but isn't.
Here are the tags for one of my Tchaikovsky files:
Input #0, mp3, from '101 Piotr Il'ich Chaikovskii - Nutcracker Suite_ Overture.mp3':
Metadata:
title : Nutcracker Suite: Overture
artist : Пётр Ильич Чайковский
track : 1/16
album : The Nutcracker Suite / Swan Lake Suite
disc : 1/1
Album Artist Credit: Пётр Ильич Чайковский
MusicBrainz Album Artist Id: 9ddd7abc-9e1b-471d-8031-583bc6bc8be9
MusicBrainz Artist Id: 9ddd7abc-9e1b-471d-8031-583bc6bc8be9
Script : Latn
album_artist : Пётр Ильич Чайковский
TCMP : 0
Artist Credit : Пётр Ильич Чайковский
ALBUMARTISTSORT : Tchaikovsky, Pyotr Ilyich
MusicBrainz Release Group Id: fbcc0088-ced6-3336-aa54-8aa2bba83896
artist-sort : Tchaikovsky, Pyotr Ilyich
MusicBrainz Album Id: d64de377-218c-4d59-b996-6e60eb98eba9
TBPM : 0
Duration: 00:03:20.18, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 320 kb/s
Regards,
Moritz
Add "enqueue" as an option to "play" and "add".
0.7 issue
Subsonic 4.6 uses CoverArtScheme.OFF and settingsService.getCoverArtLimit().
Remove them from settings, or make them work as expected.
I recently reinstalled Subsonic to another server and noticed Artists dropdown is empty and tag configuration displays "Sorry, but you don't have enough music for this to be meaningful. Please add some more artists." even if everything has been scanned.
Last.fm redesigned their site and API so I think it's related to this.
[2015-09-07 12:54:29] DEBUG UserRecommendedArtistsService - allowed: false, successful: false, errorCode: 0, errorMessage: null, errorRecoverable: false, responseBody: null
[2015-09-07 12:54:29] ERROR SearchIndexUpdateExecutorService - com.github.hakko.musiccabinet.service.lastfm.ArtistTopTagsService@617da81b failed with an unexpected error.
java.lang.NullPointerException
at com.github.hakko.musiccabinet.parser.lastfm.ArtistTopTagsHandler.endElement(ArtistTopTagsHandler.java:62)
at com.ctc.wstx.sr.BasicStreamReader.fireSaxEndElement(BasicStreamReader.java:1698)
at com.ctc.wstx.sax.WstxSAXParser.fireEvents(WstxSAXParser.java:614)
at com.ctc.wstx.sax.WstxSAXParser.parse(WstxSAXParser.java:537)
at com.ctc.wstx.sax.WstxSAXParser.parse(WstxSAXParser.java:307)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
at com.github.hakko.musiccabinet.parser.AbstractSAXParserImpl.parseFromStream(AbstractSAXParserImpl.java:29)
at com.github.hakko.musiccabinet.parser.lastfm.ArtistTopTagsParserImpl.loadTopTags(ArtistTopTagsParserImpl.java:23)
at com.github.hakko.musiccabinet.parser.lastfm.ArtistTopTagsParserImpl.<init>(ArtistTopTagsParserImpl.java:18)
at com.github.hakko.musiccabinet.service.lastfm.ArtistTopTagsService.updateSearchIndex(ArtistTopTagsService.java:47)
at com.github.hakko.musiccabinet.service.lastfm.SearchIndexUpdateExecutorService$Worker.run(SearchIndexUpdateExecutorService.java:78)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Some search index update jobs involve slow database updates that aren't reported to progress indicator. Add some field to support them as well and tell the user what's going on. (may seem stalled as nothing happens)
Add starring methods introduced in REST API 1.8.0.
Subsonic Jetty version is 6, which is maintenance mode. JSP support is based on jasper 6.0.13 from Apache Tomcat, which doesn't support precompilation of JSPs. (?)
Upgrade Jetty and start using Glassfish support for JSP 2.1 instead, then precompile and trim whitespace.
subsonic-booter/pom.xml:
[groupId]org.eclipse.jetty.aggregate[/groupId]
[artifactId]jetty-all[/artifactId]
[version]7.5.4.v20111024[/version]
[groupId]org.mortbay.jetty[/groupId]
[artifactId]jsp-2.1-glassfish[/artifactId]
[version]2.1.v20100127[/version]
More investigation needed.
Allow paging while browsing artists by genre.
Needs MusicCabinet support.
For REST API, include cover art for each track in generated playlists.
Hi there,
Sorry... Got another one for you.
Looks like the subsonic-main is missing a dependency.
Thanks again,
Aaron.
aaron@theone:~/workspace/subsonic/subsonic-main$ mvn -X package
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_06, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: en_CA, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-29-generic-pae", arch: "i386", family: "unix"
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from /usr/share/maven/conf/settings.xml
[DEBUG] Reading user settings from /home/aaron/.m2/settings.xml
[DEBUG] Using local repository at /home/aaron/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /home/aaron/.m2/repository
[INFO] Scanning for projects...
[DEBUG] Extension realms for project net.sourceforge.subsonic:subsonic-main:war:0.7: (none)
[DEBUG] Looking up lifecyle mappings for packaging war from ClassRealm[plexus.core, parent: null]
[DEBUG] === REACTOR BUILD PLAN ================================================
[DEBUG] Project: net.sourceforge.subsonic:subsonic-main:war:0.7
[DEBUG] Tasks: [package]
[DEBUG] Style: Regular
[DEBUG] =======================================================================
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Subsonic Main 0.7
[INFO] ------------------------------------------------------------------------
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] === PROJECT BUILD PLAN ================================================
[DEBUG] Project: net.sourceforge.subsonic:subsonic-main:0.7
[DEBUG] Dependencies (collect): []
[DEBUG] Dependencies (resolve): [compile, runtime, test]
[DEBUG] Repositories (dependencies): [com.springsource.repository.bundles.release (http://repository.springsource.com/maven/bundles/release, releases+snapshots), com.springsource.repository.bundles.external (http://repository.springsource.com/maven/bundles/external, releases+snapshots), local1 (file:repo, releases+snapshots), local2 (file:../repo, releases+snapshots), java_net (http://download.java.net/maven/2/, releases+snapshots), central (http://repo.maven.apache.org/maven2, releases)]
[DEBUG] Repositories (plugins) : [Codehaus Repository (http://repository.codehaus.org/, releases+snapshots), central (http://repo.maven.apache.org/maven2, releases)]
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-antrun-plugin:1.6:run (default)
[DEBUG] Style: Regular
[DEBUG] Configuration:
${localRepository}
${plugin.artifacts}
${project}
${sourceRoot}
0.7.7
${DSTAMP}
0.7
${testSourceRoot}
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-resources-plugin:2.3:resources (default-resources)
[DEBUG] Style: Regular
[DEBUG] Configuration:
${encoding}
${maven.resources.escapeString}
${project.build.filters}
${maven.resources.includeEmptyDirs}
${project.build.outputDirectory}
${maven.resources.overwrite}
${project}
${project.resources}
${session}
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile)
[DEBUG] Style: Regular
[DEBUG] Configuration:
${maven.compiler.compilerId}
${maven.compiler.compilerReuseStrategy}
${maven.compiler.compilerVersion}
${maven.compiler.debug}
${maven.compiler.debuglevel}
${encoding}
${maven.compiler.executable}
${maven.compiler.failOnError}
${maven.compiler.fork}
${maven.compiler.maxmem}
${maven.compiler.meminitial}
${maven.compiler.optimize}
${project.build.finalName}
${maven.compiler.showDeprecation}
${maven.compiler.showWarnings}
${maven.compiler.skipMultiThreadWarning}
Don't toggle after DOM is loaded, it doesn't work as planned.
Currently, the code creates a new database which requires access to the postgres user credentials. This is a major security hole and not really the way to do it. It should be possible to specify an unprivileged postgres user and use a schema within that user's database.
Allow updating all tags that MusicCabinet somehow makes use of (album artist, lyrics, composer, sort artist, sort album artist).
When MusicCabinet supports updating of artist info, add GUI support as well to edit/store/mark as changed.
Suggestion to make the "star" button mark the track as "loved" on Lastfm.
When trying to scan the library this error pops up in subsonic.log
[2013-08-04 22:57:45,888] DEBUG SearchSettingsController - update search index, scan type normal
[2013-08-04 22:57:46,167] WARN SearchService - Search index update failed!
java.lang.NullPointerException
at com.github.hakko.musiccabinet.io.LibraryScanner.visitFile(LibraryScanner.java:49)
at com.github.hakko.musiccabinet.io.LibraryScanner.visitFile(LibraryScanner.java:20)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:135)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:69)
at java.nio.file.Files.walkFileTree(Files.java:2591)
at java.nio.file.Files.walkFileTree(Files.java:2624)
at com.github.hakko.musiccabinet.service.library.LibraryScannerService.update(LibraryScannerService.java:63)
at com.github.hakko.musiccabinet.service.LibraryUpdateService.createSearchIndex(LibraryUpdateService.java:80)
at net.sourceforge.subsonic.service.SearchService$1.run(SearchService.java:85)
Display top three tags for artists in their biography (if present in radio tags/genre tags?).
Add a configuration setting for displaying album ratings (currently controlled by user role).
Tracks should be reported as "now playing" immediately, and as "scrobbled" after 75% or so of track length.
Streaming/buffering may work different on mobile units, make sure it works for them as well!
It's supported in default Subsonic, but was left out when upgrading to Spring Security 3.1.
Updating artist for "Chroniques de Mars" only changed file names without an "&" ?
Updating album artist seems to be written to according to Foobar, not to "Album artist"?
Go through it and create separate issues for all bugs found.
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.