const QList<audioDevice> DXAudioInputRegistrar::getDeviceChoices() { QList<dsDevice> qlInput; qlInput << dsDevice(DXAudioInput::tr("Default DirectSound Voice Input"), DSDEVID_DefaultVoiceCapture); DirectSoundCaptureEnumerate(DSEnumProc, reinterpret_cast<void *>(&qlInput)); QList<audioDevice> qlReturn; const GUID *lpguid = NULL; if (! g.s.qbaDXInput.isEmpty()) { lpguid = reinterpret_cast<LPGUID>(g.s.qbaDXInput.data()); } else { lpguid = &DSDEVID_DefaultVoiceCapture; } foreach(dsDevice d, qlInput) { if (d.second == *lpguid) { qlReturn << audioDevice(d.first, QByteArray(reinterpret_cast<const char *>(&d.second), sizeof(GUID))); } } foreach(dsDevice d, qlInput) { if (d.second != *lpguid) { qlReturn << audioDevice(d.first, QByteArray(reinterpret_cast<const char *>(&d.second), sizeof(GUID))); } } return qlReturn; }
const QList<audioDevice> JackAudioInputRegistrar::getDeviceChoices() { QList<audioDevice> qlReturn; QStringList qlInputDevs = jasys->qhInput.keys(); qSort(qlInputDevs); foreach(const QString &dev, qlInputDevs) { qlReturn << audioDevice(jasys->qhInput.value(dev), dev); }
/** * Returns a gstId or "default" if device does not exist * * The gstId is typically in the format hw:1,0 */ const QByteArray DeviceManager::gstId(int deviceId) { if (!PulseSupport::getInstance()->isActive()) { AudioDevice *ad = audioDevice(deviceId); if (ad) return QByteArray(ad->gstId); } return QByteArray("default"); }
const QList<audioDevice> PortAudioSystem::enumerateDevices(bool input, PaDeviceIndex match) { PaHostApiIndex iApiCnt; PaHostApiIndex iApiIndex; int iApiDevIndex; PaDeviceIndex iDevIndex; const PaDeviceInfo *pDevInfo; QList<audioDevice> adl; adl << audioDevice(tr("Default Device"), -1); iApiCnt = Pa_GetHostApiCount(); for (iApiIndex = 0; iApiIndex < iApiCnt; iApiIndex++) { const PaHostApiInfo *apiInfo = Pa_GetHostApiInfo(iApiIndex); if (!apiInfo) continue; QString qsApiName = QLatin1String(apiInfo->name); for (iApiDevIndex = 0; iApiDevIndex < apiInfo->deviceCount; iApiDevIndex++) { iDevIndex = Pa_HostApiDeviceIndexToDeviceIndex(iApiIndex, iApiDevIndex); pDevInfo = Pa_GetDeviceInfo(iDevIndex); if (!pDevInfo) continue; QString qsDevName = QLatin1String(pDevInfo->name); if ((input && (pDevInfo->maxInputChannels > 0)) || (!input && (pDevInfo->maxOutputChannels > 0))) adl << audioDevice(qsApiName + QLatin1String(": ") + qsDevName, iDevIndex); } } for (int i=0;i<adl.count();++i) { if (adl.at(i).second == match) { audioDevice ad = adl.takeAt(i); adl.prepend(ad); break; } } return adl; }
const QList<audioDevice> WASAPISystem::mapToDevice(const QHash<QString, QString> devs, const QString &match) { QList<audioDevice> qlReturn; QStringList qlDevices = devs.keys(); qSort(qlDevices); if (qlDevices.contains(match)) { qlDevices.removeAll(match); qlDevices.prepend(match); } foreach(const QString &dev, qlDevices) { qlReturn << audioDevice(devs.value(dev), dev); }
const QList<audioDevice> PulseAudioInputRegistrar::getDeviceChoices() { QList<audioDevice> qlReturn; QStringList qlInputDevs = pasys->qhInput.keys(); qSort(qlInputDevs); if (qlInputDevs.contains(g.s.qsPulseAudioInput)) { qlInputDevs.removeAll(g.s.qsPulseAudioInput); qlInputDevs.prepend(g.s.qsPulseAudioInput); } foreach(const QString &dev, qlInputDevs) { qlReturn << audioDevice(pasys->qhInput.value(dev), dev); }
const QList<audioDevice> ALSAAudioInputRegistrar::getDeviceChoices() { QList<audioDevice> qlReturn; QStringList qlInputDevs = cards->qhInput.keys(); qSort(qlInputDevs); if (qlInputDevs.contains(g.s.qsALSAInput)) { qlInputDevs.removeAll(g.s.qsALSAInput); qlInputDevs.prepend(g.s.qsALSAInput); } foreach(const QString &dev, qlInputDevs) { QString t=QString::fromLatin1("[%1] %2").arg(dev, cards->qhInput.value(dev)); qlReturn << audioDevice(t, dev); }
HRESULT SoundClass::Initialize(HWND hwnd , MutableString&& path) { HRESULT hr = S_OK; m_hWnd = hwnd; AudioDevicePtr audioDevice(OpenDevice()); OutputStream* m_soundDataStream = OpenSound(audioDevice, path.getMultiByteString().c_str(), false); m_soundData.reset(new OutputStreamPtr(m_soundDataStream)); if (m_soundData == nullptr || m_soundData->get() == nullptr) { printf("No Sound File Found.\r\n"); return E_FAIL; } (*m_soundData)->stop(); return hr; }
const QList<audioDevice> CoreAudioSystem::getDeviceChoices(bool input) { QHash<QString, QString> qhDevices = CoreAudioSystem::getDevices(input); QList<audioDevice> qlReturn; QStringList qlDevices; qhDevices.insert(QString(), tr("Default Device")); qlDevices = qhDevices.keys(); const QString &qsDev = input ? g.s.qsCoreAudioInput : g.s.qsCoreAudioOutput; if (qlDevices.contains(qsDev)) { qlDevices.removeAll(qsDev); qlDevices.prepend(qsDev); } foreach(const QString &qsIdentifier, qlDevices) { qlReturn << audioDevice(qhDevices.value(qsIdentifier), qsIdentifier); }
// Channel dialog setup formal initializer. void ChannelForm::setup ( Channel *pChannel ) { m_pChannel = pChannel; m_iDirtySetup = 0; m_iDirtyCount = 0; if (m_pChannel == NULL) return; // It can be a brand new channel, remember? bool bNew = (m_pChannel->channelID() < 0); setWindowTitle(QSAMPLER_TITLE ": " + m_pChannel->channelName()); // Check if we're up and connected. MainForm *pMainForm = MainForm::getInstance(); if (pMainForm == NULL) return; if (pMainForm->client() == NULL) return; Options *pOptions = pMainForm->options(); if (pOptions == NULL) return; // Avoid nested changes. m_iDirtySetup++; // Load combo box history... pOptions->loadComboBoxHistory(m_ui.InstrumentFileComboBox); // Populate Engines list. const char **ppszEngines = ::lscp_list_available_engines(pMainForm->client()); if (ppszEngines) { m_ui.EngineNameComboBox->clear(); for (int iEngine = 0; ppszEngines[iEngine]; iEngine++) m_ui.EngineNameComboBox->addItem(QString(ppszEngines[iEngine])); } else m_pChannel->appendMessagesClient("lscp_list_available_engines"); // Populate Audio output type list. m_ui.AudioDriverComboBox->clear(); m_ui.AudioDriverComboBox->insertItems(0, Device::getDrivers(pMainForm->client(), Device::Audio)); // Populate MIDI input type list. m_ui.MidiDriverComboBox->clear(); m_ui.MidiDriverComboBox->insertItems(0, Device::getDrivers(pMainForm->client(), Device::Midi)); // Populate Maps list. m_ui.MidiMapComboBox->clear(); m_ui.MidiMapComboBox->insertItems(0, Instrument::getMapNames()); // Read proper channel information, // and populate the channel form fields. // Engine name... QString sEngineName = pChannel->engineName(); if (sEngineName.isEmpty() || bNew) sEngineName = pOptions->sEngineName; if (sEngineName.isEmpty()) sEngineName = Channel::noEngineName(); if (m_ui.EngineNameComboBox->findText(sEngineName, Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) { m_ui.EngineNameComboBox->addItem(sEngineName); } m_ui.EngineNameComboBox->setCurrentIndex( m_ui.EngineNameComboBox->findText(sEngineName, Qt::MatchExactly | Qt::MatchCaseSensitive)); // Instrument filename and index... QString sInstrumentFile = pChannel->instrumentFile(); if (sInstrumentFile.isEmpty()) sInstrumentFile = Channel::noInstrumentName(); m_ui.InstrumentFileComboBox->setEditText(sInstrumentFile); m_ui.InstrumentNrComboBox->clear(); m_ui.InstrumentNrComboBox->insertItems(0, Channel::getInstrumentList(sInstrumentFile, pOptions->bInstrumentNames)); int iInstrumentNr = pChannel->instrumentNr(); if (iInstrumentNr < 0) iInstrumentNr = 0; m_ui.InstrumentNrComboBox->setCurrentIndex(iInstrumentNr); // MIDI input device... Device midiDevice(Device::Midi, m_pChannel->midiDevice()); // MIDI input driver... QString sMidiDriver = midiDevice.driverName(); if (sMidiDriver.isEmpty() || bNew) sMidiDriver = pOptions->sMidiDriver.toUpper(); if (!sMidiDriver.isEmpty()) { if (m_ui.MidiDriverComboBox->findText(sMidiDriver, Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) { m_ui.MidiDriverComboBox->insertItem(0, sMidiDriver); } m_ui.MidiDriverComboBox->setItemText( m_ui.MidiDriverComboBox->currentIndex(), sMidiDriver); } selectMidiDriverItem(sMidiDriver); if (!bNew) { m_ui.MidiDeviceComboBox->setItemText( m_ui.MidiDeviceComboBox->currentIndex(), midiDevice.deviceName()); } selectMidiDeviceItem(m_ui.MidiDeviceComboBox->currentIndex()); // MIDI input port... m_ui.MidiPortSpinBox->setValue(pChannel->midiPort()); // MIDI input channel... int iMidiChannel = pChannel->midiChannel(); // When new, try to suggest a sensible MIDI channel... if (iMidiChannel < 0) iMidiChannel = (::lscp_get_channels(pMainForm->client()) % 16); m_ui.MidiChannelComboBox->setCurrentIndex(iMidiChannel); // MIDI instrument map... int iMidiMap = (bNew ? pOptions->iMidiMap : pChannel->midiMap()); // When new, try to suggest a sensible MIDI map... if (iMidiMap < 0) iMidiMap = 0; const QString& sMapName = Instrument::getMapName(iMidiMap); if (!sMapName.isEmpty()) { m_ui.MidiMapComboBox->setItemText( m_ui.MidiMapComboBox->currentIndex(), sMapName); } // It might be no maps around... bool bMidiMapEnabled = (m_ui.MidiMapComboBox->count() > 0); m_ui.MidiMapTextLabel->setEnabled(bMidiMapEnabled); m_ui.MidiMapComboBox->setEnabled(bMidiMapEnabled); // Audio output device... Device audioDevice(Device::Audio, m_pChannel->audioDevice()); // Audio output driver... QString sAudioDriver = audioDevice.driverName(); if (sAudioDriver.isEmpty() || bNew) sAudioDriver = pOptions->sAudioDriver.toUpper(); if (!sAudioDriver.isEmpty()) { if (m_ui.AudioDriverComboBox->findText(sAudioDriver, Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) { m_ui.AudioDriverComboBox->insertItem(0, sAudioDriver); } m_ui.AudioDriverComboBox->setItemText( m_ui.AudioDriverComboBox->currentIndex(), sAudioDriver); } selectAudioDriverItem(sAudioDriver); if (!bNew) { m_ui.AudioDeviceComboBox->setItemText( m_ui.AudioDeviceComboBox->currentIndex(), audioDevice.deviceName()); } selectAudioDeviceItem(m_ui.AudioDeviceComboBox->currentIndex()); // Let the audio routing table see the light, // if we're editing an existing sampler channel... m_ui.AudioRoutingTable->setVisible(!bNew); const QString sInstrumentNrToolTip = (pOptions->bInstrumentNames) ? "Select an instrument of the file" : "You might want to enable instrument name retrieval in the " "settings dialog"; m_ui.InstrumentNrComboBox->setToolTip( QObject::tr(sInstrumentNrToolTip.toUtf8().data()) ); // As convenient, make it ready on stabilizeForm() for // prompt acceptance, if we got the minimum required... /* if (sEngineName != Channel::noEngineName() && sInstrumentFile != Channel::noInstrumentName()) m_iDirtyCount++; */ // Done. m_iDirtySetup--; stabilizeForm(); }