module Sound.Player.AudioPlay (
play,
pause,
resume,
stop
) where
import Control.Monad (void)
import Data.Maybe (fromJust)
import System.Process (ProcessHandle, createProcess, proc, terminateProcess)
import System.Process.Internals (ProcessHandle__(OpenHandle, ClosedHandle),
PHANDLE, withProcessHandle)
play :: FilePath -> IO ProcessHandle
play path = do
(_, _, _, processHandle) <- createProcess (proc "afplay" [path])
return processHandle
pause :: ProcessHandle -> IO ()
pause ph = do
mPid <- getPid ph
void $ createProcess (proc "kill" ["-17", show $ fromJust mPid])
resume :: ProcessHandle -> IO ()
resume ph = do
mPid <- getPid ph
void $ createProcess (proc "kill" ["-19", show $ fromJust mPid])
stop :: ProcessHandle -> IO ()
stop = terminateProcess
getPid :: ProcessHandle -> IO (Maybe PHANDLE)
getPid ph = withProcessHandle ph (return . go)
where
go (OpenHandle pid) = Just pid
go (ClosedHandle _) = Nothing