Как увеличить громкость в AVSpeechUtterance в swift

Все, что я использую в проекте AVSpeechUtterance для преобразования текста в речь, когда я бегу в симуляторе, работает нормально, но когда я бегу на своем устройстве, громкость речи здесь очень низкая, мой код...

        let utterance = AVSpeechUtterance(string: "Good night all")

    if UserDefaults.standard.string(forKey: "LNG") == "Eng"
    {
        utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
    }
    else
    {
        utterance.voice = AVSpeechSynthesisVoice(language: "de-DE")
    }

    utterance.rate = AVSpeechUtteranceDefaultSpeechRate
    utterance.volume = 1
    let synth = AVSpeechSynthesizer()
    synth.speak(utterance)

2 ответа

Значение по умолчанию, вероятно, отличается для устройств. Вы проверили?

Вы можете узнать, что настроено на устройстве, выбрав «Настройки»> «Универсальный доступ»> «Разговорный контент».

Дайте пользователю возможность настроить эту скорость, потому что идеальная скорость, вероятно, отличается для многих

      import SwiftUI
import Speech
class SpeechManager:ObservableObject{
    //The default value is likely different for the devices
    //You can also look up what the device has set by going to Settings>Accessibility>Spoken Content
    var defaultRate = AVSpeechUtteranceDefaultSpeechRate
    //Values like this is the intended use of UserDefaults
    //You can create an app specific value for this rate
    var userSpeechRate: Float{
        get{
            UserDefaults.standard.value(forKey: "userSpeechRate") as? Float ?? AVSpeechUtteranceDefaultSpeechRate
        }
        set{
            UserDefaults.standard.set(newValue, forKey: "userSpeechRate")
            objectWillChange.send()
        }
    }
    //This is mostly your code with the exception of setting a custom rate
    func sayGoodNight(){
        let utterance = AVSpeechUtterance(string: "Good night all")
        
        if UserDefaults.standard.string(forKey: "LNG") == "Eng"
        {
            utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
        }
        else
        {
            utterance.voice = AVSpeechSynthesisVoice(language: "de-DE")
        }
        //Change this to use the
        utterance.rate = userSpeechRate
        utterance.volume = 1
        let synth = AVSpeechSynthesizer()
        synth.speak(utterance)
    }
}
struct SpeechView: View {
    @StateObject var vm: SpeechManager = SpeechManager()
    var body: some View {
        VStack{
            Text("default rate \(vm.defaultRate)")
            Text("user rate \(vm.userSpeechRate)")
            Slider(value: $vm.userSpeechRate, in: 0...1, label: {Text("speech rate")})
            Button("say goodnight", action: {
                vm.sayGoodNight()
            })
        }
    }
}

struct SpeechView_Previews: PreviewProvider {
    static var previews: some View {
        SpeechView()
    }
}

Попробуйте установить свой utterance.volume = 1.0

Другие вопросы по тегам