我可以在c#中使用Console.Beep播放mp3文件吗?

时间:2013-11-06 08:31:53

标签: c# .net mp3 beep

使用mp3

是否有任何方法可以在没有发言人的情况下播放Console.Beep

3 个答案:

答案 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文件。