2009-08-30 85 views
4

我需要能夠在c#應用程序中播放某些音調。我不在乎它是在飛行中產生它們還是從文件中播放它們,但我只是需要一些方法來生成不僅音量和頻率可變而音色可變的音調。如果我用來產生這些音調的東西有很多音色預設,那將是特別有幫助的,如果這些音色不是全部都是midi-ish(這意味着其中一些聽起來像可能已經實際樂器錄音)。音頻生成軟件或.NET庫

有什麼建議嗎?

回答

0

爲了讓你生成的音調不發出' midi-ish',你將不得不使用現實生活中的樣本並將其播放。嘗試找到一些好的真實樂器採樣庫,如http://www.sampleswap.org/filebrowser-new.php?d=INSTRUMENTS+single+samples%2F

然後,當你想從他們構成旋律時,只需要相對於原始採樣頻率交替播放頻率。

如果您發現此答案有用,請給我留言。

1

這篇文章幫我類似的東西: http://social.msdn.microsoft.com/Forums/vstudio/en-US/18fe83f0-5658-4bcf-bafc-2e02e187eb80/beep-beep

特別的部分是蜂鳴類:

public class Beep 
{ 
    public static void BeepBeep(int Amplitude, int Frequency, int Duration) 
    { 
    double A = ((Amplitude * (System.Math.Pow(2, 15)))/1000) - 1; 
    double DeltaFT = 2 * Math.PI * Frequency/44100.0; 

    int Samples = 441 * Duration/10; 
    int Bytes = Samples * 4; 
    int[] Hdr = {0X46464952, 36 + Bytes, 0X45564157, 0X20746D66, 16, 0X20001, 44100, 176400, 0X100004, 0X61746164, Bytes}; 
    using (MemoryStream MS = new MemoryStream(44 + Bytes)) 
    { 
     using (BinaryWriter BW = new BinaryWriter(MS)) 
     { 
     for (int I = 0; I < Hdr.Length; I++) 
     { 
      BW.Write(Hdr[I]); 
     } 
     for (int T = 0; T < Samples; T++) 
     { 
      short Sample = System.Convert.ToInt16(A * Math.Sin(DeltaFT * T)); 
      BW.Write(Sample); 
      BW.Write(Sample); 
     } 
     BW.Flush(); 
     MS.Seek(0, SeekOrigin.Begin); 
     using (SoundPlayer SP = new SoundPlayer(MS)) 
     { 
      SP.PlaySync(); 
     } 
     } 
    } 
    } 
} 

它可以用來如下

Beep.BeepBeep(100, 1000, 1000); /* 10% volume */