Français
Forum

FLOAT comme Rückgabewert aus qui AudioGenie.DLL

 
- 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éparation
 
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  
 



peux la fois un Screenshot de
KompilierenMarqueSéparationfaire?
 
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éparation
Def 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

22 kB
Kurzbeschreibung: Screenshot
Hochgeladen:26.06.2008
Downloadcounter122
Download
 
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.
 
26.06.2008  
 




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
<...>
Var Ret& = AUDIOGetDuration()
Var Ret! = @Double(Ret&)
<...&
pre>

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?
 
26.06.2008  
 




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*
 
26.06.2008  
 



 
- 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  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.024 Views

Untitledvor 0 min.
Gast.0815 vor 14 Tagen
Erasmus.Herold13.11.2018
Michael Borowiak19.12.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie