Sessions - 0x213F/jukebox-radio GitHub Wiki
Synopsis
A session is the main user interface of Jukebox Radio. It is where a user goes to listen to music.
Music services
Jukebox Radio allows users to listen to music from the following services. Additional music services can be found listed on the feature requests wiki page.
Spotify
In order to listen to music from Spotify:
- The user must have a Spotify Premium account.
- The user approve Jukebox Radio to access to their Spotify data and features.
YouTube
There are no authentication requirements for YouTube.
Manual upload
Users may manually upload audio files. Jukebox Radio securely stores and manages these files.
Player
Default configuration
The session has a queue, which is initially empty. Tracks and collections (definition) may be added to the queue.
Since the queue is initially empty, nothing is initially playing when a session is loaded for the first time. When the first item is added to the queue, it is not automatically played. This behavior is intentional. This allows the user to prepare the queue before listening to it.
This next point may be confusing to those unfamiliar with the underlying code that powers Jukebox Radio. This is more of an important technical implementation detail for engineers to be mindful of. A session is initialized with a null
queue item "now playing." This doesn't really mean much to the end user. The only thing this enables is the ability to "rewind" all the way to the beginning. Doing that would idle the player and require the user to click "next track" to resume playback.
Controls
Next track
Play the next track in the queue.
Previous track
Play the previous track in the queue.
Pause track
Pause the track currently playing in the session.
Play track
Play the track currently paused in the session.
Scan forward
Scan forward 10 seconds in the currently playing track.
Scan backwards
Scan backward 10 seconds in the currently playing track.
Queue management
Search
A user may search across all services to add music to the queue.
Markers
Users may create and delete markers at various positions in a track. For example, a user may decide to drop a marker at the start of a verse.
These markers are exposed both in the player and the feed when the track is playing in the user's session.
Markers persist outside of a queue instance. For example, consider the following:
User A
queues upTrack B
.User A
createsMarker C
onTrack B
.User A
listens toTrack B
- When
User A
is listening toTrack B
,Marker C
is present.
- When
- A day later,
User A
queues upTrack B
.- When
User A
is listening toTrack B
,Marker C
is present.
- When
Intervals
Users may create and delete intervals in a queued track. These intervals reflect how the track will be played back. The interval types supported include:
- Skipping an interval.
Intervals do not persist outside of its queue instance. For example, consider the following:
User A
queues upTrack B
.User A
createsInterval D (skipped)
onTrack B
.User A
listens toTrack B
- When
User A
is listening toTrack B
,Interval D (skipped)
is skipped.
- When
- A day later,
User A
queues upTrack B
.- When
User A
is listening toTrack B
,Interval D (skipped)
is not present. The full track is played.
- When
Collection management
Consider a collection with 100 tracks. If you add that collection to your queue:
- In Spotify it creates 100 queue items.
- In Jukebox Radio it creates 1 queue item.
While managing the queue, collection queue items may be expanded and collapsed. When expanded, all of the tracks inside the collection are displayed. Individual tracks may be edited or deleted from the queue.
Feed
Text comments
The user may create text comments while music is playing or paused.
Historical text comments (relative to the currently playing track) will also be displayed.
Text comment modifications
The user may markup words in a text comment. They may add the following style:
- Bold
Strikethrough- Italicize
Styles are applied after submitting the text comment. To apply the style, a user must select the text they want to markup. A tooltip will appear above the selected text with buttons allowing the user to choose what style to apply to their selection.
This feature was originally implemented using Rough Notation, but the feature has since been modified due to a lack of engineering resources.
Voice recordings
The user may create voice recordings while music is playing. The voice recording is also transcribed to text.
Historical voice recordings (relative to the currently playing track) will also be displayed.
Player updates
Relevant updates to the player will be shown in the feed. This is done to give the user context and clarity on the state of the player.
- Markers encountered
- Intervals encountered
- The latest relevant action (e.g. the session is paused)
Recording - not yet implemented
This feature is selected for development. It has not yet been implemented due a shortage of engineering resources.
This feature is scheduled to be completed by the end of Q1 2021.
A session may be recorded. Saved sessions can be played back at a later time and shared publicly via a user's profile.
Django technical specifications
React technical specifications
Live streaming - not yet implemented
This feature is selected for development. It has not yet been implemented due a shortage of engineering resources.
Settings
Idle after queue
Default: False
This value signifies wether the playback should go idle after the currently playing queue item finishes.
The currently playing queue item is the highest level queue item. For example, consider the case where a collection (with 2 or greater tracks) is queued up and this setting value is True
. Playback will go idle after the collection finishes, not after the first track of the collection finishes.
Speak voice recordings
Default: True
This value signifies wether the voice recordings should be spoken. When spoken, the playback volume dims to allow the voice recording to be heard.
When this value is False
, the voice recording is not spoken. In lieu, the user may read the voice recording transcription.
Focus mode
Default: Off
This value signifies wether the feed should be put in focus mode.
In focus mode, the feed is completely empty. Both historical items and player updates are not displayed. Text comments and voice recordings which are newly created dissipate shortly after being recorded.
There is one small technical detail about focus mode. This value may not be changed if the active session is currently recording.