投稿者 YAS  (社会人) 投稿日時 2010/7/17 10:18:28
※一つ上の削除は私です。コードに間違いがありました。ごめんなさい。

高レベルMCIを使っているのですね。
再生位置の表示は次のようになると思います。
ついでにTrackBarを移動すると再生位置も移動するようにしています。
再生時間の取得はTrackBarのMaximumを指定するところを参考にしてください。
音量を変更したファイルの作成は高レベルMCIを使用した方法は思いつきません。
Waveファイルをバイナリで読み込んで直接変更するか,DirectShowを使うことになると思います。

Option Explicit On
Option Strict On

Imports System.Text
Imports System.Runtime.InteropServices

Public Class Form1

    <DllImport("winmm.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function mciSendString( _
        ByVal command As String, _
        ByVal buffer As StringBuilder, _
        ByVal bufferSize As Integer, _
        ByVal hwndCallback As IntPtr) As Integer
    End Function

    Dim WithEvents Button1 As New Button
    Dim WithEvents TrackBar1 As New TrackBar
    Dim WithEvents Timer1 As New Timer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Button1.Text = "再生"
        Me.TrackBar1.Location = New Point(0, 30)
        Me.TrackBar1.Width = Me.ClientSize.Width
        Me.Controls.AddRange({Me.Button1, Me.TrackBar1})
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim FileName As String = Application.StartupPath & "\Test.wav"
        Dim Command As String
        Command = String.Format("open ""{0}"" alias MySound", FileName)
        mciSendString(Command, Nothing, 0, IntPtr.Zero)
        Command = String.Format("status {0} {1}", "MySound", "length")
        Dim Res As New StringBuilder(256)
        mciSendString(Command, Res, Res.Capacity, IntPtr.Zero)
        TrackBar1.Maximum = Integer.Parse(Res.ToString)
        Command = "play MySound"
        mciSendString(Command, Nothing, 0, IntPtr.Zero)
        Me.Timer1.Interval = 500
        Me.Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Command As String = String.Format("status {0} {1}", "MySound", "position")
        Dim Res As New StringBuilder(256)
        mciSendString(Command, Res, Res.Capacity, IntPtr.Zero)
        Me.TrackBar1.Value = Integer.Parse(Res.ToString)
    End Sub

    Private Sub TrackBar1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
        Dim TrackBar As TrackBar = DirectCast(sender, TrackBar)
        Dim Command As String = String.Format("seek {0} to {1}", "MySound", TrackBar.Value)
        mciSendString(Command, Nothing, 0, IntPtr.Zero)
        Command = "play MySound"
        mciSendString(Command, Nothing, 0, IntPtr.Zero)
    End Sub
End Class