내 Windows 양식 응용 프로그램에서 음성으로 Google 텍스트를 사용하고 싶습니다. 레이블을 읽습니다. System.Speech 참조를 추가했습니다. 버튼 클릭 이벤트로 어떻게 라벨을 읽을 수 있습니까? http://translate.google.com/translate_tts?q=testing+google+speech 음성 API에 대한 Google 텍스트 또는 Microsoft의 기본 텍스트를 음성에 어떻게 사용할 수 있습니까?Windows 텍스트에서 Google 텍스트를 사용하여 음성 API를 사용할 수 있습니까?
답변
업데이트 Google의 TTS API는 더 이상 공개적으로 사용할 수 없습니다. Microsoft의 TTS에 관한 맨 아래의 노트는 여전히 관련이 있으며 동일한 기능을 제공합니다.
당신은 this question의 대답의 변형을 사용하여 응답을 재생하여의 WinForm 응용 프로그램에서 구글의 TTS API를 사용할 수
(그것은 나에게 동안을했다하지만 내가 진짜 솔루션을 이) :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormClosing += (sender, e) =>
{
if (waiting)
stop.Set();
};
}
private void ButtonClick(object sender, EventArgs e)
{
var clicked = sender as Button;
var relatedLabel = this.Controls.Find(clicked.Tag.ToString(), true).FirstOrDefault() as Label;
if (relatedLabel == null)
return;
var playThread = new Thread(() => PlayMp3FromUrl("http://translate.google.com/translate_tts?q=" + HttpUtility.UrlEncode(relatedLabel.Text)));
playThread.IsBackground = true;
playThread.Start();
}
bool waiting = false;
AutoResetEvent stop = new AutoResetEvent(false);
public void PlayMp3FromUrl(string url)
{
using (Stream ms = new MemoryStream())
{
using (Stream stream = WebRequest.Create(url)
.GetResponse().GetResponseStream())
{
byte[] buffer = new byte[32768];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}
ms.Position = 0;
using (WaveStream blockAlignedStream =
new BlockAlignReductionStream(
WaveFormatConversionStream.CreatePcmStream(
new Mp3FileReader(ms))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(blockAlignedStream);
waveOut.PlaybackStopped += (sender, e) =>
{
waveOut.Stop();
};
waveOut.Play();
waiting = true;
stop.WaitOne(10000);
waiting = false;
}
}
}
}
}
참고 : 위의 코드는 NAudio는 (무료/오픈 소스)와 System.Web
, System.Threading
및 NAudio.Wave
에 대한 using
문을 작동해야합니다. 내 Form1
는 2 개 컨트롤이 있습니다 :
label1
라는 라벨Tag
label1
의와button1
라는 버튼
(라벨에있는 버튼을 바인딩하는 데 사용) 위의 코드는 각 버튼/라벨 조합에 대해 서로 다른 이벤트가있는 경우 (테스트되지 않음) 다음과 같이 약간 단순화 할 수 있습니다.
private void ButtonClick(object sender, EventArgs e)
{
var clicked = sender as Button;
var playThread = new Thread(() => PlayMp3FromUrl("http://translate.google.com/translate_tts?q=" + HttpUtility.UrlEncode(label1.Text)));
playThread.IsBackground = true;
playThread.Start();
}
그러나이 솔루션에는 문제가 있습니다 (이 목록은 아마도 완전하지 않을 수 있습니다. 나는 코멘트와 실제 사용법이 다른 사람들을 찾을 것이라 확신한다.) :
- 첫 번째 코드 단편에
stop.WaitOne(10000);
이있다. 10000은 재생할 오디오의 최대 10 초를 나타내므로 레이블이 읽을 시간보다 오래 걸리면 조정해야합니다. 이것은 현재 버전의 NAudio (v1.5.4.0)에서 스트림 재생이 완료된 시점을 결정하는 데 문제가있는 것 같기 때문에 필요합니다. 나중 버전에서 수정되었거나 찾지 못하는 임시 해결책이있을 수 있습니다. 임시 해결 방법 중 하나는 스레드에 대한 매개 변수로 시간 초과를 사용하는ParameterizedThreadStart
을 사용하는 것입니다. 이렇게하면 가변적 인 시간 만 허용되지만 기술적으로 문제가 해결되지는 않습니다. - 더 중요한 것은 Google TTS API가 비공식 (Google 이외의 응용 프로그램에서 사용되지 않는다는 의미)이며 언제든지 통지없이 변경 될 수 있음을 의미합니다. 상업적 환경에서 작동 할 수있는 무언가가 필요하다면 MS TTS 솔루션 (귀하의 질문에 제시된대로) 또는 많은 상업적 대안 중 하나를 제안 할 것입니다. 이 중 어느 것도 단순하지 않은 경향이 없습니다.
는 질문의 반대편에 대답하려면 :
System.Speech.Synthesis.SpeechSynthesizer
클래스입니다 많은 쉽게 사용하고 당신은 어디 구글 API로,이 수 (안정적으로 사용할 수있는 믿을 수있는 내일 떠났다.)
정말 a를 System.Speech
참조 참조 등을 포함하는 것만 큼 쉽습니다 :
public void SaySomething(string somethingToSay)
{
var synth = new System.Speech.Synthesis.SpeechSynthesizer();
synth.SpeakAsync(somethingToSay);
}
이 은 작동합니다.
Google TTS API를 사용하는 것은 재미있는 실험 이었지만 프로덕션 용도로 제안하는 것이 좋았으며 상용 대안에 대한 비용을 지불하고 싶지 않은 경우 Microsoft의 솔루션은 그것은 얻는다.
버튼 클릭 이벤트에서 어떻게 사용할 수 있습니까? –
@ user1136403 -이 작업을 버튼 클릭 이벤트에 적용하는 방법은 내 업데이트를 참조하십시오. –
@ user1136403 - 필자는 테스트를 기반으로 필요한 변경 사항을 반영하여 내 대답의 코드를 업데이트했습니다. –
- 1. Google지도 API를 사용하여 음성 컨트롤로 tbt 탐색
- 2. android에서 Google 음성 API를 사용하는 방법
- 3. C를 사용하여 Windows API를 활용할 수 있습니까?
- 4. 텍스트에서 Google 음성 액션 호출 - 예 : 내 음성 액션 앱 작성
- 5. iOS 음성 엔진을 사용할 수 있습니까?
- 6. 안드로이드없이 음성 인식을 위해 Google 서버를 사용할 수 있습니까?
- 7. CMU Shinx, JSAPI 및 Google 음성 API를 사용하는 음성 인식
- 8. Google api를 사용할 수 있다는 것을 어떻게 알 수 있습니까?
- 9. Mapstaction API를 Google Map API v3과 함께 사용할 수 있습니까?
- 10. 자바 API를 사용할 수 있습니까? Google 연락처 api v3에서 json?
- 11. Google 이미지 API를 사용할 루비 보석이 있습니까?
- 12. Google 번역 api가 ajaxembedded 텍스트에서 작동합니까?
- 13. Java Swing 응용 프로그램에서 Google 시각화 API를 사용할 수 있습니까?
- 14. Google Font API를 사용할 때의 단점이 있습니까?
- 15. 누구든지 Windows Phone 7.1 응용 프로그램의 음성/음성 텍스트를 구현하는 방법을 알고 있습니까?
- 16. Google 음성/영상 채팅 플러그인을 사용하여 음성 녹음
- 17. Facebook API를 사용하여 @ 태그로 stream.publish를 어떻게 사용할 수 있습니까?
- 18. 음성 통화에서 텍스트를 사용합니다.
- 19. System.Speech.Recognition은 음성 파일을 문법으로 사용할 수 있습니까?
- 20. 인터넷 연결없이 Google 어스 API를 사용할 수 있습니까?
- 21. 서비스 계정에 대해 Google 그룹 설정 API를 사용할 수 있습니까?
- 22. Google 스프레드 시트 API를 Go에서 어떻게 사용할 수 있습니까?
- 23. 상용 프로젝트에서 Google Weather API를 사용할 수 있습니까?
- 24. 어떻게 내 웹 사이트에 Google 번역기 API를 사용할 수 있습니까?
- 25. 부동산 웹 앱에 사용되는 Google Maps API를 사용할 수 있습니까?
- 26. Unity 3D에서 Google지도 API를 사용할 수 있습니까?
- 27. AppEngine의 Google 음성/음성 인식 API는 무엇입니까?
- 28. 현재 siri 공개 API를 사용할 수 있습니까?
- 29. Google 번역에서 음성 텍스트 데이터를 어떻게 다운로드 할 수 있습니까?
- 30. 파이썬 : Windows API를 사용하여 ttf 글꼴을 사용하여 텍스트를 렌더링하십시오.
당신이 사용하려는 회사의 텍스트 음성 변환 API에 대해 염두에 두어야합니다. 귀하가 제공 한 링크가 죽었으므로 System.Speech.Synthesize.SpeechSynthezer 클래스를 사용하는 것이 좋습니다. 인터넷의 "더 좋을/다른 내일이 될 것"이 아닌 .NET 세계에서 가장 큰 강자를 위해 SpeakAsync() 메서드를 사용하십시오. –
@HansPassant - 링크가 작동합니다. 나는 왜 그것이 당신을 위해 작동하지 않을 지 궁금해. –
흠, 이유도 궁금합니다. * 0을 * 디버그하는 방법만으로도 충분합니다. –