[BUG] Skript läuft in v8 nicht

Folgendes Skript, welches in v7 taddellos läuft, gibt in v8 einen type mismatch aus. Es soll ein Audio unter Umgehung einer Playlist direkt ausspielen:

const
  FILENAME = 'C:\path\to\sound.wav';
  DEVICE = 'Cartwall_OnAir';

procedure OnExecuteCommand(Command: string);
var
  devices: TPlaybackDeviceSet;
  fpi: IFilePlaylistItem;
  dev: IPlaybackDevice;
begin
  if Command = 'GERAEUSCH' then begin
    fpi := Instance.GetFactory.CreateFilePlaylistItem(FILENAME, []);
    devices := Instance.GetPlaybackRouting.GetPlaybackDevices(DEVICE); // <-- hier tritt der Fehler auf
    PlaybackControl(0).PlayItemDetached(fpi, devices);
  end;
end;

Bitte prüft das mal. Danke!

Ist bei diesem BUG ein “workaround” möglich?

mAirList verwendet intern ein neues, flexibleres System für das Audio-Routing. Die Wiedergabe erfolgt jetzt in “AudioSinks”, die wiederum an Soundkartenausgänge geroutet werden.

Am einfachsten verwendet man diese Methode von IFactory, um so einen Sink zu erzeugen:

function CreatePlaybackSink(const iRoutingID: string): IAudioSink;

Die RoutingID ist weiterhin das, was du in der devices.ini siehst, also im obigen Beispiel Cartwall_OnAir.

Daraus ergibt sich dann der folgende neue Code:

const
  FILENAME = 'C:\path\to\sound.wav';
  ROUTING_ID = 'Cartwall_OnAir';

procedure OnExecuteCommand(Command: string);
var
  sink: IAudioSink;
  fpi: IFilePlaylistItem;
begin
  if Command = 'GERAEUSCH' then begin
    fpi := Instance.GetFactory.CreateFilePlaylistItem(FILENAME, []);
    sink := Factory.CreatePlaybackSink(ROUTING_ID);
    PlaybackControl(0).PlayItemDetached(fpi, sink);
  end;
end;

PS: “Bug” ist keine Abkürzung, daher schreibt man es nicht in Großbuchstaben.

4 Likes
[Error] (12:21): Unknown identifier 'CREATEPLAYLISTSINK'

Sorry, mein Fehler, CreatePlaybackSink muss es heißen. Post korrigiert.

1 Like