PonyPlayer
|
播放音频裸流, 用于代替QAudioSink. 更多...
#include <audiosink.hpp>
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.
|
inlineexplicit |
创建PonyAudioSink并attach到默认设备上
format | 音频格式 |
bufferSizeAdvice | DataBuffer 的建议大小, PonyAudioSink 保证实际的 DataBuffer 不小于建议大小. |
|
inlineoverride |
析构即从deattach当前设备
|
inline |
|
inline |
清空AudioBuffer, 将所有空间标记为可用. 这个操作保证在VideoThread上进行.
|
inline |
获取AudioBuffer剩余空间
|
inline |
|
inlineslot |
|
inline |
获取当前播放的时间, 这个函数只能在 PlaybackState::PLAYING 或 PlaybackState::PAUSED 状态下使用.
|
inline |
|
inline |
|
inlineslot |
|
inline |
暂停播放, 状态变为 PlaybackState::PAUSED. 但已经写入AudioBuffer的音频将会继续播放.
|
inline |
|
inline |
|
inlineslot |
|
signal |
由于缺少音频数据, 被迫暂停播放
|
inline |
|
inline |
|
inline |
|
inline |
设置音调
newPitch |
|
inline |
设置速度
newSpeed |
|
inline |
设置下一次播放的计时器. 这个函数必须在 PlaybackState::STOPPED 状态下使用. 在播放开始后, 设置生效。
t | 新的播放时间(单位: 秒) |
|
inline |
设备音量, 音量的范围通常是[0, 1]
newVolume |
|
signal |
|
signal |
|
inline |
|
inline |
开始播放, 状态变为 PlaybackState::PLAYING. 若当前DataBuffer内容不足, 状态将会发生改变.
|
inline |
获取播放状态
|
signal |
播放状态发生改变
|
inline |
停止播放, 状态变为 PlaybackState::STOPPED, 且已写入AudioBuffer的音频将会被放弃, 播放会立即停止.
|
inline |
获取当前音量
|
inline |
|
inline |
写AudioBuffer, 要么写入完全成功, 要么失败. 这个操作保证在VideoThread上进行.
buf | 数据源 |
origLen | 长度(单位: byte) |
|
staticconstexpr |