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;
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.