現実逃避のプログラミング

日曜プログラマ、とかそんなんですらなく、いろいろやらなきゃならないときに、「うがー。この現実から逃げ出したい」という状況のときに、なにかくだらないツールのようなものを、VBとかでサクッと作る。そんな感じでやっています。
だからもうほんとに、何もかも忘れていて、インスタンスって何だっけ……インヘリッツって何だっけ……みたいな。感じで。検索しまくり。
VS2005にアップグレードしてから、ほとんど触ってなかったんですが……なんじゃこりゃー……これはVBなのか?……そして.NETなのか?……もはやVB2005というまったく新しい言語の登場ではないのか?(いいすぎ)
とか思ってしまいました。誰もが通る、簡易"MP3プレイヤー"作成。をやってるんですが。
MP3ファイルからIDタグを読み込む、というのはめちゃくちゃ難しいことで、何か既存のAPIを使わないと無理、というところまではわかって、じゃあ何を使おう。っていうんで迷いました。VBMP3.dllは最新版の配布はされていなくて、サポートページも閉じちゃってますね。Macとの互換を考えてQuickTimeか?と思ったのですが、WinユーザはQT嫌う人もいるということを読んだのでアウト。fmodってすごいのがあるのですが、VisualBasic2005からは参照できなかった。なんでだろ?
結局一番簡単な、AxWindowsMediaplayerを使ってみたんですが、メディアプレーヤで再生するだけではタグ情報読めないらしく(たぶん)、いったんプレイリストにアペンドして、プレイリストからインフォをもらう。というやり方にしてみました。
というところまでOK。いま休止中。
問題点は、MP3ファイルを再生するたびにプレイリストを新しく作り(笑)、同じ曲を再生してもジャンジャカプレイリストが作成されてしまう点。これはIf文でプレイリストがなければリストを作って……というふうに直さなきゃ、ですね。どーやんのかわかんないけど。
進捗があればまた報告します。

↓はコード。

Imports System.IO
Imports AxWMPLib
Imports WMPLib
Imports System.Runtime.InteropServices

Public Class Form1

    Dim stMp3Path As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPlay.Click

        wmPlayer.Ctlcontrols.play()
        
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click

        wmPlayer.Ctlcontrols.stop()


    End Sub

    Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop

        stMp3Path = e.Data.GetData(DataFormats.FileDrop)(0)

        If Dir(stMp3Path) <> "" Then
            wmPlayer.URL = stMp3Path

            Dim wArtist As String
            Dim wTitle As String


            ' Get an interface to the current media item.
            Dim currMedia As IWMPMedia = wmPlayer.currentMedia

            ' Get an interface to the playlist.
            Dim wList As IWMPPlaylist = wmPlayer.playlistCollection.newPlaylist("WinMP3list")

            ' Append the media item to the playlist.
            wList.appendItem(currMedia)

            wArtist = wmPlayer.currentMedia.getItemInfo("Author")
            Label1.Text = wArtist

            wTitle = wmPlayer.currentMedia.getItemInfo("Title")
            Label2.Text = wTitle

        End If

    End Sub

    Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter

        If e.Data.GetDataPresent(DataFormats.FileDrop) Then

            'ドロップ効果を取得
            e.Effect = DragDropEffects.Copy
        Else
            'ドロップ効果を破棄
            e.Effect = DragDropEffects.None
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.AllowDrop = True

    End Sub

End Class