Das Thema hatten wir doch erst vor kurzem: http://www.vbarchiv.net/forum/id10_i56873t56805.html
Du hast doch geschreiben, dass es jetzt bei Dir funktioniert?! Ich hab den Code nocheinmal herausgekramt und getestet. Bei mir klappt das (mit #D/.Net 2.0) alles mit folgendem Code einwandfrei:
Option Explicit on
Option Strict On
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic.Strings
Public Partial Class MainForm
Public Sub New()
Me.InitializeComponent()
End Sub
Private TestSoundFile As SoundFile
Private Sub Button1Click(sender As System.Object, e As System.EventArgs)
Dim ofd As New OpenFileDialog()
ofd.Filter = "Audio|*.mp3;*.wav"
If ofd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
Dim FN As String = ofd.FileName
TestSoundFile = New SoundFile(FN,1000)
End If
TestSoundFile.AudioPlay()
label1.Text = "Length: " + TestSoundFile.Length.ToString()
Me.timer1.Enabled = true
End Sub
Sub Timer1Tick(ByVal sender As Object, ByVal e As EventArgs)
label2.Text = "Position: " + TestSoundFile.Position.ToString()
End Sub
End Class
Public Class SoundFile
Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" _
(ByVal cmd As String, ByVal rsl As System.Text.StringBuilder, _
ByVal rsl_start As Int32,ByVal hwdcallback As Int32) As Int32
Private str_alias As String
Public ReadOnly Property Length As Long
Get
Dim sBuffer As New System.Text.StringBuilder(256)
mciSendString("set " & str_alias & " time format milliseconds", _
sBuffer,256,0)
mciSendString("status " & str_alias & " length",sBuffer,256,0)
Return(CLng(sBuffer.ToString().Trim()))
End Get
End Property
Public ReadOnly Property Position As Long
Get
Dim sBuffer As New System.Text.StringBuilder(256)
mciSendString("set " & str_alias & " time format" & _
"milliseconds",sBuffer,255,0)
mciSendString("status " & str_alias & " position", sBuffer, 255,0)
Return(CLng(sBuffer.ToString().Trim()))
End Get
End Property
Private Function randomNumber() As String
Dim firstPart As String
Dim r As New Random()
firstPart = Microsoft.VisualBasic.Conversion.Hex(r.Next( _
100000,999999)).Trim().ToLower()
Return(firstPart)
End Function
Public Sub New(ByVal AudioFile As String,Optional ByVal DefaultVolume As _
Long = 1000)
str_alias = "audiofile" & randomNumber() & "mp3neo"
Try
Dim N As String = Chr(34)
Dim sBuffer As New System.Text.StringBuilder(256)
If mciSendString("open " & N & AudioFile & N & " alias " & _
str_alias, nothing, 0, 0) = 0 Then
If mciSendString("setaudio " & str_alias & " volume to " & _
DefaultVolume.ToString(), nothing, 0, 0) = 0 Then
If mciSendString("set " & str_alias & " time format" & _
"milliseconds", sBuffer,0,0) <> 0 Then
MessageBox.Show("Fehler bei der Initialisierung des" & _
"Songs","Fehler (Code" & _
"0x00000003)",MessageBoxButtons.Ok,MessageBoxIcon.Error)
mciSendString("close " & str_alias,Nothing,0,0)
End If
Else
MessageBox.Show("Fehler bei der Initialisierung des" & _
"Songs","Fehler (Code" & _
"0x00000002)",MessageBoxButtons.Ok,MessageBoxIcon.Error)
mciSendString("close " & str_alias,Nothing,0,0)
End If
Else
MessageBox.Show("Fehler bei der Initialisierung des" & _
"Songs","Fehler (Code" & _
"0x00000001)",MessageBoxButtons.Ok,MessageBoxIcon.Error)
End If
Catch
End Try
End Sub
Public Overloads Function AudioPlay() As Boolean
If mciSendString("play " & str_alias & " from 0",Nothing,0,0) = 0 Then
Return(True)
Else
Return(False)
End If
End Function
Public Overloads Function AudioPlay(ByVal FromPosition As Long) As Boolean
If FromPosition <= Me.Length - 10 And FromPosition >= 0 Then
If mciSendString("play " & str_alias & " from 0",Nothing,0,0) = 0 _
Then
Return(True)
Else
Return(False)
End If
End If
End Function
End Class |