Skip to content

Commit c454b2c

Browse files
author
dogatech
committed
add ability to switch audio output using midi
1 parent 9f32c4d commit c454b2c

5 files changed

Lines changed: 40 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Presteps:
3535
* (to build) install npm modules
3636
* global: node-gyp
3737
* locally with npm install
38-
* required libs (brew install): mysql-connector-c++ (no brew; just download & copy in right locations), libtag, mad, boost, ffmpeg, g3log (1.3.4 (<=c++14)), cliclick
38+
* required libs (brew install): mysql-connector-c++ (no brew; just download & copy in right locations), libtag, mad, boost, ffmpeg, g3log (1.3.4 (<=c++14)), cliclick, switchaudio-osx
3939
* sudo launchctl config user path /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
4040
* It can read MixedInKey values from id3 tags. Settings:
4141
* Update custom "initial key" tag

be/src/SoulSifterSettings.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ namespace soulsifter {
4848
//ptree.put("google.appKey", "");
4949
//ptree.put("google.email", "");
5050
//ptree.put("google.androidId", "");
51+
//ptree.put("midi.audioOutput.left", "");
52+
//ptree.put("midi.audioOutput.leftName", "");
53+
//ptree.put("midi.audioOutput.right", "");
54+
//ptree.put("midi.audioOutput.rightName", "");
5155
//ptree.put("midi.browse", "");
5256
//ptree.put("midi.controllerName", "");
5357
//ptree.put("midi.loadLeft", "");

fe/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "SoulSifter",
33
"version": "1.10.0",
44
"description": "DJ & music organization app.",
5-
"build": 4213,
5+
"build": 4220,
66
"main": "main.js",
77
"scripts": {
88
"fe:build": "vite build",

fe/src/settings-edit.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ class SettingsEdit extends SettingsMixin(LitElement) {
7878
<md-filled-text-field label="Volume" .value=${this.midiVolumeValue} id="midiVolumeValue" allowedPattern="${rawMidiPattern}"></md-filled-text-field>
7979
<br>
8080
<md-filled-text-field label="Preview Start Time (in %)" .value=${this.songListPreviewStartPercent} id="songListPreviewStartPercent"></md-filled-text-field>
81+
<br>
82+
<md-filled-text-field label="Audio source 1 midi" .value=${this.midiAudioOutputLeft} id="midiAudioOutputLeft"></md-filled-text-field>
83+
<md-filled-text-field label="Audio source 1 name" .value=${this.midiAudioOutputLeftName} id="midiAudioOutputLeftName"></md-filled-text-field>
84+
<md-filled-text-field label="Audio source 2 midi" .value=${this.midiAudioOutputRight} id="midiAudioOutputRight"></md-filled-text-field>
85+
<md-filled-text-field label="Audio source 2 name" .value=${this.midiAudioOutputRightName} id="midiAudioOutputRightName"></md-filled-text-field>
8186
</div>
8287
<div class="fields">
8388
<label>Midi for VDJ stem responsiveness</label>
@@ -173,6 +178,10 @@ class SettingsEdit extends SettingsMixin(LitElement) {
173178
this.editAutoPlay = this.settings.getBool('edit.autoPlay');
174179
this.feedlyDevToken = this.settings.getString('feedly.devToken');
175180
this.feedlyUserId = this.settings.getString('feedly.userId');
181+
this.midiAudioOutputLeft = this.settings.getString('midi.audioOutput.left');
182+
this.midiAudioOutputLeftName = this.settings.getString('midi.audioOutput.leftName');
183+
this.midiAudioOutputRight = this.settings.getString('midi.audioOutput.right');
184+
this.midiAudioOutputRightName = this.settings.getString('midi.audioOutput.rightName');
176185
this.midiBrowse = this.settings.getString('midi.browse');
177186
this.midiControllerName = this.settings.getString('midi.controllerName');
178187
this.midiLoadLeft = this.settings.getString('midi.loadLeft');
@@ -315,6 +324,10 @@ class SettingsEdit extends SettingsMixin(LitElement) {
315324
this.putb('edit.autoPlay', this.shadowRoot.getElementById('editAutoPlay').checked);
316325
this.puts('feedly.devToken', this.shadowRoot.getElementById('feedlyDevToken').value);
317326
this.puts('feedly.userId', this.shadowRoot.getElementById('feedlyUserId').value);
327+
this.puts('midi.audioOutput.left', this.shadowRoot.getElementById('midiAudioOutputLeft').value);
328+
this.puts('midi.audioOutput.leftName', this.shadowRoot.getElementById('midiAudioOutputLeftName').value);
329+
this.puts('midi.audioOutput.right', this.shadowRoot.getElementById('midiAudioOutputRight').value);
330+
this.puts('midi.audioOutput.rightName', this.shadowRoot.getElementById('midiAudioOutputRightName').value);
318331
this.puts('midi.browse', this.shadowRoot.getElementById('midiBrowse').value);
319332
this.puts('midi.controllerName', this.shadowRoot.getElementById('midiControllerName').value);
320333
this.puts('midi.loadLeft', this.shadowRoot.getElementById('midiLoadLeft').value);

fe/src/song-list.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,26 @@ class SongList extends AlertsMixin(
465465
}
466466

467467
registerMidiCallbacks() {
468+
const util = require('util');
469+
const exec = util.promisify(require('node:child_process').exec);
470+
midiManager.registerInput(
471+
this.settings.getString('midi.audioOutput.left'),
472+
async e => {
473+
if (this._audioOutput != this.settings.getString('midi.audioOutput.leftName')) {
474+
await exec(`SwitchAudioSource -s "${this.settings.getString('midi.audioOutput.leftName')}"`);
475+
this._audioOutput = this.settings.getString('midi.audioOutput.leftName');
476+
}
477+
}
478+
);
479+
midiManager.registerInput(
480+
this.settings.getString('midi.audioOutput.right'),
481+
async e => {
482+
if (this._audioOutput != this.settings.getString('midi.audioOutput.rightName')) {
483+
await exec(`SwitchAudioSource -s "${this.settings.getString('midi.audioOutput.rightName')}"`);
484+
this._audioOutput = this.settings.getString('midi.audioOutput.rightName');
485+
}
486+
}
487+
);
468488
midiManager.registerInput(
469489
this.settings.getString('midi.loadLeft'), // 70
470490
e => {
@@ -536,7 +556,7 @@ class SongList extends AlertsMixin(
536556
composed: true,
537557
detail: { song: this.midiSelectedListItem.song, pct: startPct, player: this.midiSelectedListItem }
538558
});
539-
this.dispatchEvent(event);
559+
setTimeout(() => this.dispatchEvent(event), 200); // wait for audio output to switch
540560
}
541561
);
542562
}

0 commit comments

Comments
 (0)