2012-04-06 90 views
7

我問了這個問題on SuperUser,但它是無言的。希望我能在這裏獲得更多的觀衆。用於腳本WAV或MP3輸出的文本到語音(TTS)軟件

我在尋找像ScriptVox這樣的低成本(或免費)解決方案,只有更好的引擎。也就是說,要讀取腳本並將字符分配給語音。我已閱讀文章here,但即使那些我不得不連接wav文件。這並不是說我不喜歡Audacity,但它很耗時。我半途想寫自己的作品,但我確信必須有一個解決方案。有什麼建議麼?

+0

你知道哪些編程語言? – Brad 2012-04-13 17:28:28

+0

我希望找到一些已經寫好的東西。我是一個代碼猴,並且自從BASIC有線號以來一直在進行編程。然而,C#是我付費開發的。 – SQLMason 2012-04-13 17:47:14

+1

查看我的帖子。有一個VB解決方案,您可以輕鬆地適應.NET。如果你想要寫一些東西,那麼你會想看看其他地方。堆棧溢出用於編程問題。 – Brad 2012-04-13 17:48:04

回答

3

如果程序訪問互聯網是可以接受的,那麼你可以使用iSpeech

您可以使用他們的API,但不幸的是它被限制在每天200次使用。

它們的API還允許在查詢後附加format=(wav|mp3),從而允許您以所需的格式獲取聲音。

+1

C#可以通過COM訪問DirectShow或使用其他.NET庫。 – quantum 2012-04-15 22:51:10

+0

答案選擇它是完整的,它對我來說是獨一無二的(我知道微軟的文本到語音引擎) – SQLMason 2012-04-16 16:27:45

10

我會使用微軟的文本到語音引擎。他們對如何做的正是一個簡單的例子,你在找什麼:

http://msdn.microsoft.com/en-us/library/ms717065(v=vs.85).aspx

隨着該示例代碼,你可以講一些文字,並把它轉儲到WAV文件。從那裏,如果你需要轉換成MP3等格式,你可以使用FFMPEG。

5

Brad's answer是非常了不起的,因爲它包含你正在尋找的東西。 但是,它缺少一個你在問題勘誤表中偏愛的基礎:在C#中的實現。

Here's a full tutorial訪問託管代碼中的語音API。隨着全歸功於布萊克Niemyjski和微軟相應的小組,這裏的顯着位,因爲linkback原來的文章是死的,這似乎是直接從微軟借:

下面的鏈接(給計算機一語音)會帶你到一個 微軟網站,它會告訴你如何創建一個項目,並獲得一個 基本文本語音應用程序啓動和運行在VB。NET或c#中沒有 時間!

SAPI

SAPI是語音API,讓應用程序能夠訪問語音 識別和文本到語音轉換(TTS)引擎。本文重點介紹 TTS。對於TTS,SAPI將文本作爲輸入並使用TTS引擎以 輸出該文本作爲口語音頻。這是與Windows輔助工具Narrator 使用的技術相同。自XP附帶SAPI和英文TTS引擎以來,每個版本的Windows 。

TTS讓用戶的耳朵工作。它允許應用程序向用戶發送信息,而不需要用戶的眼睛或雙手。 這是一個非常強大的輸出選項,在 個人電腦上不常使​​用。

需要三個步驟中被管理的應用程序中使用TTS:

  1. 創建互操作DLL

由於SAPI是一個COM組件,以從 一個用它的互操作DLL需要託管應用。要創建此項,請在Visual Studio中打開該項目。 選擇「項目」菜單,然後單擊「添加參考」。選擇COM選項卡, 在列表中選擇「Microsoft Speech Object Library」,然後單擊確定。 這些步驟將此引用添加到您的項目中,並在與可執行文件相同的文件夾中創建一個 Interop.SpeechLib.dll。這 Interop DLL必須始終與您的.exe文件位於相同的文件夾才能正常工作 。

  • 參考互操作命名空間
  • 包括此命名空間在應用程序中。在C#中,添加「using SpeechLib;」;在VB中,添加「Imports SpeechLib」。

  • 呼叫說話()
  • 創建SpVoice對象並調用講():

    的Visual C#

    SpVoice voice = new SpVoice(); 
    voice.Speak("Hello World!", SpeechVoiceSpeakFlags.SVSFDefault); 
    

    的Visual Basic

    voice = New SpVoice 
    voice.Speak("Hello World!", SpeechVoiceSpeakFlags.SVSFDefault) 
    

    我覺得布拉德的回答讓我在這裏得到了正確的解決方案(因此,他比我更值得信任),但這應該是你最後一塊遺失的東西。您現在應該能夠將託管代碼中的C++ solution的WAV文件複製到您想要的格式,然後從transcode中複製。

    相關問題