音频生成软件或.NET库

时间:2009-08-30 22:16:53

标签: c# audio generator

我需要能够在c#应用程序中播放某些音调。我不在乎它是在运行中生成它们还是从文件中播放它们,但我只需要一些方法来生成不仅具有可变音量和频率,而且可变音色的音调。如果用于生成这些音调的任何内容都会有很多音色预设,那将会特别有用,如果这些音色并非全部听起来都是midi-ish,那将会更加精彩(意味着它们中的一些听起来像是可能的记录实际工具)。

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

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

特别使用NAudio是一个很好的选择

答案 1 :(得分:2)

这篇文章帮助我做了类似的事情: http://social.msdn.microsoft.com/Forums/vstudio/en-US/18fe83f0-5658-4bcf-bafc-2e02e187eb80/beep-beep

特别是Beep Class:

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 */

答案 2 :(得分:0)

答案 3 :(得分:0)

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

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

如果您觉得这个答案有用,请给我说一句。