4

我需要能够在 ac# 应用程序中播放某些音调。我不在乎它是即时生成它们还是从文件中播放它们,但我只需要某种方法来生成不仅音量和频率可变,而且音色可变的音调。如果我用来生成这些音调的任何东西都有很多音色预设,那将特别有帮助,如果这些音色听起来不是全部都是 midi-ish 那就更棒了(这意味着其中一些听起来可能是实际仪器的录音)。

有什么建议么?

4

4 回答 4

3

你可能想看看我的问题Creating sine or square wave in C#

特别是使用NAudio是一个不错的选择

于 2009-08-30T22:44:39.177 回答
2

这篇文章帮助了我类似的事情: http: //social.msdn.microsoft.com/Forums/vstudio/en-US/18fe83f0-5658-4bcf-bafc-2e02e187eb80/beep-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 */
于 2013-10-03T12:58:38.443 回答
0

有一篇关于 CodeProject 的热门文章:http: //www.codeproject.com/KB/audio-video/CS_ToneGenerator.aspx

您还可以查看此线程: http ://episteme.arstechnica.com/eve/forums/a/tpc/f/6330927813/m/197000149731

于 2009-08-30T22:28:09.787 回答
0

为了使您生成的音调听起来不“midi-ish”,您必须使用现实生活中的样本并播放它们。尝试找到一些好的真实乐器样本库,例如http://www.sampleswap.org/filebrowser-new.php?d=INSTRUMENTS+single+samples%2F

然后,当您想从它们中创作旋律时,只需相对于原始采样频率交替播放频率即可。

如果您发现此答案有用,请给我留言。

于 2009-08-31T22:44:36.367 回答