使用mp3
?
Console.Beep
答案 0 :(得分:3)
那是不可能的。音乐由不同音量级别的许多频率组成,所有频率混合在一起以创建复杂的波形。混合物随着时间的推移会迅速变化。
Console.Beep()仅生成一个频率而无法控制音量。随时间改变该频率的能力也受到严格限制,转换不平滑。它听起来永远不会像哔哔声那样。
播放MP3需要一种可以将数字信号转换为驱动扬声器的模拟信号的设备。现在可以在任何机器中随时使用,集成在主板中。同样used today产生Console.Beep()声音,现代机器不再有扬声器。
答案 1 :(得分:1)
我试图制作类似的东西,即给出一个mp3文件,我试图生成Console.Beep命令来表示音频信号的近似值。 Goertzel算法是查找样本频率的良好开端,可以使用传递给算法的样本量轻松计算持续时间。
我发现这种方法对于均匀和连续的音频信号效果很好,但是如果你想转换像歌曲那样复杂的东西,它会丢弃主要功能,只给你一个粗略的近似整体频率对于您的给定样本,这反过来使其无法识别,符合您的输入。
以下是我使用的算法的代码:
private static double GoertzelAmplitude(IReadOnlyList<float> samples, double freq, int sampleRate)
{
var tmp1 = 0.0;
var tmp2 = 0.0;
var normalizedfreq = freq / sampleRate;
var coeff = 2 * Math.Cos(2 * Math.PI * normalizedfreq);
for (var i = 0; i < samples.Count; i++)
{
var newTerm = samples[i] + coeff * tmp1 - tmp2;
tmp2 = tmp1;
tmp1 = newTerm;
}
var power = tmp2 * tmp2 + tmp1 * tmp1 - coeff * tmp1 * tmp2;
return power;
}
答案 2 :(得分:0)
http://msdn.microsoft.com/en-us/library/4fe3hdb1(v=vs.110).aspx解释了如何使用Beep(Int32,Int32)方法播放歌曲的前几个音符。
然而,这有两大问题:64位Windows 7和Windows XP不支持console.beep,并且在ME或更低的任何内容上没有2个Int32参数的重载。
如果你想这样做,你的歌曲有2个选项:第一个是对你的歌曲进行硬编码。如果您希望歌曲可以互换,您可以使用像Intelliscore(http://www.intelliscore.net/)这样的MP3解析器将歌曲读入.MID文件,然后再读取该.MID文件。