我需要能够在c#应用程序中播放某些音调。我不在乎它是在运行中生成它们还是从文件中播放它们,但我只需要一些方法来生成不仅具有可变音量和频率,而且可变音色的音调。如果用于生成这些音调的任何内容都会有很多音色预设,那将会特别有用,如果这些音色并非全部听起来都是midi-ish,那将会更加精彩(意味着它们中的一些听起来像是可能的记录实际工具)。
有什么建议吗?
答案 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)
CodeProject上有一篇很受欢迎的文章: http://www.codeproject.com/KB/audio-video/CS_ToneGenerator.aspx
你也可以查看这个帖子: http://episteme.arstechnica.com/eve/forums/a/tpc/f/6330927813/m/197000149731
答案 3 :(得分:0)
为了让你生成的音调听不到“midi-ish”,你必须使用真实的样本并播放它们。尝试找一些好的真实乐器样本库,如http://www.sampleswap.org/filebrowser-new.php?d=INSTRUMENTS+single+samples%2F
然后,当您想要从它们创作旋律时,只需相对于原始采样频率的交替播放频率。
如果您觉得这个答案有用,请给我说一句。