Seite 4 von 4
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 17.09.2018 19:51
von schleicher
ccode_new hat geschrieben:
Das Ende vom Lied:
Mp3 Dateien mit korrekten ID3-Tags sind zu bevorzugen und in der "Else-Klausel" zu reparieren.
Bräuchte ich nur eine Idee wie man die mp3 Dateien mit inkorrekten ID3-Tags am schnellsten erkennt.Audiogenie liefert ja eine Länge,aber falsch. Da wäre besser, wenn es garkeine Länge wiedergeben würde. Mediainfo habe ich dafür nun eingebaut.
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 17.09.2018 21:02
von ccode_new
Man könnte vielleicht erstmal mit der Dateigröße prüfen ob die Songlänge stimmen könnte. (Sehr grobe Prüfung)
Man könnte auch beim Abspielen der Mp3 einen Timer mit laufen lassen. Die Timer-Zeit nach Durchlauf könnte eingetragen werden.
(Sehr genau, aber sehr langsame und gedultige Prüfung)
Quatsch bei Seite!
Wie falsch ist den die falsch ausgelesene Zeit beim "AudioGenie" ?
Mich interessiert auch immernoch wie der Windows-Explorer so schnell die korrekte Länge ermittelt.
Die MCI/DirectShow (Win 32 API) versagt ja bei VBR.
Aber es gibt ja auch noch modernere Microsoft Multimedia-API (meistens über .Net-Framework.)
(Es fehlt nur noch das WIE unter PureBasic)
Der Weg über die MediaInfo.dll ist aber auch ersteinmal ganz ok.
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 18.09.2018 09:31
von schleicher
ccode_new hat geschrieben:
Wie falsch ist den die falsch ausgelesene Zeit beim "AudioGenie" ?
Audiogenie zeigt über 21min statt über 3min.
Wie der Windowsexplorer das macht interessiert mich auch.
Solange es keine bessere Lösung gibt lasse ich das nun erst einmal so mit Mediainfo.
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 18.09.2018 19:18
von ccode_new
Servus !
Ich habe tolle Nachrichten.
Es gibt eine Lösung.
(Benötigt Windows > XP (Vista, 7, …) )
(Unter Windows XP funktioniert es glaube ich nicht. Es könnte aber trotzdem mal getestet werden.)
Benötigt die tolle "COMatePLUS"-Bibliothek aus diesem Forum.
Code: Alles auswählen
IncludePath "..\"
XIncludeFile "COMatePLUS.pbi"
Structure _EOP
Description.s
Value.s
EndStructure
Global NewMap EOP_Items._EOP()
Procedure GetExtendedFileProperties(file$, Map Item._EOP())
Define.COMateObject oShell
Define.COMateObject oFolder
Define.COMateObject oFolderItem
Define.COMateObject oFolderItems
Define DetailCounter
Define.s DetailDescription, DetailValue
oShell = COMate_CreateObject("Shell.Application")
If oShell
oFolder = oShell\GetObjectProperty("NameSpace('" + GetPathPart(file$) + "')")
If oFolder
oFolderItems = oFolder\GetObjectProperty("Items")
If oFolderItems
oFolderItem = oFolder\GetObjectProperty("ParseName('" + GetFilePart(file$) + "')")
If oFolderItem
For DetailCounter = 0 To 512
DetailDescription = oFolder\GetStringProperty("GetDetailsOf(" + Str(oFolderItems) + " As COMateObject, " + Str(DetailCounter) + ")")
DetailValue = oFolder\GetStringProperty("GetDetailsOf(" + Str(oFolderItem) + " As COMateObject, " + Str(DetailCounter) + ")")
If DetailValue
If AddMapElement(Item(), Str(DetailCounter))
Item()\Description = DetailDescription
Item()\Value = DetailValue
;Debug "Nr." + Str(DetailCounter) + " -> " + DetailDescription + ": " + DetailValue
EndIf
EndIf
Next
oFolderItem\Release()
Else
Debug "!oFolderItem"
Debug COMate_GetLastErrorDescription()
EndIf
oFolderItems\Release()
Else
Debug "!oFolderItems"
Debug COMate_GetLastErrorDescription()
EndIf
oFolder\Release()
Else
Debug "!oFolder"
Debug COMate_GetLastErrorDescription()
EndIf
oShell\Release()
Else
Debug "!oShell"
Debug COMate_GetLastErrorDescription()
EndIf
EndProcedure
Procedure.s GetSongDuration()
ProcedureReturn EOP_Items("27")\Value
EndProcedure
media.s = OpenFileRequester("Mp3 Suche!", "*.mp3", "Mp3|*.mp3", 0)
GetExtendedFileProperties(media, EOP_Items())
MessageRequester("Song-Duration", "Die Mp3-Länge ist: "+ GetSongDuration(), #PB_MessageRequester_Info)
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 22.09.2018 13:53
von schleicher
Hallo ccode_new
Das sind ja wirklich tolle Nachrichten.
Ich habs getestet und funktoniert tadellos. Und schnell ist es auch . Prima.
Hab es gleich eingebaut.
Habe noch ein Problem bei Audiogenie festgestellt.
Manche Bilder werden nicht in den ID3Tag übernommen obwohl :
Code: Alles auswählen
If SetCoverImage(imagepad, "CoverFront", #CoverFront)
Debug "Das Bild wurde übernommen."
Else
Debug "Das Bild wurde nicht übernommen."
EndIf
Debug ausgibt : Das Bild wurde übernommen.
Alles andere vom ID3TAG wird immer richtig gespeichert. Die Bilder sind immer .jpg und haben eine Auflösung von 300x300
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 22.09.2018 14:29
von ccode_new
Sorry!
Ändere es bitte so:
Return:
Int16 normalerweise -1, bei Fehler 0
PseudoCode:
If Abs(..Funktion..)
#True
Else
#False
EndIf
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 22.09.2018 16:15
von schleicher
Habe das Problem finden können. Im Id3Tag können mehrere Bilder gespeichert sein.
Bei
wird das Bild 1 geladen .
Wenn ich
Code: Alles auswählen
SetCoverImage(temp_coversave ,"Cover Front", #CoverFront)
mache dann wird das Bild 1 aber nicht überschrieben, sondern es wird als Bild 2 oder Bild 3 hinzugefügt.
Man müsste eine Funktion haben die alle vorhanden Bilder löscht.
Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 22.09.2018 16:29
von ccode_new
Habe das Problem finden können. Im Id3Tag können mehrere Bilder gespeichert sein.
Genau so ist es.
Für diesen Fall habe ich ja auch diese Konstellation in den Test eingebaut.
GetCoverImage(GetCurrentDirectory()+"song.jpg", 1)
GetCoverImage(GetCurrentDirectory()+"song.jpg", 2)
;RemoveTag()
RemoveTag() würde auch alle Bilder löschen.
Es müssen nur die anderen Daten zwischengespeichert und neu gesetzt werden.
Es ist bei Änderung der Set-Funktion auch möglich nur Bildlinks zu speichern.
In früheren Versionen der AudioGenie-Lib gib es noch die Funktion "ID3V2DeletePictures()".
Diese Funktion ist aber in der Version 3 nicht mehr enthalten.
Anbei:
Wie man überhaupt auf die Idee kommt den Rückgabewert standardmäßig auf -1 zulegen? So ein Mist!

Re: Problem mp3 Titellänge bei MCI-MP3-Commands
Verfasst: 22.09.2018 18:20
von schleicher
RemoveTag() würde auch alle Bilder löschen.
Es müssen nur die anderen Daten zwischengespeichert und neu gesetzt werden.
Danke für den Tip.
RemoveTag() hat das Problem gelöst ! Wie du sagtest: Daten zwischenspeichern, RemoveTag()
ausführen und Daten mit neuem Bild speichern.