Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-Studio-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #include "audioexportconfiguration.h"
24 :
25 : #include "settings.h"
26 : #include "translation.h"
27 :
28 : using namespace muse;
29 : using namespace mu;
30 : using namespace mu::iex::audioexport;
31 : using namespace muse::audio;
32 :
33 : static const Settings::Key EXPORT_SAMPLE_RATE_KEY("iex_audioexport", "export/audio/sampleRate");
34 : static const Settings::Key EXPORT_MP3_BITRATE("iex_audioexport", "export/audio/mp3Bitrate");
35 : static const Settings::Key EXPORT_WAV_SAMPLE_FORMAT_KEY("iex_audioexport", "export/audio/wavSampleFormat");
36 : static const Settings::Key EXPORT_FLAC_SAMPLE_FORMAT_KEY("iex_audioexport", "export/audio/flacSampleFormat");
37 :
38 0 : void AudioExportConfiguration::init()
39 : {
40 0 : settings()->setDefaultValue(EXPORT_SAMPLE_RATE_KEY, Val(44100));
41 0 : settings()->setDefaultValue(EXPORT_MP3_BITRATE, Val(128));
42 0 : settings()->setDefaultValue(EXPORT_WAV_SAMPLE_FORMAT_KEY, Val(static_cast<int>(AudioSampleFormat::Int24)));
43 0 : settings()->setDefaultValue(EXPORT_FLAC_SAMPLE_FORMAT_KEY, Val(static_cast<int>(AudioSampleFormat::Int16)));
44 0 : }
45 :
46 0 : int AudioExportConfiguration::exportMp3Bitrate() const
47 : {
48 0 : return m_exportMp3BitrateOverride ? m_exportMp3BitrateOverride.value() : settings()->value(EXPORT_MP3_BITRATE).toInt();
49 : }
50 :
51 0 : void AudioExportConfiguration::setExportMp3Bitrate(int bitrate)
52 : {
53 0 : settings()->setSharedValue(EXPORT_MP3_BITRATE, Val(bitrate));
54 0 : }
55 :
56 0 : void AudioExportConfiguration::setExportMp3BitrateOverride(std::optional<int> bitrate)
57 : {
58 0 : m_exportMp3BitrateOverride = bitrate;
59 0 : }
60 :
61 0 : const std::vector<int>& AudioExportConfiguration::availableMp3BitRates() const
62 : {
63 0 : static const std::vector<int> rates { 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, };
64 0 : return rates;
65 : }
66 :
67 0 : int AudioExportConfiguration::exportSampleRate() const
68 : {
69 0 : return settings()->value(EXPORT_SAMPLE_RATE_KEY).toInt();
70 : }
71 :
72 0 : void AudioExportConfiguration::setExportSampleRate(int rate)
73 : {
74 0 : settings()->setSharedValue(EXPORT_SAMPLE_RATE_KEY, Val(rate));
75 0 : }
76 :
77 0 : const std::vector<int>& AudioExportConfiguration::availableSampleRates() const
78 : {
79 0 : static const std::vector<int> rates { 32000, 44100, 48000 };
80 0 : return rates;
81 : }
82 :
83 0 : samples_t AudioExportConfiguration::exportBufferSize() const
84 : {
85 0 : return 4096;
86 : }
87 :
88 0 : AudioSampleFormat AudioExportConfiguration::exportWavSampleFormat() const
89 : {
90 0 : return static_cast<AudioSampleFormat>(settings()->value(EXPORT_WAV_SAMPLE_FORMAT_KEY).toInt());
91 : }
92 :
93 0 : void AudioExportConfiguration::setExportWavSampleFormat(AudioSampleFormat format)
94 : {
95 0 : settings()->setSharedValue(EXPORT_WAV_SAMPLE_FORMAT_KEY, Val(static_cast<int>(format)));
96 0 : }
97 :
98 0 : AudioSampleFormat AudioExportConfiguration::exportFlacSampleFormat() const
99 : {
100 0 : return static_cast<AudioSampleFormat>(settings()->value(EXPORT_FLAC_SAMPLE_FORMAT_KEY).toInt());
101 : }
102 :
103 0 : void AudioExportConfiguration::setExportFlacSampleFormat(AudioSampleFormat format)
104 : {
105 0 : settings()->setSharedValue(EXPORT_FLAC_SAMPLE_FORMAT_KEY, Val(static_cast<int>(format)));
106 0 : }
107 :
108 0 : const std::vector<AudioSampleFormat>& AudioExportConfiguration::availableWavSampleFormats() const
109 : {
110 : static const std::vector<AudioSampleFormat> formats {
111 : AudioSampleFormat::Int16,
112 : AudioSampleFormat::Int24,
113 : AudioSampleFormat::Float32,
114 0 : };
115 0 : return formats;
116 : }
117 :
118 0 : const std::vector<AudioSampleFormat>& AudioExportConfiguration::availableFlacSampleFormats() const
119 : {
120 : static const std::vector<AudioSampleFormat> formats {
121 : AudioSampleFormat::Int16,
122 : AudioSampleFormat::Int24,
123 0 : };
124 0 : return formats;
125 : }
126 :
127 0 : QString AudioExportConfiguration::sampleFormatToString(AudioSampleFormat format) const
128 : {
129 0 : switch (format) {
130 0 : case AudioSampleFormat::Int16:
131 0 : return muse::qtrc("project/export", "16-bit integer");
132 0 : case AudioSampleFormat::Int24:
133 0 : return muse::qtrc("project/export", "24-bit integer");
134 0 : case AudioSampleFormat::Float32:
135 0 : return muse::qtrc("project/export", "32-bit float");
136 0 : default:
137 0 : return QString();
138 : }
139 : }
|