2011-11-22 74 views
4

我目前在windows phone 7中使用xna构建游戏 我试图从背景歌曲中播放的歌曲每分钟获得节拍,我也不太确定如果我想要的是BPM,我想要的是例如音乐的速度或节奏,速度越快,精灵的移动速度越快。我现在在想什么,BPM是音乐的频率达到了一个定义的常数范围,例如20 Mhz - 30 MHz, 如果我错了,随时纠正我,我不是很熟悉音频事情,我曾尝试使用MediaLibrary XNA的VisualizationData,但一些谷歌搜索后,他们说,VisualizationData不能与WP7一起工作,我也尝试过它,输出是256长度的浮点数组包含0值,或者如果我可以做一些FFT有了它,我会试试看 谢谢...获取音乐节奏或BPM?

+0

你想要的是BPM不频率。 http://en.wikipedia.org/wiki/Tempo#Beats_per_minute –

+0

好吧,那么我如何计算使用xna?任何想法?? – euclid135

回答

3

就像你说的,至于拍你不能直接得到它,但你要解释这个数据。如果您可以预先处理这首音乐并将其与标题一起发货,那么这将是您最好的选择

在XNA中,您确实只有MediaPlayer.GetVisualizationData才能使用。没有任何内容可以让你预先确定这种事情。它的使用方式类似于以下内容,可让您了解正在播放的不同频率的相关信息。

MediaPlayer.IsVisualizationEnabled = true; 
VisualizationData visData = new VisualizationData(); 
MediaPlayer.GetVisualizationData(visData); 

那么,你怎么把这个频率的东西,使它值得你的应用程序?关于如何做到这一点,有很大的分歧,这是on the App Hub forums in this thread called "Audio Analysis" in the reply by jwatte。从本质上讲,你将看到低频率,并试图找出节拍何时到来。没有什么完美的,但希望你会得到你赞同的东西。

祝你好运!

+0

但VisualizationData无法在Windows Phone中正常工作?目前我从Content.Pipeline阅读有关AudioContent,但我仍然不知道如何使用它,我无法获得包含Microsoft.Xna.Content.Pipeline在我的游戏参考中的引用,我曾尝试添加引用但我无法得到它,我也试图使用内容库扩展,但它带有关于mscorlib版本的警告,我想我会尝试读取.wav数据,但我也发现它很难从文件中读取XNA Windows Phone中的二进制文件,人生不是那么简单吧? :p – euclid135

+0

我99%确定它在WP7中。你有没有启用可视化?我忘了将它添加到代码示例中。我会更新它。 – scottheckel

+0

来自msdn站点的igot ..可视化数据在Windows Phone上不可用。任何试图在手机上获取可视化数据的尝试都会使用0填充VisualizationData类。检查了这一点:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.media.mediaplayer.getvisualizationdata.aspx – euclid135