SwiftUI + SwiftData + iCloud, Apple Speech transcription (German), audio recording, summarization service protocol (LLM-ready), localization scaffolding (EN/DE/ES/FR), basic tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
38 lines
970 B
Swift
38 lines
970 B
Swift
import Foundation
|
|
import SwiftData
|
|
|
|
@Model
|
|
final class VoiceMemo {
|
|
var audioFileName: String
|
|
var transcript: String?
|
|
var isTranscribing: Bool
|
|
var duration: TimeInterval
|
|
var recordedAt: Date
|
|
var entry: DiaryEntry?
|
|
|
|
init(audioFileName: String, duration: TimeInterval) {
|
|
self.audioFileName = audioFileName
|
|
self.transcript = nil
|
|
self.isTranscribing = false
|
|
self.duration = duration
|
|
self.recordedAt = .now
|
|
}
|
|
|
|
var audioURL: URL {
|
|
Self.audioDirectory.appendingPathComponent(audioFileName)
|
|
}
|
|
|
|
var formattedDuration: String {
|
|
let minutes = Int(duration) / 60
|
|
let seconds = Int(duration) % 60
|
|
return String(format: "%d:%02d", minutes, seconds)
|
|
}
|
|
|
|
static var audioDirectory: URL {
|
|
let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
|
.appendingPathComponent("VoiceMemos", isDirectory: true)
|
|
try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)
|
|
return directory
|
|
}
|
|
}
|