[英]How to append sounds in C#
我通過閱讀一些書籍和觀看一些教程來自學C#。 所以,我決定同時做一個小項目,以獲得更多經驗並加強我的知識。 我正在嘗試用格魯吉亞語(我的語言)創建一個文本到語音程序但是,我無法理解如何相互添加不同的聲音。 例如,當我的程序想要說“語言”時,它會將單詞划分為“la”“n”“gu”“a”“ge”,因此,我記錄了這些部分並想要附加它們並創建一個單詞。 我在MSDN.COM上找了一些課,發現了SoundPlayer但是,我無法弄清楚如何附加WAV格式的聲音。 我想將一個聲音添加到另一個並播放一個新聲音,例如我的聲音是“aaa”而另一個聲稱“bbbb”我希望聽到“aaabbbb”的聲音。
為了划分單詞,我創建了一個arraylist並使用了這段代碼。
public ArrayList divide(String s) //დაყოფა და arraylist-ში გადანაწილება
{
ArrayList a = new ArrayList();
int i = 0;
while (i < s.Length)
{
if (s[i] == ',' || s[i] == ' ' || s[i] == '.')
{
a.Add(s.Substring(i, i + 1));
i++;
continue;
}
if (consonant(s[i]) && (i + 1) != s.Length && sonant(s[i + 1]))
{
if (isFirstSonant(s, i))
a.Add(s.Substring(i, i + 2) + "_FIRST");
else
a.Add(s.Substring(i, i + 2) + "_SECOND");
i += 2;
continue;
}
if (sonant(s[i]) && ((i + 1) < s.Length && sonant(s[i]) || i == (s.Length - 1)))
{
if (isFirstSonant(s, i))
a.Add(s.Substring(i, i + 1) + "_FIRST");
else
a.Add(s.Substring(i, i + 1) + "_SECOND");
i++;
continue;
}
if (consonant(s[i]) && ((i + 1) < s.Length && consonant(s[i]) || i == (s.Length - 1)))
{
a.Add(s.Substring(i, i + 1) + "_SECOND");
i++;
continue;
}
}
return a;
}
我已經在java上創建了這個程序,並希望在C#上做同樣的事情,所以這是我在java上的代碼。 這就是我如何追加聲音,將它們放入arraylist。
public AudioInputStream append(AudioInputStream main, String s) throws UnsupportedAudioFileException, IOException {
return new AudioInputStream(
new SequenceInputStream(main, find(s)),
main.getFormat(),
main.getFrameLength() + find(s).getFrameLength());
}
private String s;
public void Process() {
try {
AudioInputStream main = AudioSystem.getAudioInputStream(new File("C:/Users/Vato/Desktop/Programing/sintezatori/alphabet/blank.wav"));
ArrayList<String> aa = divide(s);
for(int ii=0;ii<aa.size();ii++) {
main=append(main, aa.get(ii));
System.out.println(aa.get(ii));
}
AudioSystem.write(main, AudioFileFormat.Type.WAVE, new File("C:/Users/Vato/Desktop/Programing/sintezatori/alphabet/result.wav"));
result=main;
AudioInputStream result1 = AudioSystem.getAudioInputStream(new File("C:/Users/Vato/Desktop/Programing/sintezatori/alphabet/result.wav"));
DataLine.Info info =
new DataLine.Info(Clip.class,
result1.getFormat());
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(result1);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
private AudioInputStream result;
public AudioInputStream getResult() {
return result;
}
我應該從這些http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx使用哪種方法或類? 我怎樣才能在C#中做同樣的事情?
如果您不想使用現有SDK,可以執行以下操作:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Media;
using System.Text;
namespace ConsoleApplication3
{
public class SpeechClass
{
private Dictionary<char, string> _letterToFileMapping = new Dictionary<char, string>();
private string _basePath = "\\soundfiles";
public SpeechClass()
{
PopulateMappings();
}
private void PopulateMappings()
{
_letterToFileMapping.Add('a', "asound.wav");
_letterToFileMapping.Add('b', "bsound.wav");
_letterToFileMapping.Add('c', "csound.wav");
_letterToFileMapping.Add('d', "dsound.wav");
}
private void SayWord(string word)
{
var chars = word.ToCharArray();
List<string> filestosay = new List<string>();
foreach (var c in chars)
{
string sound;
if(_letterToFileMapping.TryGetValue(c, out sound))
{
filestosay.Add(sound);
}
}
foreach (string s in filestosay)
{
SoundPlayer p = new SoundPlayer();
p.SoundLocation = Path.Combine(_basePath, s);
p.Play();
}
}
}
}
AT&T文字轉語音SDK非常出色。 你可以做自定義詞典和聲音。 http://www.wizzardsoftware.com/text-to-speech-tts.php
聲音播放器應該工作:
using System.Media;
InitializeComponent();
Soundplayer MySounds = new SoundPlayer(@"C:\example.wav);
MySounds.Play();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.