本を読んだり、チュートリアルを見たりして、独学で C# を勉強しています。そこで、より多くの経験を積み、知識を深めるために、同時に小さなプロジェクトを作成することにしました。グルジア語 (私の言語) でテキスト読み上げプログラムを作成しようとしています。Javaで同じプログラムを実行しましたが、C#に転送したいのですが、異なる音を互いに追加する方法がわかりませんでした。たとえば、私のプログラムが単語「一般」を言いたい場合、単語を分割しますこの「ge」-最初の「ne」-2 番目の「ra」-2 番目の「l」-2 番目のような部分 (これらの最初と 2 番目は、その部分が単語の最初の部分にあることを意味します。 -second は異なるイントネーションを持っています) そのため、これらの部分を .wav 形式で記録し、プログラムにそれらを追加して単語を作成させたいと考えています。MSDN.COM でクラスを探し、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を見ましたが、何をすべきかわからなかったので、助けてください:)どの方法を使用すればよいですかどうやって?