API (Application Program Interface) VB6
 音を出す 前へ 目次へ 次へ 

 サンプル

 新規フォームを用意する。メニューから [プロジェクト(P)] → [標準モジュールの追加(M)] を選択して、標準モジュールを追加する。
 標準モジュールのウィンドウをアクティブ(使える状態)にしておき、APIビューアを起動して、データファイルWin32apiを読み込み準備する。

 種類@から「関数」を選択する。検索Aに"sn"と入力すると有効な項目Bに"sndPlaySound"が表示されるので選択し、[追加(A)]ボタンをクリックする。
 種類@から「定数」を選択する。検索Aに"sn"と入力しなおすと有効な項目Bに"SND"で始まる定数が表示されるので、"SND_ASYNC"を選択し、[追加(A)]ボタンをクリックする。
 最後に、[挿入(N)]ボタンをクリックすると標準モジュールにコピーされる。

 フォームにコマンドボタン(Command1)を1つ用意して次のプログラムをForm1のコードウィンドウに入力する。

・プログラムリスト

Private Sub Command1_Click()
    Dim rr As Long

    rr = sndPlaySound("chord.wav", SND_ASYNC)
End Sub

 sndPlaySoundとSND_ASYNCをすべて小文字で入力してもよい。自動的に宣言通りになる。
 音のファイル"chord.wav"はWindows 98の場合、C:\WINDOWS\MEDIA\にあるので、プログラムと同じフォルダに保存しておく。


 「ゲームの作成」で制作した"UFO Shooting"に追加する

 自機弾を発射したときには"ir_end.wav"で、敵が爆破したときには"chord.wav"で音を出す。2つの音のファイルはWindows 98の場合、C:\WINDOWS\MEDIA\にあるので、UFO Shooting のプログラムと同じフォルダに保存しておく。

(a) 自機弾を発射したときに音を出す関数を追加する。

・プログラムリスト

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim n As Integer
    Dim r As Long        '関数の返却値受け取り用
    '自機の移動(←、→)
      << 省 略 >>
    '- - - - - - - - - - - - - - -
    '自機弾発射 スペースキーON and 自機弾 表示ON
    For n = 0 To MaxTama    '自機弾数分調べる
        If KeyCode = vbKeySpace And imgTama1(n).Visible = False Then
            With imgTama1(n)    '自機弾発射
                .Left = imgTaihou.Left + imgTaihou.Width / 2
                .Top = imgTaihou.Top
                .Visible = True     '自機弾表示ON
            End With
            r = sndPlaySound("ir_end.wav", SND_ASYNC)    '音を出す
            Exit For        '1発だけ発射してforを抜け出す
        End If
    Next n
End Sub

 sndPlaySound関数はIf文の次行(With文の前行)でもよい。sndPlaySound関数の返却値を受け取るため変数rをLong型で宣言している。

 ここで実行すると、スペースキーを押して自機弾を発射すると音が出る。


(b) 敵が爆破したときに音を出す関数を追加する。

・プログラムリスト

Private Sub AtariHantei()
'当たりの判定
    Dim flag As Integer
    Dim n As Integer, nn As Integer
    Dim r As Long
    '- - - - - - - - - - - - - - -
    '自機弾が敵に当たる(敵爆破フラグBakuF()を2に設定する)
    For nn = 0 To MaxTama       '自機弾数(MaxTama個分)を調べる
        If imgTama1(nn).Visible = True Then     '自機弾表示ON
            For n = 0 To MaxTeki        '敵の数(MaxTeki個分)を調べる
                '敵表示ON かつ 当たり ならば 爆破設定
                If imgTeki(n).Visible = True And isAtari(imgTeki(n), imgTama1(nn)) = True Then
                    imgTeki(n).Picture = imgBakuha.Picture  '爆破表示
                    BakuF(n) = 2                            '爆破表示(時間)設定
                    imgTama1(nn).Visible = False            '自機弾表示OFF
                    lblTokuten.Caption = Str(Val(lblTokuten.Caption) + 100) '得点加算
                    r = sndPlaySound("chord.wav", SND_ASYNC)
                End If
            Next n
            'UFO表示ON かつ 当たり ならば 爆破設定
            If imgUFO.Visible = True And isAtari(imgUFO, imgTama1(nn)) = True Then
                imgUFO.Picture = imgBakuha.Picture      '爆破表示
                UFOf = 2                                'UFO爆破表示(時間)設定
                imgTama1(nn).Visible = False            '自機弾表示OFF
                lblTokuten.Caption = Str(Val(lblTokuten.Caption) + 500) '得点加算
                r = sndPlaySound("chord.wav", SND_ASYNC)
            End If
        End If
    Next nn
    '- - - - - - - - - - - - - - -
    '適または適弾が自機に当たる
      << 省 略 >>
End Sub

 sndPlaySound関数はIf文〜End If文の間であればよい。sndPlaySound関数の返却値を受け取るため変数rをLong型で宣言している。

 ここで実行すると、スペースキーを押して自機弾を発射すると音が出る。自機弾が敵を爆破すると音が出る。
 ただし、音は同時にひとつしか出ないので、発射と爆破が重なると一方の音が中断する。


 音を出す 前へ 目次へ 次へ 
Copyright © 2002 Hiroshi Masuda 

 

 

inserted by FC2 system