一项基于语音与文本和记录的项目

VoiceToText

项目包括声音到文本以及转录内容。

工作原理和解释

import SwiftUI
import Speech
import AVFoundation

当然,它导入了必需的框架。

@main
struct VoiceToTextApp: App {
    var body: some Scene {
        WindowGroup {
            VoiceToText()
        }
    }
}

@main:此属性表示 VoiceToTextApp 是应用程序的主入口点。在 SwiftUI 中,@main 属性用于指定应用程序的入口点。

struct VoiceToTextApp: App:这定义了一个名为 VoiceToTextApp 的结构,该结构符合 App 协议。App 协议在 SwiftUI 中对于创建和管理应用程序的结构至关重要。

var body: some Scene { ...}:在 SwiftUI 中,body 属性用于描述应用程序的结构。此处,它定义了一个 Scene,这在 SwiftUI 中是构建用户界面的基本概念。

WindowGroup { ...}:WindowGroup 代表主应用程序窗口。应用程序的用户界面在此处显示。

VoiceToText():此行创建 VoiceToText 视图的实例,该实例作为应用程序的主要内容。VoiceToText 视图是用户与语音到文本功能和其他应用程序功能交互的位置。

struct VoiceToText: View {
    @State private var isRecording = false
    @State private var recognizedText = ""
    @State private var audioEngine: AVAudioEngine?
    @State private var request: SFSpeechAudioBufferRecognitionRequest?
    @State private var transcripts: [String] = []
    @State private var recognitionTask: SFSpeechRecognitionTask?

isRecording:跟踪应用程序当前是否正在录制音频的布尔状态。 recognizedText:保存转录文本的字符串状态。 audioEngine:管理音频录制和播放的可选 AVAudioEngine 实例。 request:用于语音识别的可选 SFSpeechAudioBufferRecognitionRequest。 transcripts:用于存储录制的转录文本的字符串数组。 recognitionTask:用于管理语音识别的可选 SFSpeechRecognitionTask。

var body: some View {
    NavigationView {
        VStack {
            Spacer() // Push content to the center vertically

此代码设置了视图的总体结构。它使用 NavigationView 来建立导航层次结构。在 NavigationView 中,VStack 用于垂直组织内容。

            Text(recognizedText)
                .padding()
                .font(.subheadline)
                .multilineTextAlignment(.center)

Text 视图显示识别出的文本,并使用 padding、font 和 multilineTextAlignment 修饰符应用格式。

            recordingButton
                .padding(.bottom, 10)

这是一个自定义视图或函数(recordingButton),可能表示用于启动或停止录制音频的按钮。它包括边距,以便在它与以下按钮之间创建一个小间隙。

            saveTranscriptButton
                .padding(.bottom, 10)

与录制按钮类似,这表示用于保存转录文本的按钮。

            NavigationLink(destination: TranscriptListView(transcripts: $transcripts, saveFunction: saveTranscriptsToUserDefaults, loadFunction: loadTranscriptsFromUserDefaults)) {
                Label("Manage Transcripts", systemImage: "list.bullet.rectangle")
                    .buttonStyle(PrimaryButtonStyle(isDisabled: isRecording))
            }

NavigationLink 用于导航到另一个屏幕,可能是管理已保存的转录文本。它包括具有关联的系统图像和自定义按钮样式(PrimaryButtonStyle)的标签。TranscriptListView 会显示对转录文本数组的访问以及用于保存和加载转录文本的函数。

            Spacer() // Push content to the center vertically
        }
        .navigationTitle("Voice to Text")
        .onAppear {
            requestSpeechAuthorization()
            loadTranscriptsFromUserDefaults()
        }
    }
}

Spacer 视图有助于将内容垂直居中显示在 VStack 内。.navigationTitle 修饰符将导航栏的标题设置为“语音到文本”。.onAppear 修饰符在视图出现时触发两个操作:请求语音识别授权和从用户默认设置中加载转录文本。

此 VoiceToText 视图表示应用程序的主要用户界面,并提供录制、转录、保存和管理转录文本的功能。它显示在导航结构中,使其成为更广泛的应用程序界面的组成部分。

private var recordingButton: some View {

此行定义了一个名为 recordingButton 的私有计算属性。计算属性用于实时计算值,并且它们可以在 SwiftUI 视图中使用。

    Button(action: {
        isRecording.toggle()
        if isRecording {
            startRecording()
        } else {
            stopRecording()
        }
    }) {

代码的这一