Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Preview: Audorra Digital Audio Library (23.08.09) (https://www.delphipraxis.net/131216-preview-audorra-digital-audio-library-23-08-09-a.html)

mleyen 19. Jun 2009 22:19

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Zitat:

Zitat von igel457
Bekannte "Bugs":
- Memoryleaks in Acinerella (werden beim Beenden angezeigt)

Ich hab mich gerade mal ein bissl im Code umgeschaut.
Der MemLeak entsteht in der Unit "TAuDecoderThread".
Um genau zu sein:
In der Execute-Prozedur der TAuDecoderThread-Klasse.
Dort gibst du den neu allozierten Speicher nur bei einer Exception frei.

Hier die korrigierte Execute-Methode:
Delphi-Quellcode:
procedure TAuDecoderThread.Execute;
var
  pckt: TAuPacket;
  FMem: PByte;
  smpls, bfsize: Integer;
begin
  FMem := nil;
  FLastFrame := false;
 
  try
    while not Terminated do
    begin
      //Check whether the target buffer is filled
      if (FBuffer.Filled < FBufSize) then
      begin
        //Tell the decoder to go on decoding
        case FDecoder.Decode of
          audsHasFrame:
          begin
            //Get the packet from the decoder
            FDecoder.GetPacket(pckt);

            //Recode the buffer to float values
            smpls := pckt.BufferSize div Integer(AuBytesPerSample(FDecoder.Info));
            bfsize := Integer(AuBytesPerSample(FDecoder.Info.Parameters)) * smpls;
            ReallocMem(FMem, bfsize);

            AuPCMIntToFloat(FDecoder.Info, pckt.Buffer, FMem, smpls);

            //Write the packet content into the buffer
            FCritSect.Enter;
            try
              FBuffer.Write(FMem, bfsize, pckt.Timecode);
            finally
              FCritSect.Leave;
            end;
          end;
          //Terminate the thread if the decoder is at the end
          audsEnd:
            FLastFrame := true;
        end;
        if FLastFrame then
          Sleep(1);
      end else
        Sleep(1);
    end;
  finally // In einen finally-Block umgewandelt ;)
    if FMem <> nil then
      FreeMem(FMem);
  end;
end;

igel457 19. Jun 2009 22:24

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Tatsächlich - danke, das war der Fehler, ich vermutete die ganze Zeit, das sei ein Bug in Acinerella. Und ich hatte keine Lust meinen C-Code mit gdb durch zu debuggen. :thumb:

Eine neue Version (1.0) wird es vermutlich während den Sommerferien geben.

xZise 20. Jun 2009 11:46

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Also ich habe gerade Simple.exe unter Windows 7 RC x64 getestet.

Und wenn ich den Lautstärkeschieberegler bewege, verbreitert sich das entsprechende "Panel" oder was das da

Und irgendwann bekomme ich dann:
Zitat:

---------------------------
Simple
---------------------------
Ungültige Gleitkommaoperation.
---------------------------
OK
---------------------------
MfG
xZise

igel457 20. Jun 2009 16:06

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Ja, das Problem habe ich unter Windows 7 auch - scheint ein Bug in der VCL zu sein.

igel457 12. Jul 2009 11:35

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Hallo.

Als kleine Aktualisierung (ich habe trotz Sommerferien leider nicht allzuviel Zeit) eine kleine Übersicht über die neusten Entwicklungen:

Ich habe nun ein dynamisches Pluginsystem implementiert, welches ich in dieser Weise auch in Andorra einbinden werden. Dieses Pluginsystem erlaubt es, Module sowohl statisch (durch einfaches aufnehmen in die Uses-Klausel) als auch dynamish (aus einer DLL) zu linken - der Anwendung ist das egal.

Es existiert ein so genannter Registrationsserver (AcRegSrv, das Ac steht für "Andorra Commons"), der alle Module verwaltet:
Code:
AcRegSrv DbgDump
----------------

                          Name |                                           IdentStr | SrcID |    @Create
                               |                                                    |       |
                  TAcStoreNode |                         TAcPersistent.TAcStoreNode |     0 |    4217572
                TAcIntegerNode |          TAcPersistent.TAcStoreNode.TAcIntegerNode |     0 |    4217608
                  TAcFloatNode |            TAcPersistent.TAcStoreNode.TAcFloatNode |     0 |    4217644
                 TAcStringNode |           TAcPersistent.TAcStoreNode.TAcStringNode |     0 |    4217680
                   TAcBoolNode |             TAcPersistent.TAcStoreNode.TAcBoolNode |     0 |    4217716
                 TAcStreamNode |           TAcPersistent.TAcStoreNode.TAcStreamNode |     0 |    4217752
               TAuOpenALDriver |            TAcPersistent.TAuDriver.TAuOpenALDriver |     1 |   14695264
              TAuWaveOutDriver |           TAcPersistent.TAuDriver.TAuWaveOutDriver |     1 |   14696360
                 TAuWAVDecoder |             TAcPersistent.TAuDecoder.TAuWAVDecoder |     1 |   14699972
          TAuAcinerellaDecoder |      TAcPersistent.TAuDecoder.TAuAcinerellaDecoder |     1 |   14700932

Classes registered:    10
Current source id:     1
Von einem Modul werden Klassenname, Klassenhierarchie, Quellenidentifikationsnummer (also aus welchem Programmmodul (0 = lokal, >0 = aus einem anderen Plugin) das Plugin ist) und ein Pointer zum Konstruktor der Klasse gespeichert.

Eine DLL mit Zusatzmodulen ist sehr einfach zu erstellen. Die im oben gezeigten Beispiel gezeigte DLL sieht folgendermaßen aus:
Delphi-Quellcode:
library AudorraFoo;

uses
  AcPersistent,
  AuOpenAL, AuWaveOut32Driver, AuWav, AuAcinerella;

exports
  AcDLLInit,
  AcDLLFinalize,
  AcDLLExportClasses;

begin
end.
Möchte man die in der Uses-Klausel aufgeführten Module statisch verwenden, so sind sie einfach im Hauptprogramm einzubinden.

Ein Plugin kann ganz einfach geladen werden:
Delphi-Quellcode:
var
  plg: TAcPluginDLL;
begin
  plg := TAcPluginDLL.Create;
  plg.LoadPlugin('AudorraFoo.dll');
  plg.RegisterClasses(TAcPersistent);

  [...]

  plg.Free;
end;
Ich freue mich über eure Kommentare,
Andreas

Ruio 12. Jul 2009 13:41

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Zitat:

Zitat von xZise
Also ich habe gerade Simple.exe unter Windows 7 RC x64 getestet.

Und wenn ich den Lautstärkeschieberegler bewege, verbreitert sich das entsprechende "Panel" oder was das da

Und irgendwann bekomme ich dann:
Zitat:

---------------------------
Simple
---------------------------
Ungültige Gleitkommaoperation.
---------------------------
OK
---------------------------
MfG
xZise

Das passiert mir auch unter Windows Vista. Das Programm hört ja gar nicht auf den Fehler-Ton abzuspielen, obwohl ichs mitm Taskmanager abgeschossen hab.

igel457 12. Jul 2009 13:46

Re: Preview: Audorra - Opensource Audiobibliothek (26.04.09)
 
Wie gesagt - ein Bug in der VCL. Ich habe in meiner aktuellen Version schon die Fehlermeldung entschärft - aber dafür, dass das Panel kleiner wird kann ich nichts.

igel457 23. Aug 2009 15:01

Re: Preview: Audorra Digital Audio Library (26.04.09)
 
Ich habe mal eine neue Version hoch geladen.

Die wichtigesten Änderungen:[*] Verbesserte Visualisierungen
[+] FFT Analyse
[+] Support von HTTP-Streams (Achtung: Das Öffnen dieser kann seine Zeit (bis zu 30 Sekunden) dauern!), basiert auf einer modifizierten Version von Synapse (im lib Ordner)[*] Jede Menge Bugs behoben[*] Suchen in Acinerella-Strömen eingefügt
[+] Vollständige Unterstützung des Andorra Common Plugin Systems: Jedes Protokollformat/Dekoder kann einfach in eine DLL ausgelagert werden.[*] TAuStaticSoundList basiert nun auf dem Andorra Common Store.[*] Probleme mit WaveOut unter Windows 7 behoben

Bekannte Bugs:
- Lange Ladezeiten von HTTP-Streams (besonders bei MP3)
- Hohe CPU-Auslastung der Visualisierungen in der Delphi Simple Demo (liegt nur an den Zeichenoperationen, nicht direkt an Audorra)
- Nicht unter Linux lauffähig (mir fehlt eine GetCurrentThreadID o.ä Funktion)

Das Ganze ist jedoch immer noch nicht als "stabil" oder "fertig" zu bezeichnen, sondern immer noch im Alpha-Status!


Die aktualisierte Version gibt es im ersten Beitrag.

Viel Spaß, ich warte gespannt auf eure Kommentare,
Andreas

xZise 23. Aug 2009 17:26

Re: Preview: Audorra Digital Audio Library (23.08.09)
 
Hallo,
bei mir streikt Audorra bei einigen Liedern o.O Zur Zeit an urheberrechtlichen Kram getestet. Ich teste gleich mal bei OS Musik ^^ dann kann ich wenigstens genauere Aussagen machen!

Übrigens:
Zitat:

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:



13 - 20 bytes: TChangeLink x 20

21 - 28 bytes: String x 20

157 - 172 bytes: TMenuItem x 20


---------------------------
OK
---------------------------
Noch was anderes: Und zwar ändert sich beim Label die Schrift erst, sobald man den Schieberegler bewegt. Außerdem ist es total unhandlich die ProgressBar zu "bewegen" ;) Besonders weil unter Vista (und 7) der Balken nicht sofort auf die Position kommt, sofern Pos > AltePos. Nimm doch stattdessen eine Trackbar. Außerdem bietest du bei Open zwar "File" und "URL" an, aber warum dann unten "Directory" verstecken?

Wenn du nichts dagegen hast, dann veröffentliche ich meine "modifizierte" Version ;) Du kannst dir das ja angucken und Änderungen (nicht) übernehmen :mrgreen:

MfG
xZise

igel457 23. Aug 2009 19:29

Re: Preview: Audorra Digital Audio Library (23.08.09)
 
Hi,

der Memoryleak ist so gewollt :mrgreen: . Die Anwendung soll sowieso nur eine kleine Demo sein - wenn du damit einen gescheiten Audiospieler bauen willst - nur zu!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
Seite 5 von 6   « Erste     345 6      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz