PonyPlayer
PonyAudioSink类 参考

播放音频裸流, 用于代替QAudioSink. 更多...

#include <audiosink.hpp>

类 PonyAudioSink 继承关系图:

Public 槽

void onAudioOutputDevicesChanged ()
 
void requestDeviceSwitch (const QString &device)
 
PonyAudioFormat getCurrentDeviceFormat ()
 

信号

void stateChanged ()
 
void resourceInsufficient ()
 
void signalAudioOutputDeviceListChanged ()
 
void signalDeviceSwitched ()
 

Public 成员函数

 PonyAudioSink (PonyAudioFormat format)
 
 ~PonyAudioSink () override
 
void start ()
 
void pause ()
 
void waitComplete ()
 
void stop ()
 
void setBlockState (bool state)
 
bool isBlock ()
 
PlaybackState state () const
 
int64_t freeByte () const
 
bool write (const char *buf, qint32 origLen)
 
size_t clear ()
 
qreal getProcessSecs (bool backward) const
 
void setStartPoint (double t=0.0)
 
void setVolume (qreal newVolume)
 
void setPitch (qreal newPitch)
 
void setSpeed (qreal newSpeed)
 
qreal volume () const
 
qreal speed () const
 
qreal pitch () const
 
void _getDeviceList ()
 
QString getSelectedOutputDevice ()
 
void restartStream (const std::function< void()> &betweenInitAndOpen)
 
void refreshDevicesList ()
 
QStringList getAudioDeviceList ()
 
void setFormat (const PonyAudioFormat &format)
 

静态 Public 属性

constexpr static const qreal MAX_SPEED_FACTOR = 4
 

详细描述

播放音频裸流, 用于代替QAudioSink.

这个类的函数都不是线程安全的, 必须保证在 VideoThread 中调用, 这个类的RAII的. 音频播放涉及两个缓存: AudioBuffer 和 DataBuffer. AudioBuffer 由系统维护, 一旦我们向里面写入数据, 我们将不能读取它. 音频播放时, 系统播放 AudioBuffer 中的音频. 当 AudioBuffer 数据不足时, 系统会通过回调函数从 DataBuffer 中获取数据. DataBuffer 由 PonyAudioSink 维护, 当需要播放音频时需要先调用 write 函数将音频数据写入 DataBuffer.

构造及析构函数说明

◆ PonyAudioSink()

PonyAudioSink::PonyAudioSink ( PonyAudioFormat  format)
inlineexplicit

创建PonyAudioSink并attach到默认设备上

参数
format音频格式
bufferSizeAdviceDataBuffer 的建议大小, PonyAudioSink 保证实际的 DataBuffer 不小于建议大小.

◆ ~PonyAudioSink()

PonyAudioSink::~PonyAudioSink ( )
inlineoverride

析构即从deattach当前设备

成员函数说明

◆ _getDeviceList()

void PonyAudioSink::_getDeviceList ( )
inline

◆ clear()

size_t PonyAudioSink::clear ( )
inline

清空AudioBuffer, 将所有空间标记为可用. 这个操作保证在VideoThread上进行.

返回
清空数据长度(单位: byte)

◆ freeByte()

int64_t PonyAudioSink::freeByte ( ) const
inline

获取AudioBuffer剩余空间

返回
剩余空间(单位: byte)

◆ getAudioDeviceList()

QStringList PonyAudioSink::getAudioDeviceList ( )
inline

◆ getCurrentDeviceFormat

PonyAudioFormat PonyAudioSink::getCurrentDeviceFormat ( )
inlineslot

◆ getProcessSecs()

qreal PonyAudioSink::getProcessSecs ( bool  backward) const
inline

获取当前播放的时间, 这个函数只能在 PlaybackState::PLAYINGPlaybackState::PAUSED 状态下使用.

返回
当前已播放音频的长度(单位: 秒)

◆ getSelectedOutputDevice()

QString PonyAudioSink::getSelectedOutputDevice ( )
inline

◆ isBlock()

bool PonyAudioSink::isBlock ( )
inline

◆ onAudioOutputDevicesChanged

void PonyAudioSink::onAudioOutputDevicesChanged ( )
inlineslot

◆ pause()

void PonyAudioSink::pause ( )
inline

暂停播放, 状态变为 PlaybackState::PAUSED. 但已经写入AudioBuffer的音频将会继续播放.

◆ pitch()

qreal PonyAudioSink::pitch ( ) const
inline

◆ refreshDevicesList()

void PonyAudioSink::refreshDevicesList ( )
inline

◆ requestDeviceSwitch

void PonyAudioSink::requestDeviceSwitch ( const QString &  device)
inlineslot

◆ resourceInsufficient

void PonyAudioSink::resourceInsufficient ( )
signal

由于缺少音频数据, 被迫暂停播放

◆ restartStream()

void PonyAudioSink::restartStream ( const std::function< void()> &  betweenInitAndOpen)
inline

◆ setBlockState()

void PonyAudioSink::setBlockState ( bool  state)
inline

◆ setFormat()

void PonyAudioSink::setFormat ( const PonyAudioFormat format)
inline

◆ setPitch()

void PonyAudioSink::setPitch ( qreal  newPitch)
inline

设置音调

参数
newPitch

◆ setSpeed()

void PonyAudioSink::setSpeed ( qreal  newSpeed)
inline

设置速度

参数
newSpeed

◆ setStartPoint()

void PonyAudioSink::setStartPoint ( double  t = 0.0)
inline

设置下一次播放的计时器. 这个函数必须在 PlaybackState::STOPPED 状态下使用. 在播放开始后, 设置生效。

参数
t新的播放时间(单位: 秒)

◆ setVolume()

void PonyAudioSink::setVolume ( qreal  newVolume)
inline

设备音量, 音量的范围通常是[0, 1]

参数
newVolume

◆ signalAudioOutputDeviceListChanged

void PonyAudioSink::signalAudioOutputDeviceListChanged ( )
signal

◆ signalDeviceSwitched

void PonyAudioSink::signalDeviceSwitched ( )
signal

◆ speed()

qreal PonyAudioSink::speed ( ) const
inline

◆ start()

void PonyAudioSink::start ( )
inline

开始播放, 状态变为 PlaybackState::PLAYING. 若当前DataBuffer内容不足, 状态将会发生改变.

参见
PonyAudioSink::stateChanged
PonyAudioSink::resourceInsufficient

◆ state()

PlaybackState PonyAudioSink::state ( ) const
inline

获取播放状态

返回
当前状态

◆ stateChanged

void PonyAudioSink::stateChanged ( )
signal

播放状态发生改变

◆ stop()

void PonyAudioSink::stop ( )
inline

停止播放, 状态变为 PlaybackState::STOPPED, 且已写入AudioBuffer的音频将会被放弃, 播放会立即停止.

◆ volume()

qreal PonyAudioSink::volume ( ) const
inline

获取当前音量

返回

◆ waitComplete()

void PonyAudioSink::waitComplete ( )
inline

◆ write()

bool PonyAudioSink::write ( const char *  buf,
qint32  origLen 
)
inline

写AudioBuffer, 要么写入完全成功, 要么失败. 这个操作保证在VideoThread上进行.

参数
buf数据源
origLen长度(单位: byte)
返回
写入是否成功

类成员变量说明

◆ MAX_SPEED_FACTOR

constexpr static const qreal PonyAudioSink::MAX_SPEED_FACTOR = 4
staticconstexpr

该类的文档由以下文件生成: