Copyright | Will Thompson, Iñaki García Etxebarria and Jonas Platte |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria (garetxe@gmail.com) |
Safe Haskell | None |
Language | Haskell2010 |
<refsect2> <para> This object is the base class for audio ringbuffers used by the base audio source and sink classes. </para> <para> The ringbuffer abstracts a circular buffer of data. One reader and one writer can operate on the data from different threads in a lockfree manner. The base class is sufficiently flexible to be used as an abstraction for DMA based ringbuffers as well as a pure software implementations. </para> </refsect2>
- newtype AudioRingBuffer = AudioRingBuffer (ManagedPtr AudioRingBuffer)
- class GObject o => IsAudioRingBuffer o
- toAudioRingBuffer :: IsAudioRingBuffer o => o -> IO AudioRingBuffer
- noAudioRingBuffer :: Maybe AudioRingBuffer
- data AudioRingBufferAcquireMethodInfo
- audioRingBufferAcquire :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> AudioRingBufferSpec -> m Bool
- data AudioRingBufferActivateMethodInfo
- audioRingBufferActivate :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Bool -> m Bool
- data AudioRingBufferAdvanceMethodInfo
- audioRingBufferAdvance :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Word32 -> m ()
- data AudioRingBufferClearMethodInfo
- audioRingBufferClear :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Int32 -> m ()
- data AudioRingBufferClearAllMethodInfo
- audioRingBufferClearAll :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m ()
- data AudioRingBufferCloseDeviceMethodInfo
- audioRingBufferCloseDevice :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferCommitMethodInfo
- audioRingBufferCommit :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Word64 -> Word8 -> Int32 -> Int32 -> Int32 -> m Word32
- data AudioRingBufferConvertMethodInfo
- audioRingBufferConvert :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Format -> Int64 -> Format -> Int64 -> m Bool
- audioRingBufferDebugSpecBuff :: (HasCallStack, MonadIO m) => AudioRingBufferSpec -> m ()
- audioRingBufferDebugSpecCaps :: (HasCallStack, MonadIO m) => AudioRingBufferSpec -> m ()
- data AudioRingBufferDelayMethodInfo
- audioRingBufferDelay :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Word32
- data AudioRingBufferDeviceIsOpenMethodInfo
- audioRingBufferDeviceIsOpen :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferIsAcquiredMethodInfo
- audioRingBufferIsAcquired :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferIsActiveMethodInfo
- audioRingBufferIsActive :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferIsFlushingMethodInfo
- audioRingBufferIsFlushing :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferMayStartMethodInfo
- audioRingBufferMayStart :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Bool -> m ()
- data AudioRingBufferOpenDeviceMethodInfo
- audioRingBufferOpenDevice :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- audioRingBufferParseCaps :: (HasCallStack, MonadIO m) => AudioRingBufferSpec -> Caps -> m Bool
- data AudioRingBufferPauseMethodInfo
- audioRingBufferPause :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferPrepareReadMethodInfo
- audioRingBufferPrepareRead :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Int32 -> Word8 -> Int32 -> m Bool
- data AudioRingBufferReadMethodInfo
- audioRingBufferRead :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Word64 -> Word8 -> Word32 -> Word64 -> m Word32
- data AudioRingBufferReleaseMethodInfo
- audioRingBufferRelease :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferSamplesDoneMethodInfo
- audioRingBufferSamplesDone :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Word64
- data AudioRingBufferSetCallbackMethodInfo
- audioRingBufferSetCallback :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> AudioRingBufferCallback -> m ()
- data AudioRingBufferSetChannelPositionsMethodInfo
- audioRingBufferSetChannelPositions :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> AudioChannelPosition -> m ()
- data AudioRingBufferSetFlushingMethodInfo
- audioRingBufferSetFlushing :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Bool -> m ()
- data AudioRingBufferSetSampleMethodInfo
- audioRingBufferSetSample :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Word64 -> m ()
- data AudioRingBufferSetTimestampMethodInfo
- audioRingBufferSetTimestamp :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Int32 -> Word64 -> m ()
- data AudioRingBufferStartMethodInfo
- audioRingBufferStart :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
- data AudioRingBufferStopMethodInfo
- audioRingBufferStop :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> m Bool
Exported types
newtype AudioRingBuffer Source #
GObject AudioRingBuffer Source # | |
IsObject AudioRingBuffer Source # | |
IsObject AudioRingBuffer Source # | |
IsAudioRingBuffer AudioRingBuffer Source # | |
((~) * info (ResolveAudioRingBufferMethod t AudioRingBuffer), MethodInfo * info AudioRingBuffer p) => IsLabel t (AudioRingBuffer -> p) Source # | |
((~) * info (ResolveAudioRingBufferMethod t AudioRingBuffer), MethodInfo * info AudioRingBuffer p) => IsLabelProxy t (AudioRingBuffer -> p) Source # | |
HasAttributeList * AudioRingBuffer Source # | |
type AttributeList AudioRingBuffer Source # | |
type SignalList AudioRingBuffer Source # | |
class GObject o => IsAudioRingBuffer o Source #
toAudioRingBuffer :: IsAudioRingBuffer o => o -> IO AudioRingBuffer Source #
Methods
acquire
data AudioRingBufferAcquireMethodInfo Source #
((~) * signature (AudioRingBufferSpec -> m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferAcquireMethodInfo a signature Source # | |
audioRingBufferAcquire Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> AudioRingBufferSpec |
|
-> m Bool | Returns: TRUE if the device could be acquired, FALSE on error. MT safe. |
Allocate the resources for the ringbuffer. This function fills
in the data pointer of the ring buffer with a valid Buffer
to which samples can be written.
activate
data AudioRingBufferActivateMethodInfo Source #
((~) * signature (Bool -> m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferActivateMethodInfo a signature Source # | |
audioRingBufferActivate Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Bool |
|
-> m Bool | Returns: TRUE if the device could be activated in the requested mode, FALSE on error. |
Activate buf
to start or stop pulling data.
MT safe.
advance
data AudioRingBufferAdvanceMethodInfo Source #
((~) * signature (Word32 -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferAdvanceMethodInfo a signature Source # | |
audioRingBufferAdvance Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Word32 |
|
-> m () |
Subclasses should call this function to notify the fact that
advance
segments are now processed by the device.
MT safe.
clear
data AudioRingBufferClearMethodInfo Source #
((~) * signature (Int32 -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferClearMethodInfo a signature Source # | |
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Int32 |
|
-> m () |
Clear the given segment of the buffer with silence samples. This function is used by subclasses.
MT safe.
clearAll
data AudioRingBufferClearAllMethodInfo Source #
((~) * signature (m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferClearAllMethodInfo a signature Source # | |
audioRingBufferClearAll Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m () |
Fill the ringbuffer with silence.
MT safe.
closeDevice
data AudioRingBufferCloseDeviceMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferCloseDeviceMethodInfo a signature Source # | |
audioRingBufferCloseDevice Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device could be closed, FALSE on error. MT safe. |
Close the audio device associated with the ring buffer. The ring buffer
should already have been released via audioRingBufferRelease
.
commit
data AudioRingBufferCommitMethodInfo Source #
((~) * signature (Word64 -> Word8 -> Int32 -> Int32 -> Int32 -> m Word32), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferCommitMethodInfo a signature Source # | |
audioRingBufferCommit Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Word64 |
|
-> Word8 |
|
-> Int32 |
|
-> Int32 |
|
-> Int32 |
|
-> m Word32 | Returns: The number of samples written to the ringbuffer or -1 on error. The
number of samples written can be less than |
Commit inSamples
samples pointed to by data
to the ringbuffer buf
.
inSamples
and outSamples
define the rate conversion to perform on the
samples in data
. For negative rates, outSamples
must be negative and
inSamples
positive.
When outSamples
is positive, the first sample will be written at position sample
in the ringbuffer. When outSamples
is negative, the last sample will be written to
sample
in reverse order.
outSamples
does not need to be a multiple of the segment size of the ringbuffer
although it is recommended for optimal performance.
accum
will hold a temporary accumulator used in rate conversion and should be
set to 0 when this function is first called. In case the commit operation is
interrupted, one can resume the processing by passing the previously returned
accum
value back to this function.
MT safe.
convert
data AudioRingBufferConvertMethodInfo Source #
((~) * signature (Format -> Int64 -> Format -> Int64 -> m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferConvertMethodInfo a signature Source # | |
audioRingBufferConvert Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Format |
|
-> Int64 |
|
-> Format |
|
-> Int64 |
|
-> m Bool | Returns: TRUE if the conversion succeeded. |
Convert srcVal
in srcFmt
to the equivalent value in destFmt
. The result
will be put in destVal
.
debugSpecBuff
audioRingBufferDebugSpecBuff Source #
:: (HasCallStack, MonadIO m) | |
=> AudioRingBufferSpec |
|
-> m () |
Print debug info about the buffer sized in spec
to the debug log.
debugSpecCaps
audioRingBufferDebugSpecCaps Source #
:: (HasCallStack, MonadIO m) | |
=> AudioRingBufferSpec |
|
-> m () |
Print debug info about the parsed caps in spec
to the debug log.
delay
data AudioRingBufferDelayMethodInfo Source #
((~) * signature (m Word32), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferDelayMethodInfo a signature Source # | |
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Word32 | Returns: The number of samples queued in the audio device. MT safe. |
Get the number of samples queued in the audio device. This is usually less than the segment size but can be bigger when the implementation uses another internal buffer between the audio device.
For playback ringbuffers this is the amount of samples transfered from the ringbuffer to the device but still not played.
For capture ringbuffers this is the amount of samples in the device that are not yet transfered to the ringbuffer.
deviceIsOpen
data AudioRingBufferDeviceIsOpenMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferDeviceIsOpenMethodInfo a signature Source # | |
audioRingBufferDeviceIsOpen Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device was open, FALSE if it was closed. MT safe. |
Checks the status of the device associated with the ring buffer.
isAcquired
data AudioRingBufferIsAcquiredMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferIsAcquiredMethodInfo a signature Source # | |
audioRingBufferIsAcquired Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the ringbuffer is acquired, FALSE on error. MT safe. |
Check if the ringbuffer is acquired and ready to use.
isActive
data AudioRingBufferIsActiveMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferIsActiveMethodInfo a signature Source # | |
audioRingBufferIsActive Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device is active. |
Check if buf
is activated.
MT safe.
isFlushing
data AudioRingBufferIsFlushingMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferIsFlushingMethodInfo a signature Source # | |
audioRingBufferIsFlushing Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device is flushing. |
Check if buf
is flushing.
MT safe.
mayStart
data AudioRingBufferMayStartMethodInfo Source #
((~) * signature (Bool -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferMayStartMethodInfo a signature Source # | |
audioRingBufferMayStart Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Bool |
|
-> m () |
Tell the ringbuffer that it is allowed to start playback when the ringbuffer is filled with samples.
MT safe.
openDevice
data AudioRingBufferOpenDeviceMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferOpenDeviceMethodInfo a signature Source # | |
audioRingBufferOpenDevice Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device could be opened, FALSE on error. MT safe. |
Open the audio device associated with the ring buffer. Does not perform any setup on the device. You must open the device before acquiring the ring buffer.
parseCaps
audioRingBufferParseCaps Source #
:: (HasCallStack, MonadIO m) | |
=> AudioRingBufferSpec |
|
-> Caps |
|
-> m Bool | Returns: TRUE if the caps could be parsed. |
Parse caps
into spec
.
pause
data AudioRingBufferPauseMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferPauseMethodInfo a signature Source # | |
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device could be paused, FALSE on error. MT safe. |
Pause processing samples from the ringbuffer.
prepareRead
data AudioRingBufferPrepareReadMethodInfo Source #
((~) * signature (Int32 -> Word8 -> Int32 -> m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferPrepareReadMethodInfo a signature Source # | |
audioRingBufferPrepareRead Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Int32 |
|
-> Word8 |
|
-> Int32 |
|
-> m Bool | Returns: FALSE if the buffer is not started. MT safe. |
Returns a pointer to memory where the data from segment segment
can be found. This function is mostly used by subclasses.
read
data AudioRingBufferReadMethodInfo Source #
((~) * signature (Word64 -> Word8 -> Word32 -> Word64 -> m Word32), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferReadMethodInfo a signature Source # | |
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Word64 |
|
-> Word8 |
|
-> Word32 |
|
-> Word64 |
|
-> m Word32 | Returns: The number of samples read from the ringbuffer or -1 on error. MT safe. |
Read len
samples from the ringbuffer into the memory pointed
to by data
.
The first sample should be read from position sample
in
the ringbuffer.
len
should not be a multiple of the segment size of the ringbuffer
although it is recommended.
timestamp
will return the timestamp associated with the data returned.
release
data AudioRingBufferReleaseMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferReleaseMethodInfo a signature Source # | |
audioRingBufferRelease Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device could be released, FALSE on error. MT safe. |
Free the resources of the ringbuffer.
samplesDone
data AudioRingBufferSamplesDoneMethodInfo Source #
((~) * signature (m Word64), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferSamplesDoneMethodInfo a signature Source # | |
audioRingBufferSamplesDone Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Word64 | Returns: The number of samples processed by the ringbuffer. MT safe. |
Get the number of samples that were processed by the ringbuffer
since it was last started. This does not include the number of samples not
yet processed (see audioRingBufferDelay
).
setCallback
data AudioRingBufferSetCallbackMethodInfo Source #
((~) * signature (AudioRingBufferCallback -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferSetCallbackMethodInfo a signature Source # | |
audioRingBufferSetCallback Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> AudioRingBufferCallback |
|
-> m () |
Sets the given callback function on the buffer. This function will be called every time a segment has been written to a device.
MT safe.
setChannelPositions
data AudioRingBufferSetChannelPositionsMethodInfo Source #
((~) * signature (AudioChannelPosition -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferSetChannelPositionsMethodInfo a signature Source # | |
audioRingBufferSetChannelPositions Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> AudioChannelPosition |
|
-> m () |
Tell the ringbuffer about the device's channel positions. This must be called in when the ringbuffer is acquired.
setFlushing
data AudioRingBufferSetFlushingMethodInfo Source #
((~) * signature (Bool -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferSetFlushingMethodInfo a signature Source # | |
audioRingBufferSetFlushing Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Bool |
|
-> m () |
Set the ringbuffer to flushing mode or normal mode.
MT safe.
setSample
data AudioRingBufferSetSampleMethodInfo Source #
((~) * signature (Word64 -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferSetSampleMethodInfo a signature Source # | |
audioRingBufferSetSample Source #
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> Word64 |
|
-> m () |
Make sure that the next sample written to the device is
accounted for as being the sample
sample written to the
device. This value will be used in reporting the current
sample position of the ringbuffer.
This function will also clear the buffer with silence.
MT safe.
setTimestamp
data AudioRingBufferSetTimestampMethodInfo Source #
((~) * signature (Int32 -> Word64 -> m ()), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferSetTimestampMethodInfo a signature Source # | |
audioRingBufferSetTimestamp :: (HasCallStack, MonadIO m, IsAudioRingBuffer a) => a -> Int32 -> Word64 -> m () Source #
No description available in the introspection data.
start
data AudioRingBufferStartMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferStartMethodInfo a signature Source # | |
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device could be started, FALSE on error. MT safe. |
Start processing samples from the ringbuffer.
stop
data AudioRingBufferStopMethodInfo Source #
((~) * signature (m Bool), MonadIO m, IsAudioRingBuffer a) => MethodInfo * AudioRingBufferStopMethodInfo a signature Source # | |
:: (HasCallStack, MonadIO m, IsAudioRingBuffer a) | |
=> a |
|
-> m Bool | Returns: TRUE if the device could be stopped, FALSE on error. MT safe. |
Stop processing samples from the ringbuffer.