티스토리 뷰
WPF프로그램 - Using Speech.Synthesis
프레임워크에는 기본적으로 System.Speech.Synthesis 과 System.Speech.Recognition 의 네임스페이스를 가지고 있습니다.
그럼 사용해 봅시다.
SDK에 보면 WPF용 Speech Sample 이 있습니다.
흔히 TTS라 불리는 예제 프로그램이지요. (텍스트로 친걸 음성으로 출력해주는)
Echo Textbox 버튼을 클릭하며 음성을 들을 수 있어요. Sample string에 있는 "Hello World"라고 외쳐 주겠죠?
Speaking rate 를 올리면 말하는 속도도 빨라지구요. Volume.도 마찬가지겠죠?
Say Date 와 Say Time 버튼을 클릭하면 현재 날짜와 시간을 말해줍니다.
Say Name 버튼은 컴퓨터이름을 말해주지요.
자 그럼 XAML 파일을 자세히 살펴 봅시다. |
텍스트박스 컨트롤은 MyWindow.xaml파일에 정의되어 있어요.
<!-- Text to display -->
<Label Grid.Column="0" Grid.Row="0">Sample string:</Label>
<TextBox
Grid.Column="1" Grid.Row="0"
HorizontalAlignment="Left"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Visible"
FontSize="12"
Height="100"
Width="400"
Name="TextToDisplay">Hello, world!</TextBox>
볼륨 슬라이드 컨트롤은 아래와 같아요.
<!--
Volume property: 0 to 100 --><Label Grid.Column="0" Grid.Row="1">Volume (%):</Label>
<Slider Name="VolumeSlider" Grid.Column="1" Grid.Row="1" Value="50" Minimum="0" Maximum="100" TickFrequency="5" ValueChanged="VolumeChanged"/>
이건 목소리 비율 조절하던 컨트롤이지요.
<!-- Rate property: -10 to 10 (adjust to reasonable range of -5 to 7) -->
<Label Grid.Column="0" Grid.Row="2">Speaking rate:</Label>
<Slider Name="RateSlider" Grid.Column="1" Grid.Row="2" Value="-1" Minimum="-5" Maximum="7" TickFrequency="1" ValueChanged="RateChanged"/>
음성 출력에 쓰이는 버튼 4개 세트는 아래와 같이 구성되어 있습니다.
<!-- Buttons -->
<Button Grid.Column="1" Grid.Row="3" Click="ButtonEchoOnClick">Echo Textbox</Button>
<Button Grid.Column="1" Grid.Row="4" Click="ButtonDateOnClick">Say Date</Button>
<Button Grid.Column="1" Grid.Row="5" Click="ButtonTimeOnClick">Say Time</Button>
<Button Grid.Column="1" Grid.Row="6" Click="ButtonNameOnClick">Say Name</Button>
그럼 CS코드를 봅시다. |
기본적으로 System.Speech.Synthesis: 이 네임스페이스를 사용합니다.
using
System;using System.Windows;
using System.Windows.Controls;
using System.Speech.Synthesis; MyWindow 클래스에 SpeechSynthesizer 객체를 생성합니다.
public
partial class MyWindow : Window{
SpeechSynthesizer _speechSynthesizer = new SpeechSynthesizer();
아래와 같이 버튼 클릭했을때 텍스트 내용을 메소드에 보내주면 됩니다.
단지 저게 끝입니다! 코드 끝!
void
ButtonEchoOnClick(object sender, RoutedEventArgs args){
_speechSynthesizer.SpeakAsync(TextToDisplay.Text);
} 그럼 현재시간, 날짜등도 감이 오시죠?
아래와 같이 저렇게만 보내주면 됩니다.
void
ButtonDateOnClick(object sender, RoutedEventArgs args){
_speechSynthesizer.SpeakAsync("Today is " + DateTime.Now.ToShortDateString());
}
void ButtonTimeOnClick(object sender, RoutedEventArgs args)
{
_speechSynthesizer.SpeakAsync("The time is " + DateTime.Now.ToShortTimeString());
}
컴퓨터 이름도 아래와 같이 해서 알아오지요. 핫핫
void
ButtonNameOnClick(object sender, RoutedEventArgs args){
_speechSynthesizer.SpeakAsync("My name is " + _speechSynthesizer.Voice.Name);
}
자 그럼 슬라이드컨트롤(볼륨과 목소리속도)은 어떻게 할까요?
좀 고민되시나요?
훗... 간단할꺼라 생각하셨죠?
int값으로 변환해서 그냥 넣어주면 됩니다.! 끝!. 저걸로 코드 끝!
void
VolumeChanged(object sender, RoutedEventArgs args){
_speechSynthesizer.Volume = (int)((Slider)args.OriginalSource).Value;
}
void
RateChanged(object sender, RoutedEventArgs args){
_speechSynthesizer.Rate = (int)((Slider)args.OriginalSource).Value;
}
이렇게해서 TTS 프로그램을 만들어 보았네요. 참 쉽죠?
- Lorin 씀