-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpcm_player.cpp
39 lines (33 loc) · 1.13 KB
/
pcm_player.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "pcm_player.h"
#include <QDebug>
PcmPlayer::PcmPlayer() : audio_output_(), pcm_device_()
{
QAudioFormat format;
format.setSampleRate(44100);
format.setChannelCount(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo device_info = QAudioDeviceInfo::defaultOutputDevice();
if (!device_info.isFormatSupported(format))
{
qWarning() << "default format not supported - trying to use nearest";
format = device_info.nearestFormat(format);
}
audio_output_.reset(new QAudioOutput(device_info, format));
audio_output_.get()->start(&pcm_device_);
}
PcmPlayer::~PcmPlayer()
{
if (audio_output_ != nullptr)
{
audio_output_.get()->stop();
}
}
void PcmPlayer::OnPcmReady(std::shared_ptr<Pcm> pcm)
{
// 下列打印的数据显示,每个pcm大小为4096字节,播放时长为23毫秒
// qDebug() << __FILE__ << ":" << __LINE__ << "pcm size: " << pcm.get()->data.size() << ", pts: " << pcm.get()->pts;
pcm_device_.OnPcmReady(pcm);
}