SoundPlayer Problem

Hallo,

nutze den SoundPlayer, um remote wav Files mit Meldungen auszugeben.
Der SP wird per IntegerVariable gesteuert, d.h. Integer Werten sind Sounds (die im media Ordner liegen) zugeordnet.

Beispiel: SteuerVariable ist Index
Wert -> Zuordnung
0->a (zugeordnet zu a.wav)
1->b (b.wav)
2->c (c.wav)

Problem: mitunter funktioniert es eine Weile, doch dann werden erratisch unterschiedliche Sound Files abgespielt. D.h. z.B. bei Index=0 wird trotzdem b.wav abgespielt.

Ausserdem: wenn ich z.B. dem Media Objekt a per MediaSetFile die Datei d.wav zuordne, dann wird vom SoundPlayer trotzdem a.wav abgespielt - sofern er nicht so oder so b oder c abspielt …

Das Verhalten ist erratisch, auch SendMediaEvent zum Update hilft nicht.

Was mache ich falsch - oder ist das ein Bug?

Danke
Dirk

… habe mit SysInternals FileExplorer verfolgt, was passiert.

Beim Erstzugriff auf eine wav Datei wird diese in …Local Settings/Temp als BorlandSoapAttachment<Nummer>.wav abgelegt., sprich gecached.

Dabei fallen 3 Dinge auf:

  1. siehe Bild anbei: hier werden zwei wavs, GO und GZ jeweils neu geladen, aber bei der zweiten wird dann keine neue SpoapAttachment Datei angelegt, sondern die vorige gelesen. Was dazu führt, dass sich die Sounds nicht unterscheiden - was sie natuerlich sollten

  2. Bei Schliessen des Designers/ Console werden alle SoapAttachments im Temp Ordner wieder gelöscht - wie das auch sein sollte : allerdings nicht diejenigen mit der Endung .wav

  3. Die BorlandSoapAttachment<Nummer>.wav Datei, die als erstes angelegt wird (also die erste erzeugte Cache Datei) bliebt immer gelocked - wird von IPS nicht freigegeben, im Unterschied zu allen folgenden .wav Dateien

Hoffe, das hilft ein wenig beim NAchvollziehen des Fehlers - vermute einen Bug. Benutze IPS 2.1

Über Hinweise oder FB würde ich mich sehr freuen.

Danke
Dirk

… habe es mit IPS 2.0 und 2.1 ausprobiert, mit neuem Formular, mit Neuinstallation etc. - das Fehlerverhalten bleibt; und ist auch , wenn man in die <user>/Local Settings/Temp hineinschaut zumindest anhand der Cache Dateien verfolgbar.

Hat niemand sonst das Problem? Oder war ich zu dumm, irgendetwas zu übersehen?

Wäre wirklich für einen Tip dankbar, komme einfach nicht weiter
Danke

Dirk

Der Soundplayer wird selten benutzt, am WE versuche ich das Problem mal nachzustellen. :wink:

danke!

es reicht schon, eine leere Form mit Soundplayer und 3 waves einzurichten, und dann die Integer Variable Steuervaraibale durchzuschalten… Würde mich wundern, wenn drei untershcieldiche Sound zu hören wären …

Gibt es denn eine Alternative, wie man an Clients (also an Rechnern, wo nur das Dashboard läuft), Sounds ausgeben kann?

danke
dirk

Doch (aber dann halt mit mehr als dem Dashboard…):

  1. auf dem Client zweites IPS installieren
  2. Soundkarteninstanz auf Client anlegen
  3. beide IPS über Socket verbinden
  4. wenn auf Client IPS eine Triggervariable ausgelöst wird => Sound abspielen

Ist halt etwas umständlicher.
Wie die Kopplung zweier IPS geht steht in der Script Library.

Danke für den Hinweis: ja, ich weiß - nur möchte ich gerade ja den Dienst nur auf dem Server laufen lassen, nicht auch auf den Cleints. Und eine Socket Connection zwischen den Diensten wäre ein wenig Overkill für die Ausgabe von kurzen Quittungstönen und Hinweisen …
Insofern hoffe ich noch auf eine Lösung mit dem SoundPlayer

ein wenig Overkill

Da gebe ich Dir devinitiv recht.
Ich denke eh das der Soundplayer durch eine andere Lösung abgelöst werden sollte. Ein Streamingclient wäre eine Idee.

Habe das jetzt folgendermassen gelöst:

Kleine Applikation (SoundServer) auf dem HomeServer, die von IPS per Kommando zeile angesprochen wird

SoundServer schickt per TCP Socket an den Klienten die Meldung, welcher Sound abgespielt werden soll; Dort residiert ebenfalls ein kleines Programm (SoundEx), das dann selbigen Sound ausgibt.

Kann darüberhinaus mit diesem Mechanismus auch auf dem Klienten beliebige Applikationen starten.

Die Sache ist hilfreich, wenn man wirklich mehrere Clients am IPS HomeServer hängen hat und spezifisch steuern möchte.

Dazu auch noch ein Wunsch / Verbesserungsvorschlag: Wenn ein Event von einem Client , sprich vom Designer an den IPS Dienst geht, dann sollte dort im Event auch die Quelle per IP Adresse abfragbar sein. Also z.B.

Wenn $IPS_SENDER Wert „Designer“ hat, dann
wie gehabt in $IPS_Component die SYMID
aber zusätzlich noch z.B. in $IPS_VALUE die IP Adresse des sendenden Designers

Sollte eigentlich recht einfach machbar sein, da alle Daten dem Dienst ja vorliegen

Viele Grüße
Dirk