コード例 #1
0
ファイル: main.cpp プロジェクト: cvilas/scratch
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();
}
コード例 #2
0
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);
}