File indexing completed on 2024-05-12 17:21:23

0001 /*
0002  * SPDX-FileCopyrightText: 2020-2021 Devin Lin <espidev@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QObject>
0010 #include <QString>
0011 #include <QCoreApplication>
0012 #include <QSettings>
0013 #include <QQuickItem>
0014 
0015 class SettingsModel : public QObject
0016 {
0017     Q_OBJECT
0018     Q_PROPERTY(int simpleAudioFormat READ simpleAudioFormat WRITE setSimpleAudioFormat NOTIFY simpleAudioFormatChanged)
0019     Q_PROPERTY(QString audioCodec READ audioCodec WRITE setAudioCodec NOTIFY audioCodecChanged)
0020     Q_PROPERTY(QString containerFormat READ containerFormat WRITE setContainerFormat NOTIFY containerFormatChanged)
0021     Q_PROPERTY(int audioQuality READ audioQuality WRITE setAudioQuality NOTIFY audioQualityChanged)
0022 
0023 public:
0024     enum SimpleAudioFormat {
0025         VORBIS, // codec: audio/x-vorbis, container: audio/ogg
0026         OPUS, // codec: audio/x-opus, container: audio/ogg
0027         FLAC, // codec: audio/x-flac, container: audio/ogg
0028         MP3, // codec: audio/mpeg, mpegversion=(int)4, container: audio/mpeg, mpegversion=(int)1
0029         WAV, // codec: audio/x-raw, container: audio/x-wav
0030         OTHER // not listed here
0031     };
0032     Q_ENUM(SimpleAudioFormat)
0033 
0034     const QMap<SimpleAudioFormat, std::pair<QString, QString>> formatMap = {
0035         {SimpleAudioFormat::VORBIS, {QStringLiteral("audio/x-vorbis"), QStringLiteral("audio/ogg")}},
0036         {SimpleAudioFormat::OPUS, {QStringLiteral("audio/x-opus"), QStringLiteral("audio/ogg")}},
0037         {SimpleAudioFormat::FLAC, {QStringLiteral("audio/x-flac"), QStringLiteral("audio/ogg")}},
0038         {SimpleAudioFormat::MP3, {QStringLiteral("audio/mpeg, mpegversion=(int)4"), QStringLiteral("audio/mpeg, mpegversion=(int)1")}},
0039         {SimpleAudioFormat::WAV, {QStringLiteral("audio/x-raw"), QStringLiteral("audio/x-wav")}},
0040         {SimpleAudioFormat::OTHER, {QString(), QString()}}
0041     };
0042 
0043     static SettingsModel* instance();
0044 
0045     int simpleAudioFormat() const;
0046     void setSimpleAudioFormat(int audioFormat);
0047 
0048     QString audioCodec() const;
0049     void setAudioCodec(const QString &audioCodec);
0050 
0051     QString audioInput() const;
0052     void setAudioInput(const QString &audioInput);
0053 
0054     QString containerFormat() const;
0055     void setContainerFormat(const QString &audioContainerFormat);
0056 
0057     int audioQuality() const;
0058     void setAudioQuality(int audioQuality);
0059 
0060 private:
0061     explicit SettingsModel(QObject *parent = nullptr);
0062     ~SettingsModel();
0063 
0064     QSettings *settings;
0065 
0066 Q_SIGNALS:
0067     void simpleAudioFormatChanged();
0068     void audioCodecChanged();
0069     void containerFormatChanged();
0070     void audioQualityChanged();
0071 };