當前位置:編程學習大全網 - 源碼下載 - 請問VB能否自編音樂

請問VB能否自編音樂

VB中沒有PLAY語句

實現VB中編音樂可以通過windows API函數實現

主要API有

midiOutGetNumDevs '得到midi設備個數

midiOutGetDevCaps '得到指定設備信息

midiOutOpen '打開迷笛以便放音

midiOutClose '關閉打開的迷笛

midiOutShortMsg '向打開的迷笛發送消息

至於如何利用它實現,我整理壹下再補充

----------------------------------------

壹般電腦都有默認的迷笛,現在使用默認的,所以midiOutGetNumDevs和midiOutGetDevCaps就不用了.

編程之前先把妳的迷笛弄出來:

"打開音量控制"-->"屬性"-->"選項"

選中單選"播放",在下面的復選欄中把"迷笛"鉤上,確定,回到音量設置界面後,把迷笛的音量調到最高.

------------------------------------

VB編程:

在窗體上添加壹個文本框,兩個按鈕,加進以下代碼:

Option Explicit

Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long

Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long

Private Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long

Dim Flip As Integer

Dim CurDevice As Long ' current midi device

Dim Hmidi As Long ' midi output 句柄

Dim Rc As Long ' return code

Dim Midimsg As Long ' 播放 message buffer

Dim sMidimsg ' 停止 message buffer

Dim Channel As Integer ' 頻道

Const Volume = 127 ' 音量

Private Sub Command1_Click()

If Not IsNumeric(Text1.Text) Then MsgBox "請輸入數字0-27":Exit Sub

Flip = CInt(Text1.Text)

If Flip < 0 Or Flip > 127 Then MsgBox "超出範圍": Exit Sub

Midimsg = &H90 + ((Flip) * &H100) + (Volume * &H10000) + Channel

sMidimsg = &H80 + ((Flip) * &H100) + Channel

midiOutShortMsg Hmidi, Midimsg

End Sub

Private Sub Command2_Click()

midiOutShortMsg Hmidi, sMidimsg

End Sub

Private Sub Form_Load()

Channel = 0

CurDevice = -1

Rc = midiOutClose(Hmidi)

Rc = midiOutOpen(Hmidi, CurDevice, 0, 0, 0)

If (Rc <> 0) Then

MsgBox "Couldn't open midi out, rc = " & Rc

End If

End Sub

Private Sub Form_Unload(Cancel As Integer)

Rc = midiOutClose(Hmidi)

End Sub

----------------------

運行示範:在文本框輸入數字65,然後點擊command1就會播放壹個音,點擊command2的話就會停止.如果不點擊command2那個音就會越來越弱直至完全聽不到.

因此輸入不同的數字就會發出不同的音高,command2點擊的快慢可以調節節拍.

其中,channel變量代表頻道,取值為0-7.迷笛允許8個聲音同時播放.

而且還有樂器選擇,默認的樂器是"鋼琴樂"

當然想實現QB裏的連續發音,要對代碼進壹步編寫,把字母映射成數字,再利用WindowsAPI函數GetTickCount實現延時.

網上有壹種音樂maker源代碼,可以參考壹下.

至於仿QB的play源代碼,(比如play "O3L8CDEFP4GAB")近期內會在我的百度空間提供...敬請關註!

  • 上一篇:莊家那些事兒的目錄
  • 下一篇:股票指標RSI和CCI指標參數怎麽設
  • copyright 2024編程學習大全網