11class AudioDevice :
public QIODevice {
20 static char const *toString(Channel c) {
33 static Channel fromString(QString
const &str) {
34 QString
const s(str.toCaseFolded().trimmed().toLatin1());
38 else if (s ==
"right")
46 bool initialize(OpenMode mode, Channel channel);
48 bool isSequential()
const override {
return true; }
50 size_t bytesPerFrame()
const {
51 return sizeof(qint16) * (Mono == m_channel ? 1 : 2);
54 Channel channel()
const {
return m_channel; }
57 explicit AudioDevice(QObject *parent =
nullptr) : QIODevice(parent) {}
59 void store(
char const *source,
size_t numFrames, qint16 *dest) {
60 qint16
const *begin(
reinterpret_cast<qint16
const *
>(source));
61 for (qint16
const *i = begin;
62 i != begin + numFrames * (bytesPerFrame() /
sizeof(qint16));
63 i += bytesPerFrame() /
sizeof(qint16)) {
75 Q_ASSERT(Both == m_channel);
84 qint16 *load(qint16
const sample, qint16 *dest) {