module Data.MediaBus.Rtp.AlawSource ( rtpAlaw16kHzS16Source ) where import Conduit import Data.MediaBus.Audio.Raw import Data.MediaBus.Audio.Resample import Data.MediaBus.Segment import Data.MediaBus.Clock import Data.MediaBus.Reorder import Data.MediaBus.Rtp.Source import Data.MediaBus.Rtp.Packet import Data.MediaBus.Sample import Data.MediaBus.Stream import Data.MediaBus.StreamSegment import Data.MediaBus.SourceId import Data.MediaBus.Conduit import Data.MediaBus.Ticks import Data.MediaBus.Transcoder import Data.MediaBus.Transport.Udp import Data.Streaming.Network ( HostPreference ) import Data.Word import Data.Proxy import qualified Data.ByteString as B import Network.Socket ( SockAddr ) rtpAlaw16kHzS16Source :: MonadResource m => Int -> HostPreference -> Int -> Source m (Stream RtpSsrc RtpSeqNum (Ticks 16000 Word64) () (Segment (640 :@ 16000) (SampleBuffer (S16 16000)))) rtpAlaw16kHzS16Source !udpListenPort !udpListenIP !reorderBufferSize = annotateTypeSource (Proxy :: Proxy (Stream (SourceId (Maybe SockAddr)) RtpSeqNum (ClockTimeDiff UtcClock) () B.ByteString)) (udpDatagramSource useUtcClock udpListenPort udpListenIP) .| rtpSource .| rtpPayloadDemux [ (8, alawPayloadHandler) ] mempty .| transcodeStreamC' .| resample8to16kHz' (MkS16 0 :: S16 8000) .| convertTicksC' at8kHzU32 at16kHzU64 .| reorderFramesBySeqNumC reorderBufferSize .| segmentC