c# - 如何将 .wav 格式的声音附加到彼此

标签 c# java .net audio-streaming soundplayer

我正在通过阅读一些书籍和观看一些教程来自学 C#。所以,我决定同时做一个小项目,来获得更多的经验和巩固我的知识。我正在尝试用格鲁吉亚语(我的语言)创建文本到语音程序。我在 java 中完成了相同的程序,但想在 C# 中传输它,但我无法理解如何将不同的声音附加到彼此。例如,当我的程序想要说一个词“一般”时,它会将这个词分成像这样的部分“ge”-第一个“ne”-第二个“ra”-第二个“l”-second(这些第一和第二意味着该部分位于单词的第一部分,我这样做是因为 ge-first 和 ge -第二个有不同的语调)所以,我以 .wav 格式记录了这些部分,并希望程序附加它们并创建一个单词。我在 MSDN.COM 上查找类(class)并找到了 SoundPlayer,但是我不知道如何将 WAV 格式的声音附加到彼此。我想将一个声音添加到另一个声音并播放一个新声音,例如我有一个声音说“aaa”而另一个声音说“bbbb”我想要一个声音说“aaabbbb”。

为了划分单词,我创建了一个数组列表并使用了这段代码。

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但不知道该怎么做,所以请帮助我:) 我应该使用什么方法以及如何使用?

最佳答案

关于c# - 如何将 .wav 格式的声音附加到彼此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11501160/

相关文章:

c# - 从数组中获取键的方法

linux - 无法在 Linux 上安装新版本的 Java

.net - 公开部署在 Service Fabric 群集上的服务(由内部负载均衡器处理流量分配)

.net - VB 中的 if() 函数和委托(delegate)

c# - 在 "using" block 中,SqlConnection 是否在返回或异常时关闭?

c# - 我可以使用 Ninject 将 IKernel 注入(inject)类吗

java - 如何将参数传递给另一个类中的数组?

java - 为什么这个 Spring MVC Controller 返回损坏的 UTF-8 字符串?

c# - 限制 Active Directory 计算机组访问 .Net 网站

c# - 使用C#将Word文件页面转换为jpg图像