void SoundtrackDialog::slotPreviewButtonClicked() { KUrl::List urlList; for (int i = 0 ; i < m_SoundFilesListBox->count() ; ++i) { SoundItem *pitem = static_cast<SoundItem*>( m_SoundFilesListBox->item(i) ); QString path = pitem->url().toLocalFile(); if (!QFile::exists(path)) { KMessageBox::error(this, i18n("Cannot access file %1. Please check the path is correct.", path)); return; } urlList.append(path); // Input sound files. } if ( urlList.isEmpty() ) { KMessageBox::error(this, i18n("Cannot create a preview of an empty file list.")); return; } // Update SharedContainer from interface saveSettings(); QPointer<SoundtrackPreview> preview = new SoundtrackPreview(this, urlList, m_sharedData); preview->exec(); delete preview; return; }
void SoundtrackDialog::addItems(const KUrl::List& fileList) { if (fileList.isEmpty()) return; KUrl::List Files = fileList; for (KUrl::List::ConstIterator it = Files.constBegin(); it != Files.constEnd(); ++it) { KUrl currentFile = *it; KUrl path = KUrl(currentFile.path().section('/', 0, -1)); m_sharedData->soundtrackPath = path; SoundItem *item = new SoundItem(m_SoundFilesListBox, path); item->setName(currentFile.path().section('/', -1)); m_SoundFilesListBox->insertItem(m_SoundFilesListBox->count() - 1, item); m_soundItems->insert(path, item); connect(m_soundItems->value(path), SIGNAL(signalTotalTimeReady(const KUrl&, const QTime&)), this, SLOT(slotAddNewTime(const KUrl&, const QTime&))); m_urlList.append(path); } m_SoundFilesListBox->setCurrentItem(m_SoundFilesListBox->item(m_SoundFilesListBox->count() - 1)) ; slotSoundFilesSelected(m_SoundFilesListBox->currentRow()); m_SoundFilesListBox->scrollToItem(m_SoundFilesListBox->currentItem()); m_previewButton->setEnabled(true); }
void MainWindow::on_buttonMusic_clicked() { if (soundEngine.isPlayingMusic()) { if (soundEngine.isMusicPaused()) { timer->start(); soundEngine.resumeMusic(); buttonMusic->setText(QApplication::translate("mainWindow","&Pause",0)); } else { timer->stop(); soundEngine.pauseMusic(); buttonMusic->setText(QApplication::translate("mainWindow","&Resume",0)); } } else { // we play the selected song (if it is a sound item) QTreeWidgetItem *qItem = treeMusic->currentItem(); if (qItem != NULL) { Item *item = dynamic_cast<QCustomTreeWidgetItem*>(qItem)->branch()->item(); if (item->type()==Item::tSound) { SoundItem *sItem = dynamic_cast<SoundItem*>(item); playMusic(sItem->fileName(),sItem->duration()); } } timer->start(); } }
size_t CSound::MakeItemFromDef(const soundItemDef& itemDef) { //! MakeItemFromDef is private. Only caller is LoadSoundDefs and it sets the mutex itself. //boost::recursive_mutex::scoped_lock lck(soundMutex); const size_t newid = sounds.size(); soundItemDef::const_iterator it = itemDef.find("file"); boost::shared_ptr<SoundBuffer> buffer = SoundBuffer::GetById(LoadSoundBuffer(it->second, false)); if (buffer) { SoundItem* buf = new SoundItem(buffer, itemDef); sounds.push_back(buf); soundMap[buf->Name()] = newid; return newid; } else return 0; }
void AudioChannel::FindSourceAndPlay(size_t id, const float3& pos, const float3& velocity, float volume, bool relative) { if (!enabled) return; if (volume <= 0.0f) return; boost::recursive_mutex::scoped_lock slck(soundMutex); SoundItem* sndItem = sound->GetSoundItem(id); if (!sndItem) { sound->numEmptyPlayRequests++; return; } if (pos.distance(sound->GetListenerPos()) > sndItem->MaxDistance()) { if (!relative) return; else LogObject(LOG_SOUND) << "CSound::PlaySample: maxdist ignored for relative payback: " << sndItem->Name(); } if (emmitsThisFrame >= emmitsPerFrame) return; emmitsThisFrame++; CSoundSource* sndSource = sound->GetNextBestSource(); if (!sndSource) return; if (sndSource->GetCurrentPriority() < sndItem->GetPriority()) { if (sndSource->IsPlaying()) sound->numAbortedPlays++; sndSource->Play(this, sndItem, pos, velocity, volume, relative); CheckError("CSound::FindSourceAndPlay"); boost::recursive_mutex::scoped_lock lck(chanMutex); cur_sources[sndSource] = true; } }
void QCustomTreeWidget::launchItem(QTreeWidgetItem *qItem) { Item *item = dynamic_cast<QCustomTreeWidgetItem*>(qItem)->branch()->item(); switch (item->type()) { case Item::tSound: { SoundItem *soundItem = dynamic_cast<SoundItem*>(item); // we send a signal to play the music (and do some other things) emit fileToPlay(soundItem->fileName(),soundItem->duration()); break; } case Item::tImage: { ImageItem *imageItem = dynamic_cast<ImageItem*>(item); new ImageWindow(imageItem->fileName(),this); break; } default: break; } }
void SoundtrackDialog::slotSoundFilesButtonDelete() { int Index = m_SoundFilesListBox->currentRow(); if( Index < 0 ) return; SoundItem* pitem = static_cast<SoundItem*>(m_SoundFilesListBox->takeItem(Index)); m_urlList.removeAll(pitem->url()); m_soundItems->remove(pitem->url()); m_timeMutex->lock(); m_tracksTime->remove(pitem->url()); updateTracksNumber(); m_timeMutex->unlock(); delete pitem; slotSoundFilesSelected(m_SoundFilesListBox->currentRow()); if (m_SoundFilesListBox->count() == 0) m_previewButton->setEnabled(false); updateFileList(); }
void AudioChannel::FindSourceAndPlay(size_t id, const float3& pos, const float3& velocity, float volume, bool relative) { boost::recursive_mutex::scoped_lock lck(soundMutex); if (!enabled) return; if (volume <= 0.0f) return; SoundItem* sndItem = sound->GetSoundItem(id); if (!sndItem) { sound->numEmptyPlayRequests++; return; } if (pos.distance(sound->GetListenerPos()) > sndItem->MaxDistance()) { if (!relative) { return; } else { LOG("CSound::PlaySample: maxdist ignored for relative playback: %s", sndItem->Name().c_str()); } } if (emmitsThisFrame >= emmitsPerFrame) return; emmitsThisFrame++; if (cur_sources.size() >= maxConcurrentSources) { CSoundSource* src = NULL; int prio = INT_MAX; for (std::map<CSoundSource*, bool>::iterator it = cur_sources.begin(); it != cur_sources.end(); ++it) { if (it->first->GetCurrentPriority() < prio) { src = it->first; prio = it->first->GetCurrentPriority(); } } if (src && prio <= sndItem->GetPriority()) { src->Stop(); } else { LOG_L(L_DEBUG, "CSound::PlaySample: Max concurrent sounds in channel reached! Dropping playback!"); return; } } CSoundSource* sndSource = sound->GetNextBestSource(); if (!sndSource) { LOG_L(L_DEBUG, "CSound::PlaySample: Max sounds reached! Dropping playback!"); return; } if (sndSource->GetCurrentPriority() < sndItem->GetPriority()) { if (sndSource->IsPlaying()) sound->numAbortedPlays++; sndSource->Play(this, sndItem, pos, velocity, volume, relative); CheckError("CSound::FindSourceAndPlay"); cur_sources[sndSource] = true; } }
void AudioChannel::FindSourceAndPlay(size_t id, const float3& pos, const float3& velocity, float volume, bool relative) { std::lock_guard<spring::recursive_mutex> lck(soundMutex); if (!enabled) return; if (volume <= 0.0f) return; // generate the sound item SoundItem* sndItem = sound->GetSoundItem(id); if (sndItem == nullptr) { sound->numEmptyPlayRequests++; return; } // check distance to listener if (pos.distance(sound->GetListenerPos()) > sndItem->MaxDistance()) { if (!relative) return; LOG("CSound::PlaySample: maxdist ignored for relative playback: %s", sndItem->Name().c_str()); } // don't spam to many sounds per frame if (emitsThisFrame >= emitsPerFrame) return; emitsThisFrame++; // check if the sound item is already played if (curSources.size() >= maxConcurrentSources) { CSoundSource* src = nullptr; int prio = INT_MAX; for (auto it = curSources.begin(); it != curSources.end(); ++it) { if ((*it)->GetCurrentPriority() < prio) { src = *it; prio = src->GetCurrentPriority(); } } if (src == nullptr || prio > sndItem->GetPriority()) { LOG_L(L_DEBUG, "CSound::PlaySample: Max concurrent sounds in channel reached! Dropping playback!"); return; } src->Stop(); } // find a sound source to play the item in CSoundSource* sndSource = sound->GetNextBestSource(); if (sndSource == nullptr || (sndSource->GetCurrentPriority() >= sndItem->GetPriority())) { LOG_L(L_DEBUG, "CSound::PlaySample: Max sounds reached! Dropping playback!"); return; } if (sndSource->IsPlaying()) sound->numAbortedPlays++; // play the sound item sndSource->PlayAsync(this, sndItem, pos, velocity, volume, relative); curSources.insert(sndSource); }