2012-07-16 2 views
3

일부 서적을 읽고 자습서를 보면서 C#을 직접 학습 중입니다. 그래서 나는 더 작은 경험을 얻고 내 지식을 강화하기 위해 동시에 작은 프로젝트를 만들기로 결정했습니다. 나는 그루지야 어 (내 언어)에서 텍스트 음성 합성 프로그램을 만들려고 노력 중이다. 나는 자바에서 같은 프로그램을했지만 C#으로 전송하고 싶지만 서로 다른 사운드를 추가하는 방법을 이해할 수 없었다. 예를 들어, 내 프로그램에서 "일반"이라는 단어를 말하고 싶을 때 단어를 나눌 때 이 부분은 "ge"- 첫 번째 "네"- 두 번째 "ra"- 두 번째 "l"- 두 번째 (이 첫 번째와 두 번째 부분은 단어의 첫 번째 부분에 있음을 의미합니다. 왜냐하면 ge-first와 ge 초는 다른 억양을 가지고 있습니다.) 그래서, 나는이 부분들을 .wav 형식으로 기록했고, 프로그램이 그것들을 추가하고 단어를 만들길 원합니다. MSDN.COM에서 수업을 찾았지만 SoundPlayer가 발견되었지만 WAV 형식의 사운드를 서로에 추가하는 방법을 알 수 없었습니다. 한 사운드를 다른 사운드에 추가하고 새 사운드를 연주하고 싶습니다. 예를 들어 "aaa"라는 사운드가 있고 다른 하나는 "bbbb"라고 말하면 "aaabbbb"라고 말하는 사운드를 얻고 싶습니다..wav 형식 사운드를 서로 추가하는 방법

단어를 나눠서 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; 
} 

은 내가 (물론, 자바 문법으로) 내 자바 프로그램에서 동일한 코드를 사용하지만, .WAV 파일을 작업 할 때 나는 문제에 도착 그리고이 소리들을 집어 넣는 법. 이것은 내가 자바에서 어떻게했는지입니다.

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을 보았지만 할 일을 알아 내지 못했습니다. 그래서 도와주십시오. 어떤 방법을 사용해야합니까?

답변

관련 문제