| |
|
|
- Página 1 - |
|
Georg Hovenbitzer | ¡Hola zusammen,
Yo folgendes Problema: El Función AUDIOGetDuration liefert como Rückgabewert una FLOAT Valor. Diesen bekomme Yo simplemente no gefasst, en me se meistens el Biterate adecuado. Der Programmierer el DLL Stefan Töngi war así freundlich y ha unos pocos Test durchgeführt y schrieb entonces.
Hi,
habe ahora otra vez en el Debug-Mode dein Beispielprojekt laufen dejar y el DLL-Características voluntad korrekt aufgerufen. Auch el Rückgabewerte a Profano son korrekt. Anscheinend musst du todavía explizit el Rückgabewerte angeben, porque en el otro korrekten Aufrufen voluntad überall LONG-Variables verwendet, sólo en Duration se una FLOAT zurückgegeben. Tal vez se como intern qué falso interpretiert. Schau veces en el Profano Foro después de DLL y FLOAT, como findest du determinado qué passendes...
Tal vez könnt ihr me helfen. (Yo bin me como eigentlich muy sicher )
Ach sí, el DLL bekommt ihr bajo www.audiogenie.de KompilierenMarcaSeparaciónDef AUDIOAnalyzeFile(1) !AudioGenie2.dll,AUDIOAnalyzeFile
Def AUDIOGetDuration(0) !AudioGenie2.dll,AUDIOGetDuration
Def AUDIOGetBitrate(0) !AudioGenie2.dll,AUDIOGetBitrate
Def AUDIOGetFileSize(0) !AudioGenie2.dll,AUDIOGetFileSize
Def MultiByteToWideChar(6) !KERNEL32.DLL,MultiByteToWideChar
Proc ToWide
Parameters Original$
Var L& = @Len(Original$)
Var Ziel$ = @Space$((L& * 2))
MultiByteToWideChar($0,$1,@Addr(Original$),L&,@Addr(Ziel$),(L& * 2))
Return Ziel$
EndProc
Proc _AUDIOAnalyzeFile
Parameters Pfad$
Pfad$ = ToWide(Pfad$)
Return AUDIOAnalyzeFile(@Addr(Pfad$))
EndProc
Proc _AUDIOGetDuration
Declare Ret#
Dim Ret#,8
Float Ret#,0 = AUDIOGetDuration()
Var Ret! = Float(Ret#,0)
Dispose Ret#
Return Ret!
EndProc
Proc _AUDIOGetBitrate
Return AUDIOGetBitrate()
EndProc
Proc _AUDIOGetFileSize
Return AUDIOGetFileSize()
EndProc
Declare ID3DLL&, Ende&, File$
Window 100,100-800,600
ID3DLL& = @UseDLL(AudioGenie2.dll)
WhileNot Ende& = 1
WaitInput
If %Key = 13
File$ =
File$ = @LoadFile$(ÖFFNE,*.mp3)
Cls
Print Gültige MP3 Datei = ,_AUDIOAnalyzeFile(File$)
Print
Print Duration = ,_AUDIOGetDuration()
Print
Print Bitrate = ,_AUDIOGetBitrate()
Print
Print FileSize = ,_AUDIOGetFileSize()
ElseIf %Key = 2
Ende& = 1
EndIf
EndWhile
FreeDLLLL&
End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 24.06.2008 ▲ |
|
|
|
|
| |
|
- Página 1 - |
|
Dieter Zornow | Yo habe veces deinen Code ausprobiert y una bischen experimentiert, como Yo damals como Stefan Töngi el erste Versión, hieß damals todavía MP3Reader.dll herausbrachte , viel así gemacht habe.
Das Ergebnis war aber siempre el gleiche, Yo bekam auch siempre el Biterate adecuado, habe en el MP3 ´s con verschieden Biteraten ausprobiert. Yo denke hier es entweder en Profano oder en el Dll algo faul. Es aber ya seltsam, dass siempre exakt el Biterate zurückkommt. Yo denke, dass el Dll ya beim analysieren todos erkannte Werte en el Speicher hinterlegt y tal vez valor de el falschen Zona zurückgibt. Dürfte pero no así ser, como se entonces ya determinado viele User gemeldet hätten.
Relacionado con la Float-Zona kannst du dir wahrscheinlich sparen. Un einfache Float-Variable liefert el gleichen Valor.
Gruss
Dieter |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 24.06.2008 ▲ |
|
|
|
|
| |
|
| |
|
|
|
RGH | ¡Hola!
Gibt el DLL una 64- oder una 32-Bit-Fließkommawert zurück?
Wenn lo una 64-Bit-Fließkommawert es, se lo con XProfan no ir. ¿Es una 32-Bit-Valor, qué wahrscheinlicher es, kannst Usted ihn primero en un Longint speichern (= 32 Bit) y luego con el Función @Float() en una Fließkommawert XProfanscher Prägung (Double = 64 Bit) umwandeln.
La idea con el Bereichsvariablen sería entonces trabajo, si no Valor incluso, pero dessen Adresse (Zeiger) zurückgegeben sería. Ein Verfahren, el zwar auch häufig anzutreffen es, aber vermutlich no en diesem Fall.
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 24.06.2008 ▲ |
|
|
|
|
Georg Hovenbitzer | ¡Hola zusammnen,
vielen Dank para el Test y Tips.
@If Der Screenshot hängt a, lo kommen dreimal el gleichen Werte fuera.
@Roland Yo hoffe, Yo deine Ausführungen correcto umgesetzt. Hierbei kommt lo siempre a uno Schutzverletzung beim Intento el Umwandlung en una Fließkommawert. Yo habe beim Entwickler el DLL veces angefragt si una 64Bit oder 32Bit Valor zurück gegeben se. KompilierenMarcaSeparaciónDef AUDIOAnalyzeFile(1) !AudioGenie2.dll,AUDIOAnalyzeFile
Def AUDIOGetDuration(0) !AudioGenie2.dll,AUDIOGetDuration
Def MultiByteToWideChar(6) !KERNEL32.DLL,MultiByteToWideChar
Proc ToWide
Parameters Original$
Var L& = @Len(Original$)
Var Ziel$ = @Space$((L& * 2))
MultiByteToWideChar($0,$1,@Addr(Original$),L&,@Addr(Ziel$),(L& * 2))
Return Ziel$
EndProc
Proc _AUDIOAnalyzeFile
Parameters Pfad$
Pfad$ = ToWide(Pfad$)
Return AUDIOAnalyzeFile(@Addr(Pfad$))
EndProc
Proc _AUDIOGetDuration
Declare Ret#
Dim Ret#,8
Float Ret#,0 = AUDIOGetDuration()
Var Ret! = @Float(Ret#,0)
Dispose Ret#
Return Ret!
EndProc
Proc _Roland
Var Ret& = AUDIOGetDuration()
Var Ret! = @Float(Ret&,0)
Return Ret!
EndProc
Declare ID3DLL&, Ende&, File$
Window 100,100-800,600
ID3DLL& = @UseDLL(AudioGenie2.dll)
WhileNot Ende& = 1
WaitInput
If %Key = 13
File$ =
File$ = @LoadFile$(ÖFFNE,*.mp3)
Cls
Print Gültige MP3 Datei = ,_AUDIOAnalyzeFile(File$)
Print
Print Duration = ,_AUDIOGetDuration()
Print
Print Lösungsvorschlag = ,_Roland()
Print
ElseIf %Key = 2
Ende& = 1
EndIf
EndWhile
FreeDLL ID3DL class=s4 href='./../../funktionsreferenzen/XProfan/end/'>End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 26.06.2008 ▲ |
|
|
|
|
| Wenn AUDIOGetDuration() tatsächlich Drei veces en Folge 192 ausgibt es zumindest klar, dass hinter diesem Valor no Duration zurückgeliefert se, oder Position 0 con 192 Bit gemeint es. |
|
|
| |
|
|
|
Dieter Zornow | Yo habe veces deinen Code getestet, en me kommt gar nichts, stürzt beim Aufruf igual de. Yo habe me de tiempo el Delphi-Wrapper geladen, danach es en Delphi una Single - Variable 4 bytes groß. Yo habe pero no Idea como el en Profano umzusetzen es. Allgemein Es el Dll lo que el Ein - y Edición betrift muy schlecht dokumentiert, deshalb es el Wrapper nützlich uno sieht zumindest qué esperado se z.B. Unicode |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 26.06.2008 ▲ |
|
|
|
|
RGH | Georg Hovenbitzer
@Roland Yo hoffe, Yo deine Ausführungen correcto umgesetzt.
Ähem ... Sí y Nein ... dfenn Yo Usted el falsche Función genannt. No @Float(), pero @Double() war gemeint. El macht de uno 32-Bit-Fließkommazahl (gespeichert en el Integer) una 64-Bit-Fließkommazahl. Versuche also veces KompilierenMarcaSeparación Saludo Roland
(Desde que el DLL momentan no hier habe, kann Yo no inmediatamente testen.) |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 26.06.2008 ▲ |
|
|
|
|
RGH | Apéndice:
Yo habe ahora el DLL en me installiert. Gemäß el en el Homepage el DLL vorhandenen ausführlichen Alemán Documentación ( [...] ) müßte mi Solución trabajo. Tut ellos pero no. ¿Es posible, dass no todos MP3 el Information en Longitud en el Form enthalten, el el DLL auswertet? Für wahrscheinlicher halte Yo aber una Fehler en el DLL, como definitiv siempre el Bitrate ausgegeben se. Hier mein kleines Testprogramm: KompilierenMarcaSeparación
Proc Str2WideChar
Wandelt den Ansi-String Ansi$ in einen WideChar-String um
Parameters Ansi$
Declare Wide$
WhileLoop 1, Len(Ansi$)
Wide$ = Wide$ + Substr$(Ansi$, &loop) + z
EndWhile
Return Wide$
EndProc
Proc WideCharAddr2Str
Ermittelt aus der Adresse eines WideChar-Strings buf&
den entsprechenden Ansi-String
Parameters buf&
Declare I%, Ansi$, WChar$
I% = 0
WChar$ = Char$(buf&, I%, 2)
While WChar$ <> zz
Ansi$ = Ansi$ + Char$(buf&, I%, 1)
Inc I%, 2
WChar$ = Char$(buf&, I%, 2)
EndWhile
Return Ansi$
EndProc
Declare File$
Declare Dll&
Declare Tmp&
Cls
File$ = Str2WideChar(Test.mp3)
Dll& = @ImportDLL(AudioGenie2.dll, My_)
Print Handle DLL = ,Dll&
Tmp& = My_GetAudioGenieVersion()
Print Version = + WideCharAddr2Str(Tmp&)
Tmp& = My_AUDIOAnalyzeFile(Addr(File$))
Print bei MP3 sollte 1 kommen = ,Tmp&
Tmp& = My_GetID3V1Album()
Print Album = + WideCharAddr2Str(Tmp&)
Tmp& = My_GetID3V1Artist()
Print Artist = + WideCharAddr2Str(Tmp&)
Tmp& = My_GetID3V1Title()
Print Title = + WideCharAddr2Str(Tmp&)
Tmp& = My_AUDIOGetFileSize(Tmp&)
Print Größe (Bytes) = + Str$(Tmp&)
Tmp& = My_AUDIOGetBitrate(Tmp&)
Print Bitrate = + Str$(Tmp&)
Tmp& = My_AUDIOGetSampleRate(Tmp&)
Print Samplerate = + Str$(Tmp&)
Tmp& = My_AUDIOGetChannels(Tmp&)
Print Kanäle = + Str$(Tmp&)
Tmp& = My_AUDIOGetDuration()
Print Dauer (Sekunden) = + Str$(Double(Tmp&))
Tmp& = My_AUDIOGetLastErrorNumber(Tmp&)
Print Letzter Fehler = + Str$(Tmp&)
WaitInput
FreeDLL Dll lass=s4 href='./../../funktionsreferenzen/XProfan/end/'>End
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 26.06.2008 ▲ |
|
|
|
|
| El Dauer uno MP3 es mi humilde opinión reine Berechnungssache, Anzahl Bits dividiert por bits/s.
Auf [...] es liefert el Spieldauer en Sekunden, es así el Gesamtspieldauer o aktuell-ya-vergangene-Spieldauer gemeint? |
|
|
| |
|
|
|
RGH | IF
El Dauer uno MP3 es mi humilde opinión reine Berechnungssache, Anzahl Bits dividiert por bits/s. Auf [...] es liefert el Spieldauer en Sekunden, es así el Gesamtspieldauer o aktuell-ya-vergangene-Spieldauer gemeint?
Selbst si el gespielte Dauer en Sekunden wäre, dürfte beim no gestarteten Song no el Bitrate (como 32-Bit-Integer) en el Ergebnis posición, dass gemäß Doku una 32-Bit-Single es.
Sehr seltsam, el Ganze ...
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 26.06.2008 ▲ |
|
|
|
|
| RGH
Selbst si el gespielte Dauer en Sekunden wäre, dürfte beim no gestarteten Song no el Bitrate (como 32-Bit-Integer) en el Ergebnis posición, dass gemäß Doku una 32-Bit-Single es.
Sehr seltsam, el Ganze ...
Saludo Roland
Ist doch klar, lo wirkt como wäre hier de una Register elaborado qué zuvor para Berechnungen nötig war - podría also ser el lo una Folgefehler es porque no genügend vom Stack abgeholt se.
Mit una wenig Inlineassembler bekommt al determinado rápidamente heraus. (Franco? Könntest Usted Por favor, veces... tener mein inlineasm grad abgeschossen...) *g* |
|
|
| |
|
|
| |
|
- Página 2 - |
|
|
Georg Hovenbitzer | @If Lo se hier wohl el Gesamtspieldauer gemeint ser, como lo en el OCX Versión así es. El Función klappt hay auch y se de me @Double umgesetzt. El esta entstehenden Veces stimmen auch
@Roland Stefan ha en mi Cuestión ya geantwortet: >> Hi, en una 32bit float de C++ heraus. << Kommt de folgendem Forumsbeitrag: [...] |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 26.06.2008 ▲ |
|
|
|