日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XNA音乐解析~

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XNA音乐解析~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 這是一個能夠實時解析mp3,wav等音樂節奏,并畫出音樂節奏的XNA小程序。


??? 不知道各位有沒有接觸過一個叫《危險節奏》的小游戲? 沒有的話,可以先來這里看看http://my.tv.sohu.com/u/vw/16758398,這是一個會跟隨音樂節奏變化而且增/減火爆程度(子彈,敵人數量和效果)的游戲,玩過這個后突然對音樂的解析有了興趣,于是有了這個小程序。

?

??? 由于XNA本身并不能解析最常用的mp3格式文件,所以我使用了fmod這個游戲音頻引擎,這是一個支持多平臺的音頻引擎(非商業用途可以免費使用),原版是用C++寫,網上有人封裝成了C#版叫FMODNet。

?

  要使用fmod,首選先得把fmodex.dll文件復制的到C:\Windows\System32目錄下,如果你的系統是64位的話就復制到C:\Windows\SysWOW64目錄下。然后在XNA程序中加入FMODNet.dll的引用,并加入以下代碼:

創建:

//創建fmod設備對象 SoundDevice device = new SoundDevice();

?初始化:

//初始化 device.Initialize(); //指定音樂文件所在的目錄 string contentPath = game.Content.RootDirectory; //用一個音樂文件,創建一個Sound對象 FMODNet.Sound fmodSound = device.CreateSound(contentPath + @"\Music\科學的超電磁炮level5.mp3"); bgms.Add(fmodSound);//播放音樂 fmodSound.Play();

?


? 這樣就能播放音樂文件了,接下來是最關鍵的,就是獲取播放中的音樂當前的頻譜,即獲取節奏數據,使用的是fmodex的 GetSpectrum()方法,由于原版的FMODNet.dll中并不包含 GetSpectrum()方法,不過幸好FMODNet的作者提供了FMODNet的源代碼,我把GetSpectrum()加了進去。

?

之后加入以下代碼,并在Update()中調用就能獲取當前節奏數據了

/// <summary> /// 獲取當前播放的BGM的頻譜 /// </summary> public float[] GetBGMSpectrum() {float[] spectrumarray = new float[512];//只有512才有效!spectrumarray = bgms[CurrectBgmIndex].Channel.GetSpectrum(512, 0);return spectrumarray; }

注意 :GetSpectrum(512, 0)的兩個參數,不能改動,否則無法獲取數據……。

?

  bgms列表中裝的就是 FMODNet.Sound對象,可以看出獲取到的數據是,512個浮點型數據,每個的值范圍在0~0.3f之間。然后這些值每幀隨音樂節奏變化,知道這些后,我們就可以畫出節奏了~

?

  下面是我程序,控制:J是加載音樂,F3/F4切換繪制效果,F11顯示說明文字。

? ? ? 關于fmod播放與加載音樂的方法,封裝在了Sounds.cs中,并在BaseSpectrum.cs中提供了獲取節奏信息和基本繪制的方法,其繪制效果如下

  然后在SpectrumManager.cs中提供了更華麗的節奏繪制,如下圖,節奏激情的時候還有全屏模糊效果~

?

最后是程序源項目的下載:(上面提到的fmodex.dll,FMODNet.dll也包含了,在Dll文件夾中)

http://115.com/file/ang9aidu#
MusicGame.rar

轉載于:https://www.cnblogs.com/dshGame/archive/2012/04/15/2450162.html

總結

以上是生活随笔為你收集整理的XNA音乐解析~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。