void Player::Enqueue (const QStringList& paths, bool sort) { QList<AudioSource> parsedSources; for (const auto& path : paths) parsedSources << AudioSource (path); Enqueue (parsedSources, sort); }
void PreviewHandler::handlePendingReady () { auto pending = qobject_cast<Media::IPendingAudioSearch*> (sender ()); QList<AudioSource> sources; QSet<QUrl> urls; QSet<SamenessCheckInfo> infos; for (const auto& res : pending->GetResults ()) { if (urls.contains (res.Source_)) continue; urls.insert (res.Source_); const SamenessCheckInfo checkInfo { res.Info_.Album_.toLower ().trimmed (), res.Info_.Title_.toLower ().trimmed (), res.Info_.Length_ }; if (infos.contains (checkInfo)) continue; infos << checkInfo; Player_->PrepareURLInfo (res.Source_, MediaInfo::FromAudioInfo (res.Info_)); sources << AudioSource (res.Source_); } if (!sources.isEmpty ()) Player_->Enqueue (sources, Player::EnqueueNone); CheckPendingAlbum (pending); }
void Plugin::Handle (Entity e) { auto player = PlayerTab_->GetPlayer (); if (e.Mime_ == "x-leechcraft/power-state-changed") { if (e.Entity_ == "Sleeping") { player->SavePlayState (true); player->setPause (); } else if (e.Entity_ == "WokeUp") { player->RestorePlayState (); Core::Instance ().GetRadioManager ()->HandleWokeUp (); } return; } QString path = e.Entity_.toString (); const QUrl& url = e.Entity_.toUrl (); if (path.isEmpty () && url.isValid () && url.scheme () == "file") path = url.toLocalFile (); if (e.Parameters_ & Internal) { /* TODO auto obj = Phonon::createPlayer (Phonon::NotificationCategory, path); obj->play (); connect (obj, SIGNAL (finished ()), obj, SLOT (deleteLater ())); */ return; } if (!(e.Parameters_ & FromUserInitiated)) return; player->Enqueue ({ AudioSource (url) }, false); if (e.Additional_ ["Action"] == "AudioEnqueuePlay") player->AddToOneShotQueue (url); }
int main(int argc, char* argv[]) { Screen &screen = Screen::Instance(); const Renderer &render = Renderer::Instance(); screen.Open(800, 600, false); //inicamos el motor de sonido AudioEngine::Instance().Init(); //cargamos recursos AudioBuffer* wav = ResourceManager::Instance().LoadAudioBuffer("data/music.wav"); AudioSource source = AudioSource(wav); Font* fuente = ResourceManager::Instance().LoadFont("data/arial16_2.png"); float x,y,pitch; x = screen.GetWidth() / 2; y = screen.GetHeight() / 2; pitch = 1; source.SetGain(2); //sitamos el listener en el centro de la pantalla Listener::Instance().SetPosition(x, y, 0); while (screen.IsOpened() && !screen.KeyPressed(GLFW_KEY_ESC)) { render.Clear(); //actualizamos la posicion del source y su pitch source.SetPosition(x, y, 0); source.SetPitch(pitch); if (!source.IsPlaying()) source.Play(); if (screen.KeyPressed(GLFW_KEY_LEFT)) x-=50 * screen.ElapsedTime(); else if (screen.KeyPressed(GLFW_KEY_RIGHT)) x+=50 * screen.ElapsedTime(); else if (screen.KeyPressed(GLFW_KEY_UP)) pitch+= screen.ElapsedTime(); else if (screen.KeyPressed(GLFW_KEY_DOWN)) pitch-= screen.ElapsedTime(); else if (screen.KeyPressed(GLFW_KEY_SPACE)) { x = screen.GetWidth() / 2; pitch = 1; } x = WrapValue(x, screen.GetWidth()); //pintamos texto informativo y posicion de la fuente render.SetColor(255,125,0,255); render.DrawEllipse(x,y,10,10); render.SetColor(255,255,255,255); render.DrawText(fuente, String("cursor izquierda : desplazar fuente a la izquierda"),10,10); render.DrawText(fuente, String("cursor derecha : desplazar fuente a la derecha"),10,30); render.DrawText(fuente, String("cursor arriba : aumentar pitch"),10,50); render.DrawText(fuente, String("cursor abajo : disminuir pitch"),10,70); render.DrawText(fuente, String("espacio : resetear pitch y posicion"),10,90); render.DrawText(fuente, String("pitch: ") + String::FromFloat(pitch),10,110); render.DrawText(fuente, String("(Listener)"),(screen.GetWidth() / 2) - fuente->GetTextWidth(String("(Listener)")) / 2, screen.GetHeight() / 2 + 20); screen.Refresh(); } //paramos el source source.Stop(); //paramos motor audio y liberamos recursos AudioEngine::Instance().Finish(); ResourceManager::Instance().FreeResources(); return 0; }