Как добавить звуки в формате.wav друг к другу
Я изучаю C# самостоятельно, читая некоторые книги и просматривая некоторые учебные пособия. Поэтому я решил сделать небольшой проект одновременно, чтобы получить больше опыта и укрепить свои знания. Я пытаюсь создать программу преобразования текста в речь на грузинском языке (мой язык). Я сделал ту же программу на Java, но хочу перенести ее на C#, но я не мог понять, как добавлять разные звуки друг к другу. Например, когда моя программа хочет сказать слово "общий", она делит слово на такие части, как эта "ge" -первая "ne" -секунда "ra" -секунда "l" -секунда (эти первая и вторая означают, что часть находится в первой части слова, я так и сделал, потому что ge-first и ge -второй имеют разные интонации), поэтому я записал эти части в формате.wav и хочу, чтобы программа добавила их и создала слово. Я искал классы на MSDN.COM и нашел SoundPlayer, но я не мог понять, как добавить звуки формата WAV друг к другу. я хочу добавить один звук к другому и воспроизвести новый, например, у меня есть звук, который говорит "ааа", а другой говорит "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-программе (конечно, в Java-синтаксисе), но я столкнулся с проблемой при попытке работать с WAV-файлами, я не знаю, какой метод использовать и как вставить эти звуки. Вот как я это сделал на Java.
public AudioInputStream find(String s) throws UnsupportedAudioFileException, IOException {
return AudioSystem.getAudioInputStream(
new File("C:/Users/Vato/Desktop/Programing/sintezatori/alphabet/"+s+".wav"));
}
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;
}
Теперь я хочу сделать почти то же самое на C#. Я посмотрел на эту страницу http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx но не мог понять, что делать, поэтому, пожалуйста, помогите мне:) Какой метод я должен использовать и как?
1 ответ
Вот отличные ссылки, чтобы помочь:
- Конкатенация волновых файлов с использованием C# 2005
- C# WAV класс файлов, микширование аудио и некоторые легкие манипуляции с аудио
и, возможно, это: объединить файлы WAV в C#