removed unwanted bar now with waveforms
This commit is contained in:
@@ -291,6 +291,15 @@ struct DJAudioDevice: Identifiable, Equatable {
|
||||
func perform(_ action: () throws -> Void) { do { try action() } catch { self.error = error.localizedDescription } }
|
||||
func applyMix() { let weights = DJMix.weights(crossfader,curve:settings.crossfaderCurve);let output = master*pow(10,-settings.headroomDB/20);a.master = output;b.master = output;a.crossWeight = routing.mode == "External" ? 1 : weights.0;b.crossWeight = routing.mode == "External" ? 1 : weights.1 }
|
||||
func channel(_ letter: String) -> DJChannel { letter == "A" ? a : b }
|
||||
private(set) var nextLibraryDeck = "A"
|
||||
func loadFromLibraryDoubleClick(_ song: Song) {
|
||||
guard pendingReplacement == nil else { return }
|
||||
let target = nextLibraryDeck
|
||||
nextLibraryDeck = target == "A" ? "B" : "A"
|
||||
if channel(target).player.playing {
|
||||
pendingReplacement = .init(deck:target,song:song,urls:[])
|
||||
} else { load(song,into:target) }
|
||||
}
|
||||
func load(_ song: Song,into letter: String,overridePlaying: Bool = false,automated: Bool = false) {
|
||||
perform {
|
||||
let deck = channel(letter)
|
||||
@@ -818,9 +827,6 @@ struct DJConsole: View {
|
||||
header
|
||||
DJContinuousConsole(system:system,loadA:{loadSelected("A")},loadB:{loadSelected("B")}).fixedSize(horizontal:false,vertical:true)
|
||||
browser.frame(maxWidth:.infinity,maxHeight:.infinity)
|
||||
if let progress = system.waveformJob {
|
||||
WaveformProgressCard(progress:progress,running:system.generatingWaveforms,studio:"DJ",cancel:{system.cancelWaveforms()},details:{waveformDetails = true},dismiss:{system.dismissWaveforms()})
|
||||
}
|
||||
if let progress = system.importProgress {
|
||||
HStack {
|
||||
Text(progress.current).lineLimit(1);Text("\(progress.completed)/\(progress.total)").monospacedDigit()
|
||||
@@ -844,12 +850,24 @@ struct DJConsole: View {
|
||||
}
|
||||
.sheet(isPresented:$system.cueEditing) { DJCueEditor(system:system) }
|
||||
.sheet(isPresented:Binding(get:{system.loopEditor != nil},set:{if !$0 { system.loopEditor = nil }})) { let deck = system.channel(system.loopEditor ?? "A");DJLoopEditor(player:deck.player,letter:deck.letter) }
|
||||
.sheet(isPresented:$waveformDetails) {
|
||||
VStack(alignment:.leading,spacing:16) {
|
||||
Text("DJ Waveform Details").font(.title2.bold())
|
||||
ScrollView { Text(system.waveformJob?.messages.joined(separator:"\n\n") ?? "").textSelection(.enabled).frame(maxWidth:.infinity,alignment:.leading) }
|
||||
HStack { Spacer();Button("Done") { waveformDetails = false }.keyboardShortcut(.defaultAction) }
|
||||
}.padding(24).frame(width:620,height:400)
|
||||
.sheet(isPresented:Binding(get:{system.waveformJob != nil},set:{if !$0 { system.dismissWaveforms() }})) {
|
||||
if let progress = system.waveformJob {
|
||||
VStack(alignment:.leading,spacing:20) {
|
||||
Label("DJ Studio Waveforms",systemImage:"waveform").font(.title2.bold()).foregroundStyle(DJStyle.a)
|
||||
Text(system.generatingWaveforms ? "Preparing saved waveforms in the background." : "Completed waveforms are saved and ready to use.").font(.callout).foregroundStyle(.secondary)
|
||||
WaveformProgressCard(progress:progress,running:system.generatingWaveforms,studio:"DJ",cancel:{system.cancelWaveforms()},details:{waveformDetails.toggle()},dismiss:{system.dismissWaveforms()})
|
||||
if waveformDetails || !progress.messages.isEmpty {
|
||||
Text("Analysis Log").font(.headline)
|
||||
ScrollView { Text(progress.messages.isEmpty ? "No issues reported." : progress.messages.joined(separator:"\n\n")).font(.system(size:11,design:.monospaced)).textSelection(.enabled).frame(maxWidth:.infinity,alignment:.leading) }.frame(height:180)
|
||||
}
|
||||
HStack {
|
||||
Text("Cancelling keeps completed waveforms.").font(.caption).foregroundStyle(.secondary)
|
||||
Spacer()
|
||||
if !system.generatingWaveforms { Button("Done") { system.dismissWaveforms() }.buttonStyle(.borderedProminent).keyboardShortcut(.defaultAction) }
|
||||
}
|
||||
}.padding(26).frame(width:660).background(DJStyle.background).preferredColorScheme(.dark)
|
||||
.interactiveDismissDisabled(system.generatingWaveforms)
|
||||
}
|
||||
}
|
||||
.sheet(isPresented:$queueVisible) {
|
||||
VStack(spacing:16) {
|
||||
@@ -903,7 +921,7 @@ struct DJConsole: View {
|
||||
ForEach(visible) { song in
|
||||
HStack(spacing:8) {
|
||||
Button { system.toggleFavourite(song.id) } label: { GoldStar(filled:system.favourites.contains(song.id),size:15) }.buttonStyle(.plain).accessibilityLabel(system.favourites.contains(song.id) ? "Remove \(song.title) from favourites" : "Favourite \(song.title)")
|
||||
DJLibraryDragTitle(title:song.title,reference:system.dragReference(song.id),fontSize:system.settings.libraryFont,select:{selected = song.id}).frame(maxWidth:.infinity,alignment:.leading)
|
||||
DJLibraryDragTitle(title:song.title,reference:system.dragReference(song.id),fontSize:system.settings.libraryFont,select:{selected = song.id},doubleClick:{system.loadFromLibraryDoubleClick(song)}).frame(maxWidth:.infinity,alignment:.leading)
|
||||
Text(song.artist).font(.system(size:10)).foregroundStyle(.secondary).lineLimit(1).frame(width:130,alignment:.leading)
|
||||
Text(DJStyle.stamp(song.duration)).font(.system(size:10).monospacedDigit()).foregroundStyle(.secondary).frame(width:35)
|
||||
Button { system.automix.enqueue([song]) } label: { Image(systemName:"plus") }.accessibilityLabel("Add \(song.title) to DJ queue")
|
||||
|
||||
Reference in New Issue
Block a user