Jiwift

[iOS/Swift] TTS 볼륨 조절, 내비게이션과 같이 음량 조절하기. 미디어 볼륨, 내 앱 소리만 조절하기 본문

iOS Dev/Swift

[iOS/Swift] TTS 볼륨 조절, 내비게이션과 같이 음량 조절하기. 미디어 볼륨, 내 앱 소리만 조절하기

지위프트 2023. 5. 9. 22:37
반응형

카카오내비, TMAP(티맵)과 같은 볼륨 조절

 

 

 iOS에서 어플리케이션을 만들다 볼륨을 조절해야하는 상황이 생겼다. 인터넷에서 제일 먼저 나오는 방법을 찾아서 적용하면 위 사진처럼 볼륨 조절 모양이 나오지만 원하는 결과는 이루었다. 하지만 기기 전체 볼륨이 조절되기 때문에 사용성에서는 많이 안좋다고 생각되어서 더 찾아보았다.

 

class TTSManager {
    
    static let shared = TTSManager()
    
    private let synthesizer = AVSpeechSynthesizer()
    
    var volume: Float = 1.0
    
    internal func play(_ string: String) {
        let utterance = AVSpeechUtterance(string: string)
        utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")
        utterance.rate = 0.4
        utterance.volume = 1
        synthesizer.stopSpeaking(at: .immediate)
        synthesizer.speak(utterance)
    }
    
    internal func stop() {
        synthesizer.stopSpeaking(at: .immediate)
    }
}

위는 TTS를 재생하는 코드이다.

 

TTSManager.shared.play("안녕하세요 안녕하세요")

이렇게 작성하면 원하는 String이 재생된다. 이제 여기서 원하는 목적은 TTS 소리만 조절하고 단말기 소리는 조절하지 않는 것이다. 

 

정답은 생각보다 가까운 곳에 있었다.

 

utterance.volume = 1

TTS 코드 중간에 있는 volume이다. 이 값을 조절하면 단말기가 아닌 해당 사운드만 조절이 가능하다.

 

0부터 1까지 범위를 가지고 기본값은 1이다. 0을 적용하면 디바이스 볼륨과 상관없이 소리가 나오지 않는다.

 

저 값을 고정적으로 사용하던지 조절을 가능하게해서 관리한다면 다양한 개발이 가능하다.

 

내비게이션 앱들과 같은 기능을 만들기 위해서 Slider를 하나 만들었다.

 

Slider를 Action으로 연결해서 변화된 값으로 volume을 적용하였다. 

 

 

이로서 카카오내비처럼 단말기와 상관없이 볼륨을 조절 가능하게되었다. 

 

저는 slider를 통해 변경된 값을 userdefault에 저장하여 다음 실행시에도 유지하도록 하였습니다.

 

 

TTS가 아닌 미디어 파일의 볼륨도 가능하다.

 

 

avaudioplayer - How to lower the volume of music in swift? - Stack Overflow

 

How to lower the volume of music in swift?

I am creating a SpriteKit Game with background music looping. The problem is that the music is too loud. How do I lower the volume? Here is the code I used to set up the music var backGroundM...

stackoverflow.com

 

volume | Apple Developer Documentation

 

volume | Apple Developer Documentation

The volume the speech synthesizer uses when speaking the utterance.

developer.apple.com

 

반응형