2017-12-07 18 views
0

음성 텍스트의 특정 단어에 중점을 추가하려고합니다. AVSpeechSynthesizer - 특정 단어 강조

import SpriteKit 
import PlaygroundSupport 
import AVFoundation 

let bounds = CGRect(x: 0, y: 0, width: 400, height: 200) 
let skview = SKView(frame: bounds) 

PlaygroundPage.current.liveView = skview 

var voices = [ 
    (volume: 0.5, rate: 0.5, text: "This is a "), 
    (volume: 1.0, rate: 0.2, text: "HUGE"), 
    (volume: 0.5, rate: 0.5, text: "deal") ] 

    var utterances: [AVSpeechUtterance] = [] 
    for voice in voices { 
     let utterance = AVSpeechUtterance(string: voice.text) 
     utterance.voice = AVSpeechSynthesisVoice(language: "en-US") 
     utterance.volume = Float(voice.volume) 
     utterance.rate = Float(voice.rate) 
     utterance.preUtteranceDelay = 0 
     utterance.postUtteranceDelay = 0 
     utterances.append(utterance) 
    } 
    let synth = AVSpeechSynthesizer() 
    for utterance in utterances { 
     synth.speak(utterance) 
    } 

나는 발언 사이에 일시 정지 덜 것으로 예상된다. 위 코드는 "This is a .. HUGE .. Deal"입니다.

반면, 일시 중지 시간이 너무 길고 음성이 끊어지는 소리가납니다 (사전 및 지연을 0으로 설정 했음에도 불구하고).

"이것은 ..... 거친 .... 거래"입니다.

내가 잘못 했나요? 연설에 중점을 두는 더 좋은 기술이 있습니까?

이 게시물 on word stress은`기호를 사용하는 것이 좋습니다. 그러나 더 많은 효과를 찾고있었습니다.

답변

0

MacOS Cocoa Speech Synthesizer API는 TUNE 형식을 지원합니다. 즉, 강조, 음량 변경, 비율 변경 및 기타 멋진 것들에 대한 기호가있는 텍스트 인코딩입니다. 그래서 코코아 API를 사용하여 텍스트를 음성으로 합성하고, 오디오 파일로 저장하고, 오디오 파일을 iOS 프로젝트의 리소스로 포함시킵니다. iOS 앱에서 말하는 텍스트가 동적으로 생성되는 경우 물론 이것은 효과가 없습니다.

다음은 오디오를 강조하여 녹음하는 코코아 운동장입니다.

import Cocoa 
import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 
let synth = NSSpeechSynthesizer(voice:   NSSpeechSynthesizer.VoiceName(rawValue: "com.apple.speech.synthesis.voice.samantha")) 
synth?.volume = 0.5; 
let saveURL = NSURL(fileURLWithPath: NSString(string: "~/Desktop/SpokenText.aiff").expandingTildeInPath); 
synth?.startSpeaking("This is a [[rate -100; volm + 0.5]]HUGE[[rate +100; volm - 0.5]] deal", to: saveURL as URL) 

여기 iOS에서 저장된 오디오 파일을 재생하도록 업데이트 된 스위프트 놀이터입니다. 빌 찬 (Bill Chan)의 답변 덕분에 discussion on playing AV within playground에 감사드립니다. (IMP : 녹음 된 파일을 놀이터에서 먼저 자원으로 가져 오기)

import SpriteKit 
import PlaygroundSupport 
import AVFoundation 
let bounds = CGRect(x: 0, y: 0, width: 400, height: 200) 
let skview = SKView(frame: bounds) 
PlaygroundPage.current.liveView = skview 
PlaygroundPage.current.needsIndefiniteExecution = true 

let path = Bundle.main.path(forResource: "SpokenText", ofType: "aiff")! 
let url = NSURL(fileURLWithPath: path) 
var playerItem = AVPlayerItem(url: url as URL); 
var player = AVPlayer(playerItem: playerItem) 
var playerLayer = AVPlayerLayer(player: player) 
playerLayer.frame = bounds; 
skview.layer.addSublayer(playerLayer) 
player.play()