import React, { useEffect, useState } from "react"; import { OlStateButton } from "../../components/olstatebutton"; import { faPause, faPlay, faRepeat, faStop } from "@fortawesome/free-solid-svg-icons"; import { getApp } from "../../../olympusapp"; import { AudioSource } from "../../../audio/audiosource"; import { FaArrowRight, FaTrash, FaVolumeHigh } from "react-icons/fa6"; import { OlRangeSlider } from "../../components/olrangeslider"; import { FaUnlink } from "react-icons/fa"; import { OlDropdown, OlDropdownItem } from "../../components/oldropdown"; import { FileSource } from "../../../audio/filesource"; import { MicrophoneSource } from "../../../audio/microphonesource"; export function AudioSourcePanel(props: { source: AudioSource }) { const [meterLevel, setMeterLevel] = useState(0); useEffect(() => { setInterval(() => { setMeterLevel(props.source.getMeter().getPeaks().current[0]); }, 50); }, []); let availabileSinks = getApp() .getAudioManager() .getSinks() .filter((sink) => !props.source.getConnectedTo().includes(sink)); return (
{props.source.getName()} {!(props.source instanceof MicrophoneSource) && (
{ getApp().getAudioManager().removeSource(props.source); }} >
)}
{props.source instanceof FileSource && (
{ if (props.source instanceof FileSource) props.source.getPlaying() ? props.source.stop() : props.source.play(); }} tooltip="Play file" > 0 ? (props.source.getCurrentPosition() / props.source.getDuration()) * 100 : 0} onChange={(ev) => { if (props.source instanceof FileSource) props.source.setCurrentPosition(parseFloat(ev.currentTarget.value)); }} className="my-auto" /> { if (props.source instanceof FileSource) props.source.setLooping(!props.source.getLooping()); }} tooltip="Loop" >
)}
{ props.source.setVolume(parseFloat(ev.currentTarget.value) / 100); }} className="absolute top-[18px]" />
{Math.round(props.source.getVolume() * 100)}
Connected to:
{props.source.getConnectedTo().map((sink) => { return (
{sink.getName()} props.source.disconnect(sink)}>
); })}
{availabileSinks.length > 0 && ( {availabileSinks.map((sink) => { return ( { props.source.connect(sink); }} > {sink.getName()} ); })} )}
); }