69 lines
2.2 KiB
TypeScript
69 lines
2.2 KiB
TypeScript
import AstalWp from "gi://AstalWp";
|
|
|
|
export class Wireplumber {
|
|
private astalWireplumber: (AstalWp.Wp|null) = AstalWp.get_default();
|
|
private defaultSink: AstalWp.Endpoint = this.astalWireplumber!.get_default_speaker()!;
|
|
private defaultSource: AstalWp.Endpoint = this.astalWireplumber!.get_default_microphone()!;
|
|
private static inst: Wireplumber = new Wireplumber();
|
|
|
|
private maxSinkVolume: number = 100;
|
|
private maxSourceVolume: number = 100;
|
|
|
|
constructor() {
|
|
if(!this.astalWireplumber)
|
|
throw new Error("Audio features will not work correctly! Please install wireplumber first", {
|
|
cause: "Wireplumber library not found"
|
|
});
|
|
}
|
|
|
|
public static getDefault(): Wireplumber {
|
|
return Wireplumber.inst;
|
|
}
|
|
|
|
public getDefaultSink(): AstalWp.Endpoint {
|
|
return this.defaultSink;
|
|
}
|
|
|
|
public getDefaultSource(): AstalWp.Endpoint {
|
|
return this.defaultSource;
|
|
}
|
|
|
|
public getSinkVolume(): number {
|
|
return this.getDefaultSink().get_volume() * 100;
|
|
}
|
|
|
|
public getSourceVolume(): number {
|
|
return this.getDefaultSource().get_volume() * 100;
|
|
}
|
|
|
|
public setSinkVolume(newSinkVolume: number) {
|
|
this.defaultSink.set_volume(
|
|
(newSinkVolume > this.maxSinkVolume ? this.maxSinkVolume : newSinkVolume) / 100
|
|
);
|
|
}
|
|
|
|
public setSourceVolume(newSourceVolume: number) {
|
|
this.defaultSource.set_volume(
|
|
newSourceVolume > this.maxSourceVolume ? this.maxSourceVolume : newSourceVolume / 100
|
|
);
|
|
}
|
|
|
|
public increaseSinkVolume(volumeIncrease: number) {
|
|
if(volumeIncrease > this.maxSinkVolume
|
|
|| (this.maxSinkVolume + volumeIncrease) > this.maxSinkVolume) {
|
|
this.setSinkVolume(this.maxSinkVolume);
|
|
}
|
|
|
|
this.setSinkVolume(this.getSinkVolume() + volumeIncrease);
|
|
}
|
|
|
|
public increaseSourceVolume(volumeIncrease: number) {
|
|
if(volumeIncrease > this.maxSourceVolume //TODO
|
|
|| (this.maxSinkVolume + volumeIncrease) > this.maxSinkVolume) {
|
|
this.setSinkVolume(this.maxSinkVolume);
|
|
}
|
|
|
|
this.setSinkVolume(this.getSinkVolume() + volumeIncrease);
|
|
}
|
|
}
|