musikcube/CHANGELOG.txt

898 lines
34 KiB
Plaintext
Raw Normal View History

0.31.0
musikcube:
* added support for Ubuntu Artsy
* fixed and exposed album-level artwork. previously it was track-only.
* fixed notification icon color
musikdroid:
* gapless playback (for supported media)! enable in settings > playback
engine > "ExoPlayer Gapless (experimental)"
* album art is now displayed in album rows when browsing
* context menus on most screens with the ability to switch between related
content (e.g. albums by this artist, artists in this genre, etc)
* preliminary playlist creation support. more to come in the future
* added a simple "spotlight" tutorial for new users that explains switching
between remote and streaming playback modes.
* major refactor to the entire code base, including the following:
- a brand new data layer interface based on RxJava. this should position
the app for lots of new, fun stuff in the future.
- a new dependency injection implementation
- a view component layer for sharing functionality across screens
* updated Glide from v3 -> v4
* updated to Android Studio 3.0.1 and related tooling
sdk:
* removed all Destroy() methods, standardized on Release() across the board
* added the following to ISimpleDataProvider:
- QueryCategoryWithPredicate()
- SavePlaylistWithIds()
- SavePlaylistWithExternalIds()
- SavePlaylistWithTrackList()
- AppendToPlaylistWithIds()
- AppendToPlaylistWithExternalIds()
- AppendToPlaylistWithTrackList()
- RemoveTracksFromPlaylist()
- RenamePlaylist()
- DeletePlaylist()
* added new interfaces:
- IValue
- IEncoder
- IEncoderFactory
* removed interfaces:
- IRetainedTrack
- IRetainedTrackWriter
* renamed interfaces
- IMetadataMap -> IMap
- IMetadataMapList -> IMapList
- IMetadataReader -> ITagReader
- ITrackWriter -> ITagStore
- IMetadataValue -> IValue
- IMetadataValueList -> IValueList
server:
* renamed project from `websocket_remote` to `server`, and promoted to a
top-level component in the workspace
* added correct LAME headers after transcoding to fix gapless playback of
encoded files.
* added the following messages to the websocket server:
- save_playlist
- rename_playlist
- delete_playlist
- append_to_playlist
- remove_tracks_from_playlist
- query_tracks_by_external_ids
* renamed the following track fields:
- visual_genre_id -> genre_id
- visual_artist_id -> artist_id
* added the ability to query album art by id
* fixed HttpServer to ignore non-GET verbs
* added "predicated category queries", i.e. "all the albums for this artist" or
"all the artists in this genre", etc.
* added "artist" and "artistId" to album response (previously it was only
return "albumArtist" and "albumArtistId")
* fixed bugs related to HTTP "Range" header parsing and generation
* fixed a bug in the websocket functionality that was returning invalid
"invalid_request" responses... yeah.
--------------------------------------------------------------------------------
2017-09-20 04:52:21 +00:00
0.26.0
* added the ability to rebind UP, DOWN, LEFT, RIGHT, PAGE_UP, PAGE_DOWN, END and
HOME keys to allow for VIM-style key bindings
* fixed a focus related bug when switching between main views
--------------------------------------------------------------------------------
2017-09-09 04:03:37 +00:00
0.25.2
musikcube:
* upgraded to a new version of the windows sdk (10.0.15063.0)
* added some missing checks in WideCharToMultiByte (and MultiByteToWideChar)
that could result in access violations on windows
* added a hidden setting for enabling indexer logging (set IndexerLogEnabled in
settings.json)
musikdroid:
* added the ability to rename connection presets
* fixed a crash in SystemService related to unregistered intents
* upgraded to android studio beta 5
--------------------------------------------------------------------------------
2017-08-25 02:33:14 +00:00
0.25.1
musikcube:
* fixed a bug in FlacDecoder::Exhausted that was causing issues with the
server's transcoder.
--------------------------------------------------------------------------------
2017-08-25 00:46:37 +00:00
0.25.0
musikcube:
* fixed a crash in the m4a decoder
* updated some linux dependencies
* added a build for raspbian stretch
musikdroid:
* fixed playback notification so it works properly with Android O
* updated settings ui to include a way to save and load connections
* fixed a couple random crashes that surfaced in fabric
* removed android-specific dagger cruft; just use vanilla dagger
* updated support library and build tooling versions
--------------------------------------------------------------------------------
2017-08-14 04:39:21 +00:00
0.24.0
musikcube:
* added the ability for the user to select the output device (i.e. soundcard
or port) audio will be rendered to. previously we always used the system's
default device.
* fixed some transcoder and cdda bugs that prevented streaming cd audio to
remote (e.g. android) clients.
* fixed a (potential) memory leak in the indexer when extracting album artwork
* matthiaskrgr pointed out some memory leaks, and KTRosenberg fixed them.
musikdroid:
* fixed (potential) crash when trying to display the update check dialog.
low-level:
* fixed a bug in CddaDataStream where the active reader would not have exclusive
access to the output device.
* added new SDK interfaces for enumerating audio devices that are available to
output drivers.
--------------------------------------------------------------------------------
0.23.0
musikcube:
* fixed album artist support for FLAC, OGG, and M4A files. users with existing
2017-08-14 04:39:21 +00:00
libraries that are having problems should re-import their files.
* fixed CDDB lookup for mixed-mode discs in Windows
* fixed a bug in the low-level audio processing that could leak memory until
2017-08-14 04:39:21 +00:00
the playing track completed
* allow M-ENTER to also activate the context menu for album header rows.
(ENTER still works as well)
* fixed the NullOut plugin -- it was not taking channel count into account when
2017-08-14 04:39:21 +00:00
calculating buffer duration
* added support for Manjaro Linux
musikdroid:
* fixed a crash in SystemService::onStartCommand where the Intent's "action"
2017-08-14 04:39:21 +00:00
was not being null-checked.
* suppressed a strange crash related to the Room library not initializing the
2017-08-14 04:39:21 +00:00
database properly
--------------------------------------------------------------------------------
0.22.0
musikcube:
* fixed compile issues and startup crashes on Fedora, ArchLinux and openSUSE
* fixed a bug where playback speed may be incorrect for audio files that do
not have exactly two channels.
* fixed a crash that could occur in the WASAPI output plugin for audio streams
with very low sampling rates
* fixed crash when parsing "TCOP" id3v2 tag (ilitirit-za)
* fixed double-wide character truncation and ellipsizing (stephanwilliams)
* added a new setting to disable startup update checks
* sync'd PDCurses with the upstream repo
musikdroid:
* fixed a couple (relatively obscure) crashes
* updated build environment to Android Studio Canary 8 with Support Libraries
26.0.0 (final)
low-level:
* fixed the way we define C++ flags in CMakeLists.txt so it works across more
platforms, e.g. FreeBSD (geier)
* fixed GetApplicationDirectory() null termination error (mkilgore)
* updated the way we calculate audio buffer sizes and counts to ensure there
is always enough headroom for audio with very low sampling rates
* updated the mpg123 decoder so it compiles and runs again against the latest
version of the library and musikcube sdk.
--------------------------------------------------------------------------------
2017-07-22 18:57:06 +00:00
0.21.1
* updated a few of the symbols used for drawing things like dropdowns and
checkmarks so they work with a wider variety of fonts
--------------------------------------------------------------------------------
2017-07-20 01:35:09 +00:00
0.21.0
* musikbox binary renamed to musikcube. build scripts, documentation, website
and everything else updated accordingly.
--------------------------------------------------------------------------------
0.20.2
2017-07-19 04:47:20 +00:00
* "add tracks", "add category", and "select playlist" context menus now remember
the last selected item for 60 seconds. this makes adding multiple things to
the same playlist (or play queue) much easier.
* fixed startup crash on older versions of macos
--------------------------------------------------------------------------------
2017-07-20 01:35:09 +00:00
0.20.1
* arrow keys can now select items in the shortcuts window while focused.
--------------------------------------------------------------------------------
0.20.0
* added play queue "hot-swap". you can now swap a different list of tracks
into an active play queue without disrupting playback. if the hot-swap
action finds the playing track in the new list, it'll be automatically
selected as the active track. focus a tracklist and press `M-a` to hot-swap.
* fixed a bug that was causing extended track metadata to be parsed incorrectly
examples include bitrate, channels, lyrics, etc.
* fixed a bug where the category list view may jump around a bit during the
indexing process.
--------------------------------------------------------------------------------
0.19.2
* start the metadata indexer immediately after adding or removing paths from
the settings view. this functionality was previously disabled due to
performance issues and a bug with the indexer. these problems have all been
addressed.
--------------------------------------------------------------------------------
2017-07-06 05:21:18 +00:00
0.19.1
* re-introduced the multi-threaded indexer! this makes metadata scanning quite
a bit faster on some systems
* fixed a bug where the selected item in browse view may change during the
indexing process if more music is added to the library
--------------------------------------------------------------------------------
2017-07-05 05:51:41 +00:00
0.19.0
* fixed a bug where the wrong (or multiple) items may be highlighted in browse
view if they all have the same name
* fixed a bug where seeking while paused wouldn't update the ui properly in
some cases, leaving the paused animation running while audio was playing
--------------------------------------------------------------------------------
0.18.0
user-facing:
* added first-class support for browse playlists:
- press `5` in library browse view to switch to playlists
- press `M-r` to rename the selected playlist
- press `M-s` to save the selected playlist
- highlight the left pane, and press `DEL` (`BACKSPACE` on macos) to delete
the selected playlist
- press `M-up` (`CTRL-UP` on macos) to move the selected track up
- press `M-down` (`CTRL-DOWN` on macos) to move the selected track down
- highlight the right pane, and press `DEL` (`BACKSPACE` on macos) to delete
the selected track from the playlist
* added view titles in library browse mode, now playing, and search views
* added auto-update check functionality to notify users when a new version is
available. also added manual update check to settings
* rearranged some items on the settings screen
2017-06-29 06:20:07 +00:00
* removed "playback mode" from musikdroid settings screen. we have a quick
toggle now!
low-level:
* ported musikdroid to kotlin. goodbye, java.
--------------------------------------------------------------------------------
0.17.2
user-facing:
* fixed a bug where usernames with non-latin characters may cause the
`websocket_remote` and `httpdatastream` plugins to crash during startup.
* fixed startup issues on windows computers that do not have the visual c++ 14
runtime installed.
--------------------------------------------------------------------------------
0.17.0
* added code to win32 build that ensures only a single instance is running
* fixed auto-dpi scaling in windows so `musikbox` displays properly out of the
box on high dpi (4k) displays
* added the ability to browse and play cached tracks in `musikdroid` while
offline.
* fixed a bug that was preventing the transcoder cache from functioning properly
2017-06-18 01:46:17 +00:00
* integrated `fabric.io` into `musikdroid` for crash reporting
* added new "empty" and "offline" view states to all screens in `musikdroid`
* fixed a couple `musikdroid` crashes in playback-related code
low-level:
* updated to boost 1.64.0
* started converting some `musikdroid` sources to `kotlin`
* added missing `track_num` field to track resources in `websocket_remote`
* fixed local cache filename generation in `musikdroid`
--------------------------------------------------------------------------------
2017-06-05 02:12:25 +00:00
0.16.0
user-facing:
* added a toggle in the `musikdroid` toolbar for quickly switching between
remote and streaming mode
* removed volume and seek buttons; replaced with a seekbar, current and
total time indicators.
* revamped loading indicators to be less jarring
low-level:
* integrated with a customized version of the `AndroidVideoCache` library to
(hopefully) improve caching reliability.
* improved battery usage in `musikdroid`'s `SystemService`
* fixed bug where `websocket_remote` was not letting clients know when seeking
has occurred.
* deliberately under-estimate calculated `Content-Length` header when doing
on-demand transcoding. http clients seem to be more ok with this, as compared
to over-estimating.
* fixed a bug where `websocket_remote` audio server would incorrectly return a
216 status instead of a 200, confusing clients
--------------------------------------------------------------------------------
0.15.0
user-facing:
2017-06-05 02:12:25 +00:00
* added `server settings` configuration panel to the settings screen
* added `minimize to tray` and `start minimized` options to the windows build
* a handful of small `musikdroid` bug fixes, mostly related to audio focus
and ducking.
* documented the `websocket_remote` api on the wiki
low-level:
2017-06-05 02:12:25 +00:00
* added authentication support to the the `websocket_remote` audio server
* found and fixed a handful of missing `websocket_remote` metadata responses
* added the ability to hot-reload plugins
* modified `IPlugin` -- every plugin must now supply a unique `guid`
* fixed a bug in Transcoder if the number of cache files was set to 0
* fixed a number of bugs that could result in undefined behavior or crashes if
views are drawn outside of their parents (or screen) bounds
* fixed a bug where input fields may stop drawing properly if the value entered
by the user exceeds the window bounds
--------------------------------------------------------------------------------
2017-05-20 02:57:53 +00:00
0.14.0
user-facing:
* `musikdroid` enhancements:
- `pause` when headphones are disconnected
- `double tap` headset button to go to next track
- `triple tap` headset button to go to prev track
- added album art to lock screen controls
- added the ability to control streaming disk cache size
* `websocket_remote` plugin:
- added Cache-Control headers to responses
* `core`:
- found a really bad bug in the way we handle tracks in playlists. the fix
requires a rebuild of the tracks metadata, which will clear playlists, but
ensures this will never happen again in the future.
low-level:
* cleaned up more SDK interfaces, removed support for uint64 and uint32 types,
only support int64 and int32.
* fixed bugs in playlist track handling; playlist contents can now survive track
table rebuilds!
--------------------------------------------------------------------------------
2017-05-08 05:36:28 +00:00
0.13.0
user-facing:
* added on-demand audio transcoding (downsampling) to the http server. users
can configure transcoding in the `musikdroid` client.
* fixed a bug in album id handling to properly support multiple albums with the
same name by different artists (this was only half working before).
* added ssl support to the `musikdroid` client, and instructions on the wiki
for enabling ssl on the server-side.
* added `buffering` indicators to `musikdroid`.
low-level:
* added missing IBuffer::Destroy method, and added IEnvironment::GetBuffer so
plugins can decode audio data.
--------------------------------------------------------------------------------
0.12.1
user-facing:
* huge update to `musikdroid` -- it is now able to stream music from any
`musikbox` installation! see settings > playback mode.
* added cddb (actually, freedb) lookup for audio CDs
* added new "add to beginning of play queue" and "play album" context menu
options
low-level:
* fixed database upsert logic to be faster and more reliable
--------------------------------------------------------------------------------
2017-04-21 06:41:44 +00:00
0.12.0
user-facing:
* fixed bug where "sync on startup" was not working properly
* fixed musikdroid bug where ui may get drawn in a weird state if the playing
track has an empty album name.
* fixed a bug in CddaIndexerSource that may cause tracks to linger in the
library longer than they should if the drive letter changed.
* added an http server to the `websocket_remote` plugin to serve audio data.
this completes most work required to support external, thin clients.
metadata can be queried via websocket, audio streamed over http. powered by
libmicrohttpd.
low-level:
* added HttpDataStream! finally! uses libcurl and libressl. audio data can now
be played over http/https!
* performance optimizations to metadata indexing -- drop indexes before a full
resync, then re-add them after.
* playlist tracks are now stored by external ids! this means tracks added from
third party indexer sources can be added to playlists and persisted across
rescans.
* IIndexerSources can be interrupted, and failed sources can have their changes
rolled back.
* upgraded to Windows 10 SDK and VS141 tooling
--------------------------------------------------------------------------------
2017-04-04 14:32:50 +00:00
0.11.0
user-facing:
* added a new cd playback plugin based on new infrastructure. audio cds will
be detected and added to the library as [audio cd] and can be played like
any other tracks. (note: win32 only for now)
* added the ability to toggle between seek and scrub playback modes
* fixed a couple localized strings
* fixed a bug that could cause the currently selected item in the play queue
to jump around or be incorrect.
low-level:
* added IIndexerSource interface: plugins will be able to implement this
interface to add tracks to the library that will be indexed and
maintained like all other tracks
* added IIndexerWriter interface: IIndexerSource plugins will use this
interface to add/remove/update track info with the main app
* added IIndexerNotifier: interface used to notify the app that it needs
to be re-indexed.
* added "source_id" , "external_id", and "visible" column to the tracks
table, with appropriate indexes.
* fixed a really old indexer bug where the reported number of file scanned
was not accurate. Strange this wasn't noticed before.
* added "SetIndexerNotifier" injection method
* fixed a bug in TrackMetadataQuery -- it was unnecessarily relying upon
the paths table, which was causing query errors when the table was
empty.
* use a cache for local file paths instead of requiring an async round
trip when adding/removing
* remove use of manual "ANALYZE", it was causing strange performance
degradation issues. Instead, move to a set of PRAGMAs that instructs
sqlite to run these optimizations when necessary.
* updated ::GetInt32 and ::GetUint32 return types to be explicit as to play
more nicely with clang -- may as well, we're updating the SDK version
anyway.
* added a simple capabilities model to the playback infrastructure. This
is used to detect whether or not streams can be prefetched. For example,
CDDA cannot because of seek times while playing tracks.
--------------------------------------------------------------------------------
2017-03-27 17:30:45 +00:00
0.10.2
* fixed clang 7.3 compile error (macOS mavericks should work again)
--------------------------------------------------------------------------------
2017-03-23 00:08:21 +00:00
0.10.1
user-facing:
* added the ability to select album name headers in track lists. doing so will
bring up a context menu with the ability to jump to the album or enqueue the
album's tracks for playback. this also had a nice side effect of making
scrolling more fluid!
* added jumping to album/artist/genre to the selected track context menu
2017-03-23 00:08:21 +00:00
* fixed a really old bug that could cause lists to automatically scroll to weird
places if the window or view is resized
* directory browser now remembers which directories were previously selected,
making up navigation in the settings view smoother
2017-03-23 00:08:21 +00:00
* added a "list_header_highlighted_background" and
"list_header_highlighted_foreground" color theme variables
* tweaked the win32 icon so it looks a bit better on the taskbar
2017-03-23 00:08:21 +00:00
low-level:
* added "broadcast" message support to IMessageQueue and implementers. allows
for pub/sub like functionality
* added some new SDK interface methods to ITrack and IMetadataMap for retrieving
values other than strings (uint64, int64, uint32, int32, double)
* added localization support for "dimensions". this allows for per-locale sizing
of ui components
2017-03-23 00:08:21 +00:00
* fixed some old bugs in Window.cpp that could cause visibility changed
notifications to be raised unnecessarily
* added a custom PDCurses/win32a patch to further reduce CPU load and context
switching while draining the message pump
2017-03-23 00:08:21 +00:00
--------------------------------------------------------------------------------
2017-03-19 01:03:05 +00:00
0.10.0
* added GeekShadow's fr_FR locale
* fixed a bug in locale loading
* fixed a bug in nomad decoder if file load fails
* updated `Player` <-> `Stream` interaction so it's possible to interrupt long,
blocking reads (e.g. if an http stream loader existed)
--------------------------------------------------------------------------------
0.9.5
* added localization support
* added support for user-defined themes (solarized dark and light included as
examples)
* patched PDCurses/win32a to support the standard *nix 256 color palette
--------------------------------------------------------------------------------
2017-03-11 03:57:41 +00:00
0.9.4
* added a "syncing metadata" banner that is displayed while the indexer is
scanning metadata
* added a "sync metadata on startup" option to the settings view
* moved the hotkey tester to its own dedicated dialog to free up some valuable
screen real estate in the settings view
* fixed `PulseOut` plugin volume adjustment to work better across a wider
range of audio cards. this should also improve crossfade quality
* fixed a very old bug that was sometimes causing delayed redraws or flickering
during layout in complex views
--------------------------------------------------------------------------------
0.9.3
win32 only release:
* updated `WASAPI` output plugin to disable endpoint routing by default. it
causes a crash in some rare cases that i don't seem to be able to work
around. i see similar crashes in firefox and some other apps that use this
feature.
* updated `DirectSound` output volume adjustment to be as close to the `WASAPI`
`WaveOut` plugins as possible
* changed compiler optimizations to favor fast code, instead of small code,
plus a few other small tweaks to (hopefully) improve performance.
--------------------------------------------------------------------------------
2017-03-01 15:06:51 +00:00
0.9.2
* added an icon to the windows and android builds (not great, but better than
nothing!)
* fixed a bug in the `nomad` (mp3) plugin where sample rate wasn't being
handled appropriately. songs were sometimes playing too fast or slow.
2017-03-04 21:44:00 +00:00
* fixed a bug in the websockets plugin for certain metadata in locales that
use commas instead of periods for decimal points
2017-03-01 15:06:51 +00:00
* added compression support to the `websocket_remote` plugin and the
`musikdroid` android app
* fixed a crash when trying to manipulate an empty play queue in specific
contexts
* fixed the win32 global volume up / volume down hotkeys to be consistent with
the main app and `websocket_remote` behavior.
* changed data directory from "~/.mC2" to "~/.musikcube". the app will
automatically perform this rename on startup.
2017-03-01 15:06:51 +00:00
--------------------------------------------------------------------------------
2017-02-24 19:05:57 +00:00
0.9.1
* added an app icon on win32 and android builds
2017-02-24 19:05:57 +00:00
* added proper support for using and switching between different audio sample
formats. 24/192k works across all platforms now.
* fixed `DirectSoundOut` pause to work properly again
* added support for statically linking dependencies. for now we can supply
macOS binaries that don't require homebrew! let's try to keep it that way.
* updated some defaults -- rescan metadata on startup by default, and restrict
to two processing threads.
* fixed a crash when trying to change tracks in an empty playlist queue
2017-02-24 19:05:57 +00:00
--------------------------------------------------------------------------------
0.9.0
user-facing:
* added new `musikdroid` android remote control! super userful with a Raspberry
Pi. run musikbox in the background and control it from your phone.
* added a new `websocket_remote` plugin that allows any client capable of
communciating with websockets the ability to control playback and query
metadata!
* added settings UI for enabling/disabling plugins within the app!
2017-02-19 05:04:51 +00:00
* added more granular volume control when adjusting below 10%
* fixed a crash on shutdown while in track search view
low-level:
* added new sdk interfaces:
- `ISimpleDataProvider`: can be used to query tracks, albums, artists, genres
- `IMetadataValue` and `IMetadataValueList`: lists of metadata values and ids
- `IMetadataMap` and `IMetadataMapList`: maps of values for resource ids
- `IPreferences` for reading and writing preferences
* updated sdk interfaces:
- `ITrack`: added `getId()`
- `IPlaybackService`: the ability to modify or replace the play queue
- `ITrackList`: added const correctness
- renamed `IMetadataWriter` to `ITrackWriter`
* added the ability for plugins to register to receive `IPreferences` and
`ISimpleDataProvider` interfaces via `SetPreferences()` and
`SetSimpleDataProvider`, respectively. see `websocket_remote` for an example
* fixed up `PluginFactory` to store and provide more metadata about plugins
when querying them.
* fixed a deadlock in `PlaybackService` when changing tracks from
`IPlaybackRemote` plugins.
* fixed another WASAPI audio endpoint routing bug
* fixed some win32 project settings to allow profile guided optimizations (was
broken for some plugins)
* fixed 'deprecated' compiler warnings on macOS
* seed the random number generator at startup
--------------------------------------------------------------------------------
2017-01-23 01:29:04 +00:00
0.8.0
user-facing:
* added support for Raspberry Pi running Raspbian!
* added preliminary support for playlist editing. all editing is currently
in the play queue view.
- `ALT+s`: save the current play queue to a named playlist
- `ALT+l`: load a previously saved playlist
- `ALT+x`: delete a playlist
- `ALT+r`: rename a playlist
2017-01-23 01:29:04 +00:00
* added the ability to delete (BACKSPACE on mac, DEL on win32/linux) and reorder
(ALT+UP/ALT+DOWN win32/mac, CTRL+UP/CTRL+DOWN linux ) selected items in the
play queue.
* added better color fallback for non-mutable 256 termianl color palettes
* added the ability to enqueue selected tracks, albums, artists, or other
resources to the play queue by pressing ALT+ENTER.
* fixed a crash when trying to play a track that has been removed from the
database
2017-01-28 19:47:17 +00:00
* fixed (maybe) an impossible-to-reproduce bug in PulseAudio where the output
volume was not getting properly initialized
* removed "esc focuses shortcut bar" setting. no longer useful.
low-level:
2017-01-23 01:29:04 +00:00
* fixed cursespp child view coordinates to be relative to their parents
* cleaned up global focus model in cursespp
* added IPlaybackService::GetPlayingTrack() to get an IRetainedTrack pointer
to the currently playing track; bumped SdkVersion to 2.
2017-01-23 01:29:04 +00:00
--------------------------------------------------------------------------------
0.7.3
reduce CPU usage during playback in macOS CoreAudioOut
include the null output plugin in macOS and Linux builds.
--------------------------------------------------------------------------------
2017-01-13 05:17:56 +00:00
0.7.2
mostly performance and architecture changes:
* created new 'src/glue' package that contains code that can be optionally
included and reused by other applications, but is too high-level for
src/core
* cpu reduction and code simplification in 'Stream' and 'Player'
* cpu reduction in 'MessageQueue'
* reduced locking in 'Player' and 'MessageQueue'
* tweaked music library interface to optionally deliver results to a specified
'IMessageQueue'
* moved 'PlaybackService' and 'TrackList' into 'core'
* optimized floating point sample scaling in the 'nomad' mp3 decoder
* reduced cpu overhead when redrawing the transport view
* added bare-bones, 'proof of concept' win32 application that includes 'core'
and 'glue' to present a very basic music player in just a few lines of code.
2017-01-14 20:06:01 +00:00
* added a NullOut, an output plugin that doesn't write to the sound card. useful
for development and testing purposes.
2017-01-13 05:17:56 +00:00
bug fixes:
* fixed default output plugin selection logic
* fixed a crash in WASAPI stream routing
--------------------------------------------------------------------------------
0.7.1
user-facing:
* fixed the flac decoder. oops.
* changed focus behavior in search view -- pressing return in the edit field
will now focus the tracklist after starting playback
* added sdk and plugin versioning. the plugin loader will only load plugins
with a supported version.
low-level
* removed pre-buffering code from Player, let Stream worry about that
* moved from boost to std for most threading (boost still used in the indexer)
* removed some unused boost dependencies from CMakeLists.txt
* various small optimizations to help reduce CPU overhead in MessageQueue and
Player.
--------------------------------------------------------------------------------
0.7.0
a big release with lots of changes to low-level machinery.
user-facing:
* added a new "crossfade" playback mode that can be used instead of "gapless".
users can change this functionality in the settings view.
* fixed audio artifacts in WasapiOut and DirectSoundOut when pausing and
resuming playback multiple times very quickly.
* fixed a really bad bug where dialogs could not be easily dismissed in some
cases. this included the first-run dialog! yikes.
low-level:
* added Latency() and Drain() methods to the IOutput interface
* reduced CPU load in some output plugins by being less aggressive about keeping
the output buffers 100% full all the time. 75%+ fill rate should be
sufficient.
* generalized MessageQueue and moved it out of app, and into core so it can be
reused for other functionality (e.g. crossfading)
* added support for "mix points" in Player -- get a callback as soon as a
specific playback position is hit!
* fixed DirectSoundOut to fall back to software mixing if hardware mixing is
unavailable
* fixed DirectSoundOut to start playback immediately, instead of sometimes
requiring the buffer to be completely full
--------------------------------------------------------------------------------
0.6.2
* added a DirectSound output plugin for the win32 build.
--------------------------------------------------------------------------------
0.6.1
* replaced mpg123 decoder with MAD. gapless playback for a much wider variety of
mp3s!
* optimized indexing process by maintaining an in-memory database id cache. uses
a bit more memory (temporarily, during indexing) but improves indexing speed.
--------------------------------------------------------------------------------
0.6.0
* added the ability to have multiple output plugins, and the ability switch
between them in settings
* added a new default output plugin for win32 (WASAPI) and linux (PulseAudio)
* changed a bunch of low-level ui code to substantially reduce layout passes and
redraws
* made a few small changes to the main ui, including basic listview headers if
the window grows large enough
--------------------------------------------------------------------------------
0.5.0
user-facing:
* remember volume and repeat settings across app launches
* improved visualizer quality
* reduced download size by a couple megabytes
low-level:
* optimized Stream and Player communication. more direct, less locking. no more
weird deferred cleanup
* removed fftw3 dependency in favor of kiss_fft. much smaller download now
* added a proper windowing algorithm to audio samples before they are handed to
the fft process
* fixed audio de-interleaving issue which lead to funky fft results in some
cases
* included a new spectrum visualizer sample called GdiVis (win32 only for now)
* overhauled some parts of the audio engine to ensure buffer size is consistent
during playback. this makes visualization quality better, and should make it
easier to integrate with things like JACK and PulseAudio.
--------------------------------------------------------------------------------
0.4.1
* fixed the transport readout to be more legible
* fixed a crash in NowPlayingLayout when the window became too small
* improved the IPlaybackService and IPlaybackRemote interfaces, and introduced a
new IRetainedTrack type.
* upgraded build environment to visual studio 2017
--------------------------------------------------------------------------------
0.4.0
* updated transport focus behavior to be less confusing -- it was previously too
easy to accidentally focus the transport.
* added mute functionality. focus the volume control and press enter or just
press m while browsing your library.
* added new IPlaybackRemote and IPlaybackService sdk interfaces to support
writing plugins that can control playback and be notified of playback events.
--------------------------------------------------------------------------------
0.3.5
* various small visualizer-related fixes.
--------------------------------------------------------------------------------
0.3.4
* visualizer support! press v to show the picker! a couple samples (Milkdrop2
and projectM) are included below. unzip these to your musikbox\plugins
directory.
* fixed a nasty unicode conversion bug.
* various other small fixes
--------------------------------------------------------------------------------
0.2.2
* small improvements to the transport view, including the display of the volume
percentage next to the volume slider.
--------------------------------------------------------------------------------
0.2.1
2017-02-19 05:04:51 +00:00
* initial "public" release