2011-11-22 97 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