diff --git a/src/renderer/controllers/audio-tracks-controller.js b/src/renderer/controllers/audio-tracks-controller.js new file mode 100644 index 00000000..e7044161 --- /dev/null +++ b/src/renderer/controllers/audio-tracks-controller.js @@ -0,0 +1,17 @@ +const { dispatch } = require('../lib/dispatcher') + +module.exports = class AudioTracksController { + constructor (state) { + this.state = state + } + + selectAudioTrack (ix) { + this.state.playing.audioTracks.selectedIndex = ix + dispatch('skip', 0.2) // HACK: hardcoded seek value for smooth audio change + } + + toggleAudioTracksMenu () { + const audioTracks = this.state.playing.audioTracks + audioTracks.showMenu = !audioTracks.showMenu + } +} diff --git a/src/renderer/lib/state.js b/src/renderer/lib/state.js index a68eed3e..763b37d3 100644 --- a/src/renderer/lib/state.js +++ b/src/renderer/lib/state.js @@ -105,6 +105,11 @@ function getDefaultPlayState () { selectedIndex: -1, /* current subtitle track */ showMenu: false /* popover menu, above the video */ }, + audioTracks: { + tracks: [], + selectedIndex: 0, /* current audio track */ + showMenu: false /* popover menu, above the video */ + }, aspectRatio: 0 /* aspect ratio of the video */ } } diff --git a/src/renderer/main.js b/src/renderer/main.js index 7864ca5f..f5440568 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -99,6 +99,10 @@ function onState (err, _state) { const SubtitlesController = require('./controllers/subtitles-controller') return new SubtitlesController(state) }), + audioTracks: createGetter(() => { + const AudioTracksController = require('./controllers/audio-tracks-controller') + return new AudioTracksController(state) + }), torrent: createGetter(() => { const TorrentController = require('./controllers/torrent-controller') return new TorrentController(state) @@ -281,6 +285,10 @@ const dispatchHandlers = { checkForSubtitles: () => controllers.subtitles().checkForSubtitles(), addSubtitles: (files, autoSelect) => controllers.subtitles().addSubtitles(files, autoSelect), + // Audio Tracks + selectAudioTrack: (index) => controllers.audioTracks().selectAudioTrack(index), + toggleAudioTracksMenu: () => controllers.audioTracks().toggleAudioTracksMenu(), + // Local media: