Moi.
Tässä tuli semmonen huomio, että kun sovelsin tuota esimerkkiä (https://www.ohjelmointiputka.net/keskustelu/1021-mp3-sen-pituus-selville), ettei tuolla tavalla voi selvittää erikoismerkkejä(jopa välimerkkiä) sisältävien kappaleiden pituuden selvitystä. Miten pitäis muokata että toimis?
Kopioi soitettava kappale väliaikaiseen tiedostoon pituuden lukemiseksi.
Esimerkiksi, [asema]:\gappale.mp3:ksi niin ei välilyöntejä, eikä erikoismerkkejä esiinny.
FileCopy "C:\omat musiikit\j33j33\kipale.mp3", "c:\gappale.mp3"
Nipasenmaki: Liian hidas ja aika 'purkka' tapa :D
Tiedoston nimi pitää muuttaa lyhyempään muotoon.
Tässä on esimerkki:
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Private Sub Form_Load()
Dim nimi As String * 255
Dim tiedosto As String
Dim pituus As String * 255
' selvitetään tiedoston lyhyt nimi
GetShortPathName "c:\musa\Tässä on tiedoston nimi.mp3", nimi, 255
tiedosto = Left(nimi, InStr(nimi, Chr(0)) - 1)
MsgBox "Lyhyt nimi: " & tiedosto
' haetaan kappaleen pituus millisekunteina
mciSendString "open " & tiedosto & " alias musa", 0, 0, 0
mciSendString "set time format milliseconds", 0, 0, 0
mciSendString "status musa length", pituus, 255, 0
mciSendString "close musa", 0, 0, 0
' muutetaan aika minuuteiksi ja sekunneiksi
Dim minuutit As Integer, sekunnit As Integer
sekunnit = pituus \ 1000
minuutit = sekunnit \ 60
sekunnit = sekunnit Mod 60
MsgBox "Kappaleen kesto: " & minuutit & ":" & sekunnit
End SubAntti Laaksonen: Tarkemmin tutkittuna huomasin, että koodisi nollaa koko tiedostonimen. Tulee vaan ilmotus että nimi on nyt:
Milläs ton saa korjatuks?
Aihe on jo aika vanha, joten et voi enää vastata siihen.