feat: add split L/R playback mode for audio sync comparison

This commit is contained in:
Honney OC committed 2026-09-15 19:04:55 +00:00
1 parent 51118dd2b9
commit 9c00d2e781
1 file changed
+8 -2
+8 -2
View File
@@ -269,6 +269,7 @@ class SyncWindow(QtWidgets.QMainWindow):
self.btn_play_a = QtWidgets.QPushButton("Play A") self.btn_play_a = QtWidgets.QPushButton("Play A")
self.btn_play_b = QtWidgets.QPushButton("Play B+lag") self.btn_play_b = QtWidgets.QPushButton("Play B+lag")
self.btn_play_mix = QtWidgets.QPushButton("Play Mix") self.btn_play_mix = QtWidgets.QPushButton("Play Mix")
self.btn_play_split = QtWidgets.QPushButton("Play L/R")
self.btn_stop = QtWidgets.QPushButton("Stop") self.btn_stop = QtWidgets.QPushButton("Stop")
ctr2.addWidget(QtWidgets.QLabel("Duration:")) ctr2.addWidget(QtWidgets.QLabel("Duration:"))
@@ -281,10 +282,10 @@ class SyncWindow(QtWidgets.QMainWindow):
self.play_dur.setMaximumWidth(80) self.play_dur.setMaximumWidth(80)
ctr2.addWidget(self.play_dur) ctr2.addWidget(self.play_dur)
for b in [self.btn_play_a, self.btn_play_b, self.btn_play_mix, self.btn_stop]: for b in [self.btn_play_a, self.btn_play_b, self.btn_play_mix, self.btn_play_split, self.btn_stop]:
ctr2.addWidget(b) ctr2.addWidget(b)
if not HAS_SD: if not HAS_SD:
for b in [self.btn_play_a, self.btn_play_b, self.btn_play_mix, self.btn_stop]: for b in [self.btn_play_a, self.btn_play_b, self.btn_play_mix, self.btn_play_split, self.btn_stop]:
b.setEnabled(False) b.setEnabled(False)
b.setToolTip("sounddevice not installed — run make install (optional)") b.setToolTip("sounddevice not installed — run make install (optional)")
ctr2.addWidget(QtWidgets.QLabel("(sounddevice missing — playback disabled)")) ctr2.addWidget(QtWidgets.QLabel("(sounddevice missing — playback disabled)"))
@@ -307,6 +308,7 @@ class SyncWindow(QtWidgets.QMainWindow):
self.btn_play_a.clicked.connect(lambda: self.play("a")) self.btn_play_a.clicked.connect(lambda: self.play("a"))
self.btn_play_b.clicked.connect(lambda: self.play("b")) self.btn_play_b.clicked.connect(lambda: self.play("b"))
self.btn_play_mix.clicked.connect(lambda: self.play("mix")) self.btn_play_mix.clicked.connect(lambda: self.play("mix"))
self.btn_play_split.clicked.connect(lambda: self.play("split"))
self.btn_stop.clicked.connect(self.stop_play) self.btn_stop.clicked.connect(self.stop_play)
self.update_labels() self.update_labels()
@@ -513,6 +515,10 @@ class SyncWindow(QtWidgets.QMainWindow):
elif which == "mix": elif which == "mix":
mix = (a_seg + b_seg) / 2.0 mix = (a_seg + b_seg) / 2.0
sd.play(mix, samplerate=sr) sd.play(mix, samplerate=sr)
elif which == "split":
# A on left, B on right
stereo = np.column_stack([a_seg, b_seg])
sd.play(stereo, samplerate=sr)
except Exception as e: except Exception as e:
print(f"playback failed {e}", file=sys.stderr) print(f"playback failed {e}", file=sys.stderr)