feat: differentiate between mic and system audio in transcript

This commit is contained in:
Owen Gretzinger
2025-07-10 16:54:27 -04:00
parent 297bb40b89
commit dfb1b79f0c
4 changed files with 197 additions and 21 deletions
+65 -3
View File
@@ -1,21 +1,83 @@
import Foundation
enum AudioSource: String, Codable, CaseIterable {
case mic = "MIC"
case system = "SYS"
var displayName: String {
switch self {
case .mic:
return "Microphone"
case .system:
return "System Audio"
}
}
var icon: String {
switch self {
case .mic:
return "mic.fill"
case .system:
return "speaker.wave.2.fill"
}
}
}
struct TranscriptChunk: Codable, Identifiable, Hashable {
let id: UUID
let timestamp: Date
let source: AudioSource
let text: String
let isFinal: Bool
init(id: UUID = UUID(), timestamp: Date = Date(), source: AudioSource, text: String, isFinal: Bool = false) {
self.id = id
self.timestamp = timestamp
self.source = source
self.text = text
self.isFinal = isFinal
}
}
struct Meeting: Codable, Identifiable, Hashable {
let id: UUID
let date: Date
var transcript: String
var transcriptChunks: [TranscriptChunk]
var userNotes: String
var generatedNotes: String
init(id: UUID = UUID(),
date: Date = Date(),
transcript: String = "",
transcriptChunks: [TranscriptChunk] = [],
userNotes: String = "",
generatedNotes: String = "") {
self.id = id
self.date = date
self.transcript = transcript
self.transcriptChunks = transcriptChunks
self.userNotes = userNotes
self.generatedNotes = generatedNotes
}
// Computed property for backward compatibility with existing code
var transcript: String {
return transcriptChunks
.filter { $0.isFinal }
.map { "[\($0.source.rawValue)] \($0.text)" }
.joined(separator: " ")
}
// Separate computed properties for mic and system transcripts
var micTranscript: String {
return transcriptChunks
.filter { $0.source == .mic && $0.isFinal }
.map { $0.text }
.joined(separator: " ")
}
var systemTranscript: String {
return transcriptChunks
.filter { $0.source == .system && $0.isFinal }
.map { $0.text }
.joined(separator: " ")
}
}