Chris@49
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@28
|
2
|
Chris@28
|
3 /*
|
Chris@52
|
4 Sonic Visualiser
|
Chris@52
|
5 An audio file viewer and annotation editor.
|
Chris@52
|
6 Centre for Digital Music, Queen Mary, University of London.
|
Chris@52
|
7 This file copyright 2006 Chris Cannam.
|
Chris@28
|
8
|
Chris@52
|
9 This program is free software; you can redistribute it and/or
|
Chris@52
|
10 modify it under the terms of the GNU General Public License as
|
Chris@52
|
11 published by the Free Software Foundation; either version 2 of the
|
Chris@52
|
12 License, or (at your option) any later version. See the file
|
Chris@52
|
13 COPYING included with this distribution for more information.
|
Chris@28
|
14 */
|
Chris@28
|
15
|
Chris@28
|
16 #include "PlayParameterRepository.h"
|
Chris@28
|
17 #include "PlayParameters.h"
|
Chris@391
|
18 #include "Playable.h"
|
Chris@30
|
19
|
Chris@1742
|
20 #include "ById.h"
|
Chris@1742
|
21
|
Chris@29
|
22 #include <iostream>
|
Chris@29
|
23
|
Chris@28
|
24 PlayParameterRepository *
|
Chris@28
|
25 PlayParameterRepository::m_instance = new PlayParameterRepository;
|
Chris@28
|
26
|
Chris@28
|
27 PlayParameterRepository *
|
Chris@145
|
28 PlayParameterRepository::getInstance()
|
Chris@28
|
29 {
|
Chris@28
|
30 return m_instance;
|
Chris@28
|
31 }
|
Chris@28
|
32
|
Chris@28
|
33 PlayParameterRepository::~PlayParameterRepository()
|
Chris@28
|
34 {
|
Chris@28
|
35 }
|
Chris@28
|
36
|
Chris@30
|
37 void
|
Chris@1742
|
38 PlayParameterRepository::addPlayable(int playableId)
|
Chris@30
|
39 {
|
Chris@1089
|
40 // cerr << "PlayParameterRepository:addPlayable playable = " << playable << endl;
|
Chris@82
|
41
|
Chris@1742
|
42 if (!getPlayParameters(playableId)) {
|
Chris@30
|
43
|
Chris@1742
|
44 auto playable = AnyById::getAs<Playable>(playableId);
|
Chris@1742
|
45 if (!playable) {
|
Chris@1742
|
46 SVCERR << "ERROR: id passed to PlayParameterRepository::addPlayable is not that of a Playable" << endl;
|
Chris@1742
|
47 return;
|
Chris@1742
|
48 }
|
Chris@1742
|
49
|
Chris@1429
|
50 // Give all playables the same type of play parameters for the
|
Chris@1429
|
51 // moment
|
Chris@30
|
52
|
Chris@1089
|
53 // cerr << "PlayParameterRepository:addPlayable: Adding play parameters for " << playable << endl;
|
Chris@30
|
54
|
Chris@391
|
55 PlayParameters *params = new PlayParameters;
|
Chris@1742
|
56 m_playParameters[playableId] = params;
|
Chris@30
|
57
|
Chris@866
|
58 params->setPlayClipId
|
Chris@866
|
59 (playable->getDefaultPlayClipId());
|
Chris@952
|
60
|
Chris@952
|
61 params->setPlayAudible
|
Chris@952
|
62 (playable->getDefaultPlayAudible());
|
Chris@391
|
63
|
Chris@391
|
64 connect(params, SIGNAL(playParametersChanged()),
|
Chris@391
|
65 this, SLOT(playParametersChanged()));
|
Chris@391
|
66
|
Chris@866
|
67 connect(params, SIGNAL(playClipIdChanged(QString)),
|
Chris@866
|
68 this, SLOT(playClipIdChanged(QString)));
|
Chris@30
|
69
|
Chris@1089
|
70 // cerr << "Connected play parameters " << params << " for playable "
|
Chris@1089
|
71 // << playable << " to this " << this << endl;
|
Chris@30
|
72 }
|
Chris@30
|
73 }
|
Chris@30
|
74
|
Chris@30
|
75 void
|
Chris@1742
|
76 PlayParameterRepository::removePlayable(int playableId)
|
Chris@30
|
77 {
|
Chris@1742
|
78 if (m_playParameters.find(playableId) == m_playParameters.end()) {
|
Chris@1742
|
79 SVCERR << "WARNING: PlayParameterRepository::removePlayable: unknown playable " << playableId << endl;
|
Chris@391
|
80 return;
|
Chris@391
|
81 }
|
Chris@1742
|
82 delete m_playParameters[playableId];
|
Chris@1742
|
83 m_playParameters.erase(playableId);
|
Chris@30
|
84 }
|
Chris@30
|
85
|
Chris@284
|
86 void
|
Chris@1742
|
87 PlayParameterRepository::copyParameters(int from, int to)
|
Chris@284
|
88 {
|
Chris@284
|
89 if (!getPlayParameters(from)) {
|
Chris@843
|
90 cerr << "ERROR: PlayParameterRepository::copyParameters: source playable unknown" << endl;
|
Chris@284
|
91 return;
|
Chris@284
|
92 }
|
Chris@284
|
93 if (!getPlayParameters(to)) {
|
Chris@843
|
94 cerr << "WARNING: PlayParameterRepository::copyParameters: target playable unknown, adding it now" << endl;
|
Chris@391
|
95 addPlayable(to);
|
Chris@284
|
96 }
|
Chris@284
|
97 getPlayParameters(to)->copyFrom(getPlayParameters(from));
|
Chris@284
|
98 }
|
Chris@284
|
99
|
Chris@28
|
100 PlayParameters *
|
Chris@1742
|
101 PlayParameterRepository::getPlayParameters(int playableId)
|
Chris@28
|
102 {
|
Chris@1742
|
103 if (m_playParameters.find(playableId) == m_playParameters.end()) {
|
Chris@1742
|
104 return nullptr;
|
Chris@1742
|
105 }
|
Chris@1742
|
106 return m_playParameters.find(playableId)->second;
|
Chris@28
|
107 }
|
Chris@28
|
108
|
Chris@28
|
109 void
|
Chris@29
|
110 PlayParameterRepository::playParametersChanged()
|
Chris@29
|
111 {
|
Chris@57
|
112 PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
|
Chris@57
|
113 emit playParametersChanged(params);
|
Chris@57
|
114 }
|
Chris@57
|
115
|
Chris@57
|
116 void
|
Chris@866
|
117 PlayParameterRepository::playClipIdChanged(QString id)
|
Chris@57
|
118 {
|
Chris@57
|
119 PlayParameters *params = dynamic_cast<PlayParameters *>(sender());
|
Chris@391
|
120 for (PlayableParameterMap::iterator i = m_playParameters.begin();
|
Chris@57
|
121 i != m_playParameters.end(); ++i) {
|
Chris@57
|
122 if (i->second == params) {
|
Chris@866
|
123 emit playClipIdChanged(i->first, id);
|
Chris@57
|
124 return;
|
Chris@57
|
125 }
|
Chris@57
|
126 }
|
Chris@29
|
127 }
|
Chris@29
|
128
|
Chris@29
|
129 void
|
Chris@28
|
130 PlayParameterRepository::clear()
|
Chris@28
|
131 {
|
Chris@843
|
132 // cerr << "PlayParameterRepository: PlayParameterRepository::clear" << endl;
|
Chris@28
|
133 while (!m_playParameters.empty()) {
|
Chris@1429
|
134 delete m_playParameters.begin()->second;
|
Chris@1429
|
135 m_playParameters.erase(m_playParameters.begin());
|
Chris@28
|
136 }
|
Chris@28
|
137 }
|
Chris@28
|
138
|
Chris@391
|
139 PlayParameterRepository::EditCommand::EditCommand(PlayParameters *params) :
|
Chris@391
|
140 m_params(params)
|
Chris@391
|
141 {
|
Chris@391
|
142 m_from.copyFrom(m_params);
|
Chris@391
|
143 m_to.copyFrom(m_params);
|
Chris@391
|
144 }
|
Chris@391
|
145
|
Chris@391
|
146 void
|
Chris@391
|
147 PlayParameterRepository::EditCommand::setPlayMuted(bool muted)
|
Chris@391
|
148 {
|
Chris@391
|
149 m_to.setPlayMuted(muted);
|
Chris@391
|
150 }
|
Chris@391
|
151
|
Chris@391
|
152 void
|
Chris@391
|
153 PlayParameterRepository::EditCommand::setPlayAudible(bool audible)
|
Chris@391
|
154 {
|
Chris@391
|
155 m_to.setPlayAudible(audible);
|
Chris@391
|
156 }
|
Chris@391
|
157
|
Chris@391
|
158 void
|
Chris@391
|
159 PlayParameterRepository::EditCommand::setPlayPan(float pan)
|
Chris@391
|
160 {
|
Chris@391
|
161 m_to.setPlayPan(pan);
|
Chris@391
|
162 }
|
Chris@391
|
163
|
Chris@391
|
164 void
|
Chris@391
|
165 PlayParameterRepository::EditCommand::setPlayGain(float gain)
|
Chris@391
|
166 {
|
Chris@391
|
167 m_to.setPlayGain(gain);
|
Chris@391
|
168 }
|
Chris@391
|
169
|
Chris@391
|
170 void
|
Chris@866
|
171 PlayParameterRepository::EditCommand::setPlayClipId(QString id)
|
Chris@391
|
172 {
|
Chris@866
|
173 m_to.setPlayClipId(id);
|
Chris@391
|
174 }
|
Chris@391
|
175
|
Chris@391
|
176 void
|
Chris@391
|
177 PlayParameterRepository::EditCommand::execute()
|
Chris@391
|
178 {
|
Chris@391
|
179 m_params->copyFrom(&m_to);
|
Chris@391
|
180 }
|
Chris@391
|
181
|
Chris@391
|
182 void
|
Chris@391
|
183 PlayParameterRepository::EditCommand::unexecute()
|
Chris@391
|
184 {
|
Chris@391
|
185 m_params->copyFrom(&m_from);
|
Chris@391
|
186 }
|
Chris@391
|
187
|
Chris@391
|
188 QString
|
Chris@391
|
189 PlayParameterRepository::EditCommand::getName() const
|
Chris@391
|
190 {
|
Chris@391
|
191 QString name;
|
Chris@391
|
192 QString multiname = tr("Adjust Playback Parameters");
|
Chris@391
|
193
|
Chris@391
|
194 int changed = 0;
|
Chris@391
|
195
|
Chris@391
|
196 if (m_to.isPlayAudible() != m_from.isPlayAudible()) {
|
Chris@391
|
197 name = tr("Change Playback Mute State");
|
Chris@391
|
198 if (++changed > 1) return multiname;
|
Chris@391
|
199 }
|
Chris@391
|
200
|
Chris@391
|
201 if (m_to.getPlayGain() != m_from.getPlayGain()) {
|
Chris@391
|
202 name = tr("Change Playback Gain");
|
Chris@391
|
203 if (++changed > 1) return multiname;
|
Chris@391
|
204 }
|
Chris@391
|
205
|
Chris@391
|
206 if (m_to.getPlayPan() != m_from.getPlayPan()) {
|
Chris@391
|
207 name = tr("Change Playback Pan");
|
Chris@391
|
208 if (++changed > 1) return multiname;
|
Chris@391
|
209 }
|
Chris@391
|
210
|
Chris@866
|
211 if (m_to.getPlayClipId() != m_from.getPlayClipId()) {
|
Chris@863
|
212 name = tr("Change Playback Sample");
|
Chris@391
|
213 if (++changed > 1) return multiname;
|
Chris@391
|
214 }
|
Chris@391
|
215
|
Chris@391
|
216 if (name == "") return multiname;
|
Chris@391
|
217 return name;
|
Chris@391
|
218 }
|
Chris@391
|
219
|