@@ -222,17 +222,18 @@ struct Encoder {
222
222
}
223
223
224
224
// Check sample rate
225
- bool validSampleRate = false ;
226
- for (const int *p = audioCodec->supported_samplerates ; p && *p != 0 ; p++) {
227
- if (sampleRate == *p) {
228
- validSampleRate = true ;
229
- break ;
230
- }
231
- }
232
- if (!validSampleRate) {
233
- WARN (" Sample rate %d not supported by codec" , sampleRate);
234
- return ;
235
- }
225
+ // bool validSampleRate = false;
226
+ // for (const int *p = audioCodec->supported_samplerates; p && *p != 0; p++) {
227
+ // DEBUG("sr %d", *p);
228
+ // if (sampleRate == *p) {
229
+ // validSampleRate = true;
230
+ // break;
231
+ // }
232
+ // }
233
+ // if (!validSampleRate) {
234
+ // WARN("Sample rate %d not supported by codec", sampleRate);
235
+ // return;
236
+ // }
236
237
237
238
// Set sample rate
238
239
audioCtx->sample_rate = sampleRate;
@@ -615,7 +616,6 @@ struct Encoder {
615
616
struct Recorder : Module {
616
617
enum ParamIds {
617
618
GAIN_PARAM,
618
- REC_PARAM,
619
619
NUM_PARAMS
620
620
};
621
621
enum InputIds {
@@ -635,13 +635,13 @@ struct Recorder : Module {
635
635
};
636
636
637
637
dsp::ClockDivider gateDivider;
638
- dsp::BooleanTrigger recTrigger;
639
638
dsp::SchmittTrigger trigTrigger;
640
639
dsp::VuMeter2 vuMeter[2 ];
641
640
dsp::ClockDivider lightDivider;
642
641
Encoder *encoder = NULL ;
643
642
std::mutex encoderMutex;
644
- std::thread primaryThread;
643
+ // std::thread primaryThread;
644
+ bool recClicked = false ;
645
645
646
646
// Settings. Copied to Encoder when created.
647
647
std::string format;
@@ -658,7 +658,6 @@ struct Recorder : Module {
658
658
Recorder () {
659
659
config (NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
660
660
configParam (GAIN_PARAM, 0 .f , 2 .f , 1 .f , " Level" , " dB" , -10 , 40 );
661
- configParam (REC_PARAM, 0 .f , 1 .f , 0 .f , " Record" );
662
661
663
662
gateDivider.setDivision (32 );
664
663
lightDivider.setDivision (512 );
@@ -669,10 +668,10 @@ struct Recorder : Module {
669
668
stop ();
670
669
671
670
// Stop primary thread
672
- if (APP->engine ->getPrimaryModule () == this ) {
673
- if (primaryThread.joinable ())
674
- primaryThread.join ();
675
- }
671
+ // if (APP->engine->getPrimaryModule() == this) {
672
+ // if (primaryThread.joinable())
673
+ // primaryThread.join();
674
+ // }
676
675
}
677
676
678
677
void onReset () override {
@@ -735,8 +734,9 @@ struct Recorder : Module {
735
734
// Recording state
736
735
bool gate = isRecording ();
737
736
bool oldGate = gate;
738
- if (recTrigger. process (params[REC_PARAM]. getValue ()) ) {
737
+ if (recClicked ) {
739
738
gate ^= true ;
739
+ recClicked = false ;
740
740
}
741
741
if (trigTrigger.process (rescale (inputs[TRIG_INPUT].getVoltage (), 0.1 , 2.0 , 0.0 , 1.0 ))) {
742
742
gate ^= true ;
@@ -983,13 +983,13 @@ struct Recorder : Module {
983
983
// }
984
984
// }
985
985
986
- void setPrimary () {
987
- APP->engine ->setPrimaryModule (this );
988
- }
986
+ // void setPrimary() {
987
+ // APP->engine->setPrimaryModule(this);
988
+ // }
989
989
990
- bool isPrimary () {
991
- return APP->engine ->getPrimaryModule () == this ;
992
- }
990
+ // bool isPrimary() {
991
+ // return APP->engine->getPrimaryModule() == this;
992
+ // }
993
993
};
994
994
995
995
@@ -1019,18 +1019,23 @@ static void selectPath(Recorder *module) {
1019
1019
}
1020
1020
1021
1021
1022
- struct RecButton : SvgSwitch {
1022
+ struct RecButton : SvgButton {
1023
+ Recorder* module;
1024
+
1023
1025
RecButton () {
1024
- momentary = true ;
1025
1026
addFrame (Svg::load (asset::plugin (pluginInstance, " res/RecButton.svg" )));
1026
1027
}
1027
1028
1029
+ // Instead of using onAction() which is called on mouse up, handle on mouse down
1028
1030
void onDragStart (const event::DragStart &e) override {
1029
- Recorder *module = dynamic_cast <Recorder*>(this ->module );
1030
- if (module && module->path == " " )
1031
- selectPath (module);
1031
+ if (e.button == GLFW_MOUSE_BUTTON_LEFT) {
1032
+ if (module && module->path == " " ) {
1033
+ selectPath (module);
1034
+ }
1035
+ module->recClicked = true ;
1036
+ }
1032
1037
1033
- SvgSwitch ::onDragStart (e);
1038
+ SvgButton ::onDragStart (e);
1034
1039
}
1035
1040
};
1036
1041
@@ -1062,7 +1067,10 @@ struct RecorderWidget : ModuleWidget {
1062
1067
addChild (createWidget<ScrewSilver>(Vec (box.size .x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
1063
1068
1064
1069
addParam (createParamCentered<RoundBigBlackKnob>(mm2px (Vec (12.7 , 21.417 )), module, Recorder::GAIN_PARAM));
1065
- addParam (createParamCentered<RecButton>(mm2px (Vec (12.7 , 73.624 )), module, Recorder::REC_PARAM));
1070
+
1071
+ RecButton* recButton = createWidgetCentered<RecButton>(mm2px (Vec (12.7 , 73.624 )));
1072
+ recButton->module = module;
1073
+ addChild (recButton);
1066
1074
1067
1075
addInput (createInputCentered<PJ301MPort>(mm2px (Vec (6.697 , 97.253 )), module, Recorder::GATE_INPUT));
1068
1076
addInput (createInputCentered<PJ301MPort>(mm2px (Vec (18.703 , 97.253 )), module, Recorder::TRIG_INPUT));
@@ -1109,19 +1117,18 @@ struct RecorderWidget : ModuleWidget {
1109
1117
menu->addChild (createMenuLabel (" Output file" ));
1110
1118
1111
1119
std::string path = string::ellipsizePrefix (module->path , 30 );
1112
- menu->addChild (createCheckMenuItem ((path != " " ) ? path : " Select..." ,
1113
- [=]() {return module->isPrimary ();},
1120
+ menu->addChild (createMenuItem ((path != " " ) ? path : " Select..." , " " ,
1114
1121
[=]() {selectPath (module);}
1115
1122
));
1116
1123
1117
- menu->addChild (createBoolPtrMenuItem (" Append -001, -002, etc." , &module->incrementPath ));
1124
+ menu->addChild (createBoolPtrMenuItem (" Append -001, -002, etc." , " " , &module->incrementPath ));
1118
1125
1119
1126
menu->addChild (new MenuSeparator);
1120
1127
menu->addChild (createMenuLabel (" Audio formats" ));
1121
1128
1122
1129
for (const std::string &format : AUDIO_FORMATS) {
1123
1130
const FormatInfo &fi = FORMAT_INFO.at (format);
1124
- menu->addChild (createCheckMenuItem (fi.name + " (." + fi.extension + " )" ,
1131
+ menu->addChild (createCheckMenuItem (fi.name + " (." + fi.extension + " )" , " " ,
1125
1132
[=]() {return format == module->format ;},
1126
1133
[=]() {module->setFormat (format);}
1127
1134
));
@@ -1132,7 +1139,7 @@ struct RecorderWidget : ModuleWidget {
1132
1139
1133
1140
for (const std::string &format : VIDEO_FORMATS) {
1134
1141
const FormatInfo &fi = FORMAT_INFO.at (format);
1135
- menu->addChild (createCheckMenuItem (fi.name + " (." + fi.extension + " )" ,
1142
+ menu->addChild (createCheckMenuItem (fi.name + " (." + fi.extension + " )" , " " ,
1136
1143
[=]() {return format == module->format ;},
1137
1144
[=]() {module->setFormat (format);}
1138
1145
));
@@ -1141,22 +1148,22 @@ struct RecorderWidget : ModuleWidget {
1141
1148
menu->addChild (new MenuSeparator);
1142
1149
menu->addChild (createMenuLabel (" Encoder settings" ));
1143
1150
1144
- menu->addChild (createSubmenuItem (" Sample rate" ,
1151
+ menu->addChild (createSubmenuItem (" Sample rate" , string::f ( " %g kHz " , module-> sampleRate / 1000.0 ),
1145
1152
[=](Menu* menu) {
1146
1153
for (int sampleRate : module->getSampleRates ()) {
1147
- menu->addChild (createCheckMenuItem (string::f (" %g kHz" , sampleRate / 1000.0 ),
1154
+ menu->addChild (createCheckMenuItem (string::f (" %g kHz" , sampleRate / 1000.0 ), " " ,
1148
1155
[=]() {return module->sampleRate == sampleRate;},
1149
- [=]() {module->setSampleRate (sampleRate); DEBUG ( " %d " , sampleRate); }
1156
+ [=]() {module->setSampleRate (sampleRate);}
1150
1157
));
1151
1158
}
1152
1159
}
1153
1160
));
1154
1161
1155
1162
if (module->showDepth ()) {
1156
- menu->addChild (createSubmenuItem (" Bit depth" ,
1163
+ menu->addChild (createSubmenuItem (" Bit depth" , string::f ( " %d bit " , module-> depth ),
1157
1164
[=](Menu* menu) {
1158
1165
for (int depth : module->getDepths ()) {
1159
- menu->addChild (createCheckMenuItem (string::f (" %d bit" , depth),
1166
+ menu->addChild (createCheckMenuItem (string::f (" %d bit" , depth), " " ,
1160
1167
[=]() {return module->depth == depth;},
1161
1168
[=]() {module->setDepth (depth);}
1162
1169
));
@@ -1166,10 +1173,10 @@ struct RecorderWidget : ModuleWidget {
1166
1173
}
1167
1174
1168
1175
if (module->showBitRate ()) {
1169
- menu->addChild (createSubmenuItem (" Bit rate" ,
1176
+ menu->addChild (createSubmenuItem (" Bit rate" , string::f ( " %d kbps " , module-> bitRate / 1000 ),
1170
1177
[=](Menu* menu) {
1171
1178
for (int bitRate : module->getBitRates ()) {
1172
- menu->addChild (createCheckMenuItem (string::f (" %d kbps" , bitRate / 1000 ),
1179
+ menu->addChild (createCheckMenuItem (string::f (" %d kbps" , bitRate / 1000 ), " " ,
1173
1180
[=]() {return module->bitRate == bitRate;},
1174
1181
[=]() {module->setBitRate (bitRate);}
1175
1182
));
@@ -1178,11 +1185,11 @@ struct RecorderWidget : ModuleWidget {
1178
1185
));
1179
1186
}
1180
1187
1181
- menu->addChild (new MenuSeparator);
1182
- menu->addChild (createCheckMenuItem (" Primary audio module" ,
1183
- [=]() {return module->isPrimary ();},
1184
- [=]() {module->setPrimary ();}
1185
- ));
1188
+ // menu->addChild(new MenuSeparator);
1189
+ // menu->addChild(createCheckMenuItem("Primary audio module", " ",
1190
+ // [=]() {return module->isPrimary();},
1191
+ // [=]() {module->setPrimary();}
1192
+ // ));
1186
1193
}
1187
1194
1188
1195
void step () override {
0 commit comments