| |
|
|
- page 1 - |
|
Georg Hovenbitzer | allô zusammen,
j'ai folgendes Problem: qui Funktion AUDIOGetDuration liefert comme Rückgabewert une FLOAT Wert. Diesen bekomme je simple pas gefasst, chez mir wird la plus part du temps qui Biterate angezeigt. qui Programmierer qui DLL Stefan Töngi était so freundlich et hat un paire Test durchgeführt et schrieb ensuite.
Hi,
habe maintenant nochmal im Debug-Mode dein Beispielprojekt courir laisser et qui DLL-Funktionen volonté korrekt aufgerufen. aussi qui Rückgabewerte trop Profan sommes korrekt. Anscheinend musst du encore explizit qui Rückgabewerte angeben, car chez den anderen korrekten Aufrufen volonté überall LONG-Variablen verwendet, seulement chez qui Duration wird un FLOAT retour. peut-être wird là interne quoi faux interpretiert. exposition la fois im Profan Forum pour DLL et FLOAT, là findest du bestimmt quoi passendes...
peut-être peut son mir aider. (je suis mir là eigentlich très sûrement )
ah oui, qui DLL bekommt son sous www.audiogenie.de KompilierenMarqueSéparationDef 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&
Fin
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 24.06.2008 ▲ |
|
|
|
|
| |
|
- page 1 - |
|
Dieter Zornow | j'ai la fois deinen Code ausprobiert et un un peu experimentiert, là je autrefois comme Stefan Töngi la première Version, hieß autrefois encore MP3Reader.dll herausbrachte , viel avec cela gemacht habe.
cela Ergebnis était mais toujours cela gleiche, je bekam aussi toujours qui Biterate angezeigt, habe cela chez MP3 ´s avec verschieden Biteraten ausprobiert. je denke ici ist entweder chez Profan ou bien dans qui Dll quelque chose fainéant. c'est mais déjà seltsam, dass toujours exakt qui Biterate zurückkommt. je denke, dass qui Dll bereits beim analysieren alle erkannte Werte im grenier hinterlegt et peut-être la valeur aus dem falschen Bereich zurückgibt. Dürfte mais pas so son, là sich ensuite déjà bestimmt viele User gemeldet hätten.
Relatif à la Float-Bereich peux du dir wahrscheinlich sparen. une simple Float-Variable liefert den gleichen Wert.
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 | allô!
Gibt qui DLL une 64- ou bien une 32-Bit-Fließkommawert zurück?
si es un 64-Bit-Fließkommawert ist, wird es avec XProfan pas aller. Ist es un 32-Bit-Wert, quoi wahrscheinlicher ist, peux Du ihn zunächst dans einem Longint Sauver (= 32 Bit) et ensuite avec qui Funktion @Float() dans une Fließkommawert XProfanscher Prägung (Double = 64 Bit) transformer.
L'idée avec qui Bereichsvariablen serait ensuite marcher, si pas qui Wert selbst, mais dessen Adresse (aiguille) retour serait. un procéder, cela zwar aussi häufig anzutreffen ist, mais probablement pas dans diesem le cas.
Salut 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 | allô zusammnen,
vielen Dank pour qui Test et Tips.
@Si qui Screenshot hängt à, es venons dreimal qui gleichen Werte raus.
@Roland je hoffe, j'ai deine Ausführungen richtig mise en œuvre. Hierbei venez es toujours trop einer Schutzverletzung beim Versuch qui Umwandlung dans une Fließkommawert. j'ai beim Entwickler qui DLL la fois angefragt si un 64Bit ou bien 32Bit Wert zurück gegeben wird. KompilierenMarqueSéparationDef 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/'>Fin
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 26.06.2008 ▲ |
|
|
|
|
| si AUDIOGetDuration() réellement trois la fois dans Folge 192 ausgibt ist zumindest bien sûr, dass derrière diesem Wert aucun Duration zurückgeliefert wird, ou bien Position 0 avec 192 Bit gemeint ist. |
|
|
| |
|
|
|
Dieter Zornow | j'ai la fois deinen Code getestet, chez mir venez gar rien, stürzt beim Aufruf juste ab. j'ai mir la fois den Delphi-Wrapper geladen, après ist es dans Delphi une Single - Variable 4 bytes grand. j'ai mais je n'en sais rien comment cela dans Profan umzusetzen ist. Allgemein ist qui Dll quoi qui un - et Ausgabe betrift très mal dokumentiert, c'est pourquoi ist qui Wrapper nützlich on voit zumindest quoi erwartet wird 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 je hoffe, j'ai deine Ausführungen richtig mise en œuvre.
Ähem ... et alors non ... dfenn j'ai Dir qui falsche Funktion genannt. pas @Float(), mais @Double() était gemeint. qui pouvoir aus einer 32-Bit-Fließkommazahl (gespeichert im Integer) une 64-Bit-Fließkommazahl. Versuche alors la fois KompilierenMarqueSéparation Salut Roland
(là je qui DLL momentan pas ici habe, peux je es pas tout de suite 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 | Nachtrag:
j'ai maintenant qui DLL chez mir installiert. Gemäß qui sur qui Page d'accueil qui DLL vorhandenen ausführlichen deutschen Documentation ( [...] ) devrait mon Solution marcher. Tut vous mais pas. Ist es possible, dass pas alle MP3 l'information sur qui Longueur dans qui forme enthalten, qui qui DLL auswertet? Pour wahrscheinlicher halte je mais une faute dans qui DLL, là définitif toujours qui Bitrate ausgegeben wird. ici mon kleines Testprogramm: KompilierenMarqueSéparation
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/'>Fin
Salut 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 ▲ |
|
|
|
|
| qui la durée einer MP3 ist imho reine Berechnungssache, Anzahl Bits dividiert par bits/s.
sur [...] steht liefert qui Spieldauer dans Sekunden, ist avec cela qui Gesamtspieldauer ou bien qui aktuell-bereits-vergangene-Spieldauer gemeint? |
|
|
| |
|
|
|
RGH | iF
qui la durée einer MP3 ist imho reine Berechnungssache, Anzahl Bits dividiert par bits/s. sur [...] steht liefert qui Spieldauer dans Sekunden, ist avec cela qui Gesamtspieldauer ou bien qui aktuell-bereits-vergangene-Spieldauer gemeint?
Selbst si es qui gespielte la durée dans Sekunden wäre, pourrait beim pas gestarteten Song pas qui Bitrate (comme 32-Bit-Integer) im Ergebnis stehen, dass gemäß Doku une 32-Bit-Single ist.
très seltsam, cela Ganze ...
Salut 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 es qui gespielte la durée dans Sekunden wäre, pourrait beim pas gestarteten Song pas qui Bitrate (comme 32-Bit-Integer) im Ergebnis stehen, dass gemäß Doku une 32-Bit-Single ist.
très seltsam, cela Ganze ...
Salut Roland
Ist doch bien sûr, es wirkt comme wäre ici aus einem Register gezogen quoi zuvor pour Berechnungen nötig était - pourrait alors son cela es un Folgefehler ist weil pas genügend vom Stack abgeholt wird.
avec un peu Inlineassembler bekommt on cela bestimmt vite heraus. (Frank? Könntest Du s'il te plaît la fois... hab mon inlineasm grad abgeschossen...) *g* |
|
|
| |
|
|
| |
|
- page 2 - |
|
|
Georg Hovenbitzer | @Si Es wird ici wohl qui Gesamtspieldauer gemeint son, là es dans qui OCX Version so ist. qui Funktion klappt là aussi et wird de mir @Double mise en œuvre. qui dabei entstehenden Zeiten stimmen aussi
@Roland Stefan hat sur mon Frage déjà geantwortet: >> Hi, um un 32bit float aus C++ heraus. << venez aus folgendem Forumsbeitrag: [...] |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 26.06.2008 ▲ |
|
|
|