cli.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. Copyright (c) 2022 George Bartolomey
  3. Этот файл — часть w2midi_qt.
  4. w2midi_qt — свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; версии 3.
  5. w2midi_qt распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной общественной лицензии GNU.
  6. Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, см. <https://www.gnu.org/licenses/>.
  7. */
  8. #include "cli.h"
  9. #include <QProcess>
  10. #include <QtCore>
  11. W2MidiCli::W2MidiCli(QObject *parent) : QObject(parent)
  12. {
  13. bufferSize = 4096;
  14. ampThreshold = 20;
  15. accThreshold = 0.02;
  16. clientName = "w2midi";
  17. rangeStart = 20;
  18. rangeEnd = 240;
  19. process = new QProcess(this);
  20. connect(process, &QProcess::stateChanged, this, [this](QProcess::ProcessState){
  21. emit processStateChanged(getProcessState());
  22. });
  23. connect(process, &QProcess::errorOccurred, this, [this](QProcess::ProcessError) { emit processStateChanged(false); });
  24. connect(process, &QProcess::readyReadStandardError, this, &W2MidiCli::readyReadStderror);
  25. setParent(parent);
  26. }
  27. W2MidiCli::~W2MidiCli()
  28. {
  29. stop();
  30. }
  31. void W2MidiCli::readyReadStderror()
  32. {
  33. QString err = process->readAllStandardError();
  34. emit errorOccurred(err);
  35. }
  36. void W2MidiCli::start()
  37. {
  38. process->start("w2midi", {
  39. "-b", QString::number(bufferSize),
  40. "-a", QString::number(accThreshold),
  41. "-d", QString::number(ampThreshold),
  42. "-n", clientName,
  43. "-s", QString::number(rangeStart),
  44. "-e", QString::number(rangeEnd),
  45. });
  46. }
  47. void W2MidiCli::stop()
  48. {
  49. if (getProcessState()) {
  50. process->terminate();
  51. process->waitForFinished();
  52. }
  53. }
  54. void W2MidiCli::restart()
  55. {
  56. stop();
  57. start();
  58. }
  59. float W2MidiCli::getAccThreshold() {
  60. return accThreshold;
  61. }
  62. float W2MidiCli::getAmpThreshold()
  63. {
  64. return ampThreshold;
  65. }
  66. int W2MidiCli::getBufferSize()
  67. {
  68. return bufferSize;
  69. }
  70. QString W2MidiCli::getClientName()
  71. {
  72. return clientName;
  73. }
  74. void W2MidiCli::setAccThreshold(float a)
  75. {
  76. accThreshold = a;
  77. }
  78. void W2MidiCli::setAmpThreshold(float a)
  79. {
  80. ampThreshold = a;
  81. }
  82. void W2MidiCli::setBufferSize(int s)
  83. {
  84. bufferSize = s;
  85. }
  86. void W2MidiCli::setClientName(QString name)
  87. {
  88. clientName = name;
  89. }
  90. void W2MidiCli::setRangeStart(int v)
  91. {
  92. if (v < 0)
  93. v = 0;
  94. if (rangeStart != v)
  95. emit rangeStartChanged(v);
  96. rangeStart = v;
  97. if (rangeStart > rangeEnd)
  98. setRangeEnd(rangeStart);
  99. }
  100. void W2MidiCli::setRangeEnd(int v)
  101. {
  102. if (v > 255)
  103. v = 0;
  104. if (rangeEnd != v)
  105. emit rangeEndChanged(v);
  106. rangeEnd = v;
  107. if (rangeEnd < rangeStart)
  108. setRangeStart(rangeStart);
  109. }
  110. bool W2MidiCli::getProcessState()
  111. {
  112. return process->state() != QProcess::NotRunning;
  113. }