int main(int argc, char *argv[]) { QApplication a(argc, argv); const QAudioDeviceInfo inputDevice = QAudioDeviceInfo::defaultInputDevice(); if (inputDevice.isNull()) { QMessageBox::warning(nullptr, "audio", "There is no audio input device available."); return -1; } Widget w(inputDevice); w.show(); return a.exec(); }
void MainWindow::start() { if (m_audio_lib) { stopRecord(); buttonrecord->setEnabled(false); m_audio_lib->stop(); #ifdef Q_OS_WIN if (m_loopback) m_loopback->deleteLater(); #endif return; } QByteArray password = linepassword->text().toLatin1(); if (comboboxaudioinput->count() == 0) { msgBoxCritical("Error", "No input device found", this); return; } bool ok = false; int port = lineport->text().toInt(&ok); if (!ok || port < 1 || port > 65535) { msgBoxCritical("Error", "Port must have a value between 1 and 65535,\n" "including these values", this); return; } int max_connections = linemaxconnections->text().toInt(&ok); if (!ok || max_connections < 1) { msgBoxCritical("Error", "Enter a value equal or higher to 1 on maximum connections", this); return; } m_audio_lib = new AudioStreamingLibCore(this); StreamingInfo info; info.setWorkMode(StreamingInfo::StreamingWorkMode::BroadcastServer); info.setEncryptionEnabled(!password.isEmpty()); info.setGetAudioEnabled(true); info.setListenAudioInputEnabled(boxlisteninput->isChecked()); info.setNegotiationString(QByteArray("BroadcastTCPDemo")); info.setID(lineid->text().trimmed()); QAudioDeviceInfo inputdevinfo = comboboxaudioinput->currentData().value<QAudioDeviceInfo>(); if (inputdevinfo.isNull()) { #ifdef Q_OS_WIN if (comboboxaudioinput->currentData(Qt::UserRole + 1).value<int>() == AudioInputInfo::Loopback) { m_loopback = new QWinLoopback(this); connect(m_loopback, &QObject::destroyed, this, [=] { if (isVisible()) m_buffer.clear(); }); bool started = m_loopback->start(); if (!started) return; info.setInputDeviceType(StreamingInfo::AudioDeviceType::CustomAudioDevice); info.setCallBackEnabled(true); QAudioFormat format = m_loopback->format(); connect(m_loopback, &QWinLoopback::readyRead, this, &MainWindow::loopbackdata); connect(m_audio_lib, &AudioStreamingLibCore::inputData, this, &MainWindow::process); info.setInputAudioFormat(format); } else //FFMPEG #endif { QAudioFormat format; format.setSampleSize(32); format.setSampleRate(48000); format.setChannelCount(2); format.setSampleType(QAudioFormat::Float); format.setByteOrder(QAudioFormat::LittleEndian); info.setInputDeviceType(StreamingInfo::AudioDeviceType::CustomAudioDevice); info.setCallBackEnabled(true); connect(m_audio_lib, &AudioStreamingLibCore::inputData, this, &MainWindow::process); info.setInputAudioFormat(format); } } else { info.setInputDeviceInfo(inputdevinfo); QAudioFormat format; format.setSampleSize(32); format.setSampleRate(linesamplerate->text().toInt()); format.setChannelCount(linechannels->text().toInt()); format.setSampleType(QAudioFormat::Float); format.setByteOrder(QAudioFormat::LittleEndian); info.setInputAudioFormat(format); } lineport->setEnabled(false); linemaxconnections->setEnabled(false); lineid->setEnabled(false); linepassword->setEnabled(false); linesamplerate->setEnabled(false); linechannels->setEnabled(false); comboboxaudioinput->setEnabled(false); boxlisteninput->setEnabled(false); buttonstart->setText("Stop Server"); buttonrecord->setEnabled(true); connect(m_audio_lib, &AudioStreamingLibCore::adjustSettings, this, &MainWindow::adjustSettings); connect(m_audio_lib, &AudioStreamingLibCore::inputLevel, level, &LevelWidget::setlevel); connect(m_audio_lib, &AudioStreamingLibCore::error, this, &MainWindow::error); connect(m_audio_lib, &AudioStreamingLibCore::finished, this, &MainWindow::finished); connect(m_audio_lib, &AudioStreamingLibCore::connected, this, &MainWindow::updateConnections); connect(m_audio_lib, &AudioStreamingLibCore::disconnected, this, &MainWindow::updateConnections); m_audio_lib->start(info); if (info.isListenAudioInputEnabled()) m_audio_lib->setVolume(slidervolume->value()); m_audio_lib->listen(quint16(port), true, password, max_connections); boxautostart->setEnabled(false); if (boxautostart->isChecked()) startPauseRecord(); //Auto start recording when server starts #ifndef Q_OS_ANDROID m_ffmpeg->setReadingEnabled(true); #endif QString title = QString("%0 connection(s) - %1").arg(0).arg(TITLE); setWindowTitle(title); }