46 lines
898 B
Swift
46 lines
898 B
Swift
import SwiftUI
|
|
import AudioEngine
|
|
|
|
struct PlaybackControls: View {
|
|
@Bindable var engine: AudioEngine
|
|
|
|
var body: some View {
|
|
HStack(spacing: 32) {
|
|
Button(action: { engine.skipBackward() }) {
|
|
Image(systemName: "backward.fill")
|
|
.font(.title2)
|
|
}
|
|
.disabled(engine.state == .idle)
|
|
|
|
Button(action: togglePlayback) {
|
|
Image(systemName: playButtonIcon)
|
|
.font(.title)
|
|
}
|
|
|
|
Button(action: { engine.skipForward() }) {
|
|
Image(systemName: "forward.fill")
|
|
.font(.title2)
|
|
}
|
|
.disabled(engine.state == .idle)
|
|
}
|
|
.padding()
|
|
}
|
|
|
|
private var playButtonIcon: String {
|
|
switch engine.state {
|
|
case .playing: "pause.fill"
|
|
case .synthesizing: "hourglass"
|
|
case .paused: "play.fill"
|
|
case .idle: "play.fill"
|
|
}
|
|
}
|
|
|
|
private func togglePlayback() {
|
|
switch engine.state {
|
|
case .playing: engine.pause()
|
|
case .paused: engine.resume()
|
|
default: break
|
|
}
|
|
}
|
|
}
|