在学校,我们正在使用一些乐高头脑风暴机器人及其各自的程序RobotC来编写我们选择的歌曲。经过长时间的努力,我决定将它带回家工作,唯一的问题是我家里没有Lego Mindstorm,因此我不可能听完成品。所以我意识到我必须编写一个新程序,并从那里运行它,所以我的问题是,是否有可能用C语言编写的程序在我的扬声器上播放不同的频率?如果是的话,请你提供一些例子,因为我不知道。
float fNote = 107, // Whole Note
hNote = fNote/2, // Half Note
qNote = hNote/2, // Quarter Note
eNote = qNote/2, // Eighth Note
sNote = eNote/2, // Sixteenth Note
tNote = sNote/2, // Thirtysecond Note
xtNote = tNote/2, // Sixtyfourth Note
float FLow = 349, // Note: Low F
A = 440, // Note: A
B = 466, // Note: B
EHigh = 659, // Note: High E
DHigh = 587, // Note: High D
GLow= 392, // Note: Low G
ELow = 330, // Note: Low E
Rest = 0, // Note: Rest
C = 523, // Note: C
DLow = 294, // Note: Low D
FHigh = 698, // Note: High F
GHigh = 783, // Note: High G
task main()
{
//start 1
playTone(FLow,eNote); // Frequency: 349
wait10Msec(eNote+xtNote);
playTone(A,eNote); // Frequency: 440
wait10Msec(eNote+xtNote);
playTone(B,qNote); // Frequency: 466
wait10Msec(qNote+xtNote);
}
我心灵风暴计划中的一些示例代码
答案 0 :(得分:3)
发出噪音,你可以使用beep(frequency, duration)
,
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679277%28v=vs.85%29.aspx
沉默使用Sleep(duration)
。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298%28v=vs.85%29.aspx
答案 1 :(得分:1)
有一个名为NAudio的.NET软件包可以让你在PC上合成音调。您必须使用C#或Visual Basic或C ++ / CLR编写。
这是一个介绍。 http://msdn.microsoft.com/en-us/magazine/ee309883.aspx
答案 2 :(得分:1)
这有点复杂,但我建议使用GStreamer完成此任务。要播放单个频率,您可以使用以下示例代码:
static void play_sound (gdouble frequency) {
GstElement *source, *sink;
GstElement *pipeline;
pipeline = gst_pipeline_new ("note");
source = gst_element_factory_make ("audiotestsrc", "source");
sink = gst_element_factory_make ("autoaudiosink", "output");
/* set frequency */
g_object_set (source, "freq", frequency, NULL);
gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
gst_element_link (source, sink);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* stop it after 500ms */
g_timeout_add (LENGTH, (GSourceFunc) pipeline_stop, pipeline);
}
audiotestsrc
是音调生成器,autoaudiosink
是系统的默认声音设备。此代码是Guitar Tuner example application的一部分。顺便说一下,完整的source code就在这里。
可以从here安装当前版本的GStreamer(适用于Windows)。我建议使用Code::Blocks进行开发,因为您可以使用预先捆绑的MinGW编译器下载它,这是GLib和GStreamer必需的AFAIK。