void SDLSound::playMusic(const char* directory) { // Part1: scan directory for music files char **list = filesystem::enumerateFiles(directory); setMusicVolume(gameconfig->sound.getMusicVol()); musicfiles.clear(); for (char **i = list; *i != NULL; i++) { std::string filename = directory; filename.append(*i); if (!filesystem::isDirectory(filename.c_str())) { musicfiles.push_back(filename); } } filesystem::freeList(list); if(musicfiles.size() == 0) { LOGGER.info("Couldn't find any music in '%s'", directory); return; } // Part2: play music :) currentsong = musicfiles.end(); nextSong(); Mix_HookMusicFinished(nextSong); }
int MusicPlayer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: updateTime((*reinterpret_cast< qint64(*)>(_a[1]))); break; case 1: playOrpause(); break; case 2: openFile(); break; case 3: setMod(); break; case 4: previousSong(); break; case 5: nextSong(); break; case 6: whatiLike(); break; case 7: showLrc(); break; case 8: setPlayer(); break; case 9: showPlayList(); break; case 10: metaStateChanged((*reinterpret_cast< Phonon::State(*)>(_a[1])),(*reinterpret_cast< Phonon::State(*)>(_a[2]))); break; case 11: tableWidgetClicked((*reinterpret_cast< int(*)>(_a[1]))); break; case 12: aboutToFinish(); break; case 13: clearSources(); break; case 14: saveAndQuit(); break; case 15: trayIconActivated((*reinterpret_cast< QSystemTrayIcon::ActivationReason(*)>(_a[1]))); break; default: ; } _id -= 16; } return _id; }
void SDLSound::playMusic(const char* directory) { // Part1: scan directory for music files char **list = FileSystem::enumerateFiles(directory); musicfiles.clear(); for (char **i = list; *i != NULL; i++) { std::string filename = directory; filename.append(*i); if (!FileSystem::isDirectory(filename.c_str())) { musicfiles.push_back(filename); } } FileSystem::freeList(list); if(musicfiles.size() == 0) { LOG (("Not found any music in '%s'", directory)); return; } // Part2: play music :) currentsong = musicfiles.end(); nextSong(); Mix_HookMusicFinished(nextSong); }
int main (int argc, char ** argv) { gst_init (&argc, &argv); GMainLoop* loop = g_main_loop_new (NULL, FALSE); pipe = gst_pipeline_new ("pipeline"); src = gst_element_factory_make ("filesrc", NULL); // this parses the FLAC tags to replay gain stuff. GstElement* decoder = gst_element_factory_make("decodebin2",NULL); GstElement* converter = gst_element_factory_make("audioconvert",NULL); GstElement* analyzer = gst_element_factory_make("rganalysis",NULL); GstElement* alsa = gst_element_factory_make("fakesink", NULL); if(!(src && decoder && converter && analyzer && alsa)) g_error("_______ could not be created"); GValue val = { 0, }; g_value_init (&val, G_TYPE_INT); g_value_set_schar (&val, 1); g_object_set_property(G_OBJECT(analyzer),"num-tracks",&val); g_value_unset(&val); GstBus* bus = gst_pipeline_get_bus (GST_PIPELINE (pipe)); gst_bus_add_watch (bus, bus_call, loop); g_object_unref(bus); gst_bin_add_many (GST_BIN (pipe), src, decoder, converter, analyzer, alsa, NULL); // src -> decoder ...> converter -> analyzer -> sink gst_element_link(src,decoder); g_signal_connect (decoder, "pad-added", G_CALLBACK (on_new_pad), converter); gst_element_link_many(converter, analyzer, alsa, NULL); if(argc==2) { GString* next = g_string_new(argv[1]); nextSong(next); } else { watch_input(loop); } g_main_loop_run(loop); gst_element_set_state (pipe, GST_STATE_NULL); puts("boofff"); gst_object_unref (pipe); return 0; }
MusicWindow::MusicWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MusicWindow) { ui->setupUi(this); playNum = 1; last_PlayNum = 0; search_Last = 0; player = new QMediaPlayer; lyric = new MyLyric(this); playMode = "order"; ui->volumeSlider->setValue(player->volume()); thread = new Thread(this); //线程实例化 //窗口初始化 setElement_BackGround(); //检测音乐播放进度,同时调整播放滑块 connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(updateTime(qint64))); connect(player, SIGNAL(durationChanged(qint64)), this, SLOT(setPlayRange(qint64))); connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(setPlayPosition(qint64))); connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(lyric_Sync(QMediaPlayer::State))); //调整播放进程 connect(ui->timeSlider, SIGNAL(sliderMoved(int)), this, SLOT(setSliderPosition())); connect(ui->volumeSlider, SIGNAL(sliderMoved(int)), this, SLOT(adjustVolume())); connect(ui->browserHideButton, SIGNAL(clicked()), this, SLOT(browserSet())); connect(ui->setApearenceButton, SIGNAL(clicked()), this, SLOT(setApearence())); connect(ui->addButton, SIGNAL(clicked()), this, SLOT(load_again())); connect(ui->lyricButton, SIGNAL(clicked()), this, SLOT(show_Hide_Lyric())); connect(ui->nextButton, SIGNAL(clicked()), this, SLOT(nextSong())); connect(ui->lastButton, SIGNAL(clicked()), this, SLOT(lastSong())); connect(ui->playButton, SIGNAL(clicked()), this, SLOT(playEvent())); connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(doubleClickedPlay(QListWidgetItem *))); connect(ui->quitButton, SIGNAL(clicked()), this, SLOT(warning())); connect(ui->markButton, SIGNAL(clicked()), this, SLOT(markSong())); connect(ui->setApearenceButton, SIGNAL(clicked()), this, SLOT(setApearence())); connect(ui->muteButton, SIGNAL(clicked()), this, SLOT(set_Mute())); connect(ui->storeButton, SIGNAL(clicked()), this, SLOT(store_Show())); connect(ui->favoriteButton, SIGNAL(clicked()), this, SLOT(favoriteSongs_Show())); connect(ui->browserButton, SIGNAL(clicked()), this, SLOT(browser_Show())); connect(ui->loginButton, SIGNAL(clicked()), this, SLOT(user_login())); connect(ui->downloadButton, SIGNAL(clicked()), this, SLOT(download_File())); connect(ui->modeButton, SIGNAL(clicked()), this, SLOT(playMode_Change())); connect(ui->smallButton, SIGNAL(clicked()), this, SLOT(showMinimized())); connect(ui->searchEdit, SIGNAL(textChanged(QString)), this, SLOT(songs_Search(QString))); //子线程 connect(thread, SIGNAL(upgrade_Signal(int, QStringList, QStringList, QFileInfoList)), this, SLOT(upgradeData(int, QStringList, QStringList, QFileInfoList)), Qt::DirectConnection ); //载入音乐 musicLoad(); Sleep(1000); }
void playerPlay(void) { uint32_t lastId = -1; PGresult* result = NULL; int rows = 0; gst_element_set_state (pipeline, GST_STATE_NULL); for(;;) { waitUntilSongInQueue(); result = logExecPrepared(PQconn,"getTopRecording", 0,NULL,NULL,NULL,0); rows = PQntuples(result); if(rows>0) break; PQclear(result); sleep(1); } int cols = PQnfields(result); fprintf(stderr,"rows %x cols %x\n",rows,cols); PQassert(result,rows>=1 && cols==5); char* end; char* recording = PQgetvalue(result,0,0); uint32_t id = strtol(recording,&end,10); fprintf(stderr,"ID %x %x\n",id,lastId); if (id==lastId) { fprintf(stderr,"(error repeated-song #x%x)\n",id); goto CLEAR; } else { lastId = id; } uint16_t len = strlen(recording); int fmt = 0; rows = PQntuples(result); cols = PQnfields(result); PQassert(result,rows==1 && cols==5); g_activate_gain.gain = g_ascii_strtod(PQgetvalue(result,0,1),&end); g_activate_gain.peak = g_ascii_strtod(PQgetvalue(result,0,2),&end); g_activate_gain.level = g_ascii_strtod(PQgetvalue(result,0,3),&end); nextSong(PQgetvalue(result,0,4)); CLEAR: PQclear(result); }
static gboolean on_input(GIOChannel* in, GIOCondition condition, GMainLoop* loop) { static GString* buf = NULL; if(!buf) { buf = g_string_sized_new(0x40); } GError* error = NULL; GIOStatus status = g_io_channel_read_line_string(in,buf,NULL,&error); switch(status) { case G_IO_STATUS_AGAIN: return TRUE; case G_IO_STATUS_EOF: case G_IO_STATUS_ERROR: fprintf(stderr,"EEEP\n"); g_main_loop_quit(loop); return FALSE; case G_IO_STATUS_NORMAL: buf->str[buf->len-1] = '\0'; nextSong(buf); return TRUE; }; }
//设置全局界面元素以及部件透明度 void MusicWindow::setElement_BackGround() { //文件夹下面的图片 QPixmap fit_Button; QPixmap small_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/small.png")); QPixmap mode_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/order.png")); QPixmap play_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/pause1.png")); QPixmap last_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/last1.png")); QPixmap next_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/next1.png")); QPixmap add_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/open.png")); QPixmap theme_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/theme1.png")); QPixmap mark_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/open.png")); QPixmap close_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/close.png")); QPixmap browser_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/browser.png")); QPixmap login_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/login.png")); QPixmap speaker_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/speaker.png")); QPixmap download_Button(QString::fromUtf8("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/download.png")); //设置表格背景、初始化 titlePalette.setColor(QPalette::Base, Qt::gray); ui->storeView->setPalette(titlePalette); ui->favoriteView->setPalette(titlePalette); ui->storeView->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); ui->storeView->hide(); ui->webView->hide(); ui->favoriteView->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); ui->favoriteView->hide(); ui->browserButton->hide(); ui->storeButton->hide(); ui->favoriteButton->hide(); //设置界面按钮的图片以及图标大小 fit_Button = small_Button.scaled(163,163).scaled(21, 21, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->smallButton->setIcon(QIcon(fit_Button)); ui->smallButton->setIconSize(QSize(21, 21)); ui->smallButton->setFlat(true); ui->smallButton->setStyleSheet("border: 0px"); ui->smallButton->setToolTip(QString("最小化窗口")); fit_Button = mode_Button.scaled(163,163).scaled(31, 31, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->modeButton->setIcon(QIcon(fit_Button)); ui->modeButton->setIconSize(QSize(31, 31)); ui->modeButton->setFlat(true); ui->modeButton->setStyleSheet("border: 0px"); ui->modeButton->setToolTip(QString("顺序播放")); fit_Button = play_Button.scaled(163,163).scaled(41, 41, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->playButton->setIcon(QIcon(fit_Button)); ui->playButton->setIconSize(QSize(41, 41)); ui->playButton->setFlat(true); ui->playButton->setStyleSheet("border: 0px"); ui->playButton->setToolTip(QString("播放/暂停")); fit_Button = last_Button.scaled(163,163).scaled(41, 41, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->lastButton->setIcon(QIcon(fit_Button)); ui->lastButton->setIconSize(QSize(41, 41)); ui->lastButton->setFlat(true); ui->lastButton->setStyleSheet("border: 0px"); ui->lastButton->setToolTip(QString("上一曲Ctrl+L")); fit_Button = next_Button.scaled(163,163).scaled(41, 41, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->nextButton->setIcon(QIcon(fit_Button)); ui->nextButton->setIconSize(QSize(41, 41)); ui->nextButton->setFlat(true); ui->nextButton->setStyleSheet("border: 0px"); ui->nextButton->setToolTip(QString("下一曲Ctrl+R")); fit_Button = add_Button.scaled(163,163).scaled(36, 36, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->addButton->setIcon(QIcon(fit_Button)); ui->addButton->setIconSize(QSize(36, 36)); ui->addButton->setFlat(true); ui->addButton->setStyleSheet("border: 0px"); ui->addButton->setToolTip(QString("add songs")); fit_Button = theme_Button.scaled(163,163).scaled(36, 36, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->setApearenceButton->setIcon(QIcon(fit_Button)); ui->setApearenceButton->setIconSize(QSize(36, 36)); ui->setApearenceButton->setFlat(true); ui->setApearenceButton->setStyleSheet("border: 0px"); ui->setApearenceButton->setToolTip(QString("更换主题")); fit_Button = mark_Button.scaled(163,163).scaled(27, 27, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->markButton->setIcon(QIcon(fit_Button)); ui->markButton->setIconSize(QSize(27, 27)); ui->markButton->setFlat(true); ui->markButton->setStyleSheet("border: 0px"); ui->markButton->setToolTip(QString("move to favorite")); fit_Button = close_Button.scaled(163,163).scaled(29, 29, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->quitButton->setIcon(QIcon(fit_Button)); ui->quitButton->setIconSize(QSize(29, 29)); ui->quitButton->setFlat(true); ui->quitButton->setStyleSheet("border: 0px"); ui->quitButton->setToolTip(QString("close ")); fit_Button = browser_Button.scaled(163,163).scaled(34, 34, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->browserHideButton->setIcon(QIcon(fit_Button)); ui->browserHideButton->setIconSize(QSize(34, 34)); ui->browserHideButton->setFlat(true); ui->browserHideButton->setStyleSheet("border: 0px"); ui->browserHideButton->setToolTip(QString("浏览网页")); fit_Button = login_Button.scaled(163,163).scaled(39, 30, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->loginButton->setIcon(QIcon(fit_Button)); ui->loginButton->setIconSize(QSize(39, 30)); ui->loginButton->setFlat(true); ui->loginButton->setStyleSheet("border: 0px"); ui->loginButton->setToolTip(QString("登陆")); fit_Button = speaker_Button.scaled(163,163).scaled(35, 35, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ui->muteButton->setIcon(QIcon(fit_Button)); ui->muteButton->setIconSize(QSize(35, 35)); ui->muteButton->setFlat(true); ui->muteButton->setStyleSheet("border: 0px"); ui->muteButton->setToolTip(QString("静音")); fit_Button = download_Button.scaled(163,163).scaled(25,25,Qt::IgnoreAspectRatio,Qt::SmoothTransformation); ui->downloadButton->setIcon(QIcon(fit_Button)); ui->downloadButton->setIconSize(QSize(25,25)); ui->downloadButton->setFlat(true); ui->downloadButton->setStyleSheet("border:0px"); ui->downloadButton->setToolTip(QString(" 下载")); ui->lyricButton->setToolTip(QString("歌词")); titlePalette = ui->browserButton->palette(); titlePalette.setColor(QPalette::ButtonText, Qt::white); ui->browserButton->setToolTip(QString("网络")); ui->browserButton->setPalette(titlePalette); ui->browserButton->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); ui->storeButton->setToolTip(QString("mosic store")); ui->storeButton->setPalette(titlePalette); ui->storeButton->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); ui->favoriteButton->setToolTip(QString("我喜欢的歌曲")); ui->favoriteButton->setPalette(titlePalette); ui->favoriteButton->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); titlePalette = ui->musicTitle->palette(); titlePalette.setColor(QPalette::WindowText, Qt::white); ui->musicTitle->setPalette(titlePalette); ui->lyricButton->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); ui->volumeSlider->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); ui->volumeSlider->setTickPosition(QSlider::TicksRight); titlePalette = ui->label->palette(); titlePalette.setColor(QPalette::WindowText, Qt::white); ui->label->setPalette(titlePalette); titlePalette = ui->playStatusText->palette(); titlePalette.setColor(QPalette::WindowText, Qt::white); ui->playStatusText->setPalette(titlePalette); titlePalette = ui->listWidget->palette(); titlePalette.setColor(QPalette::Base, Qt::lightGray); ui->listWidget->setPalette(titlePalette); //StyleSheet字符串用来设置模版样式 ui->listWidget->setStyleSheet("background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0.368182 rgba(198,198,198,75))"); //设置主窗口 this->setWindowOpacity(0.9); this->setWindowFlags(Qt::FramelessWindowHint); //无边框窗口 this->setWindowTitle("Qt MusicPlayer"); this->setWindowIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/title.png")); themeChoise = "pure_zise.png"; themeToUse = "C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Backgroud/" + themeChoise; QPixmap pixmap(/*QString::fromUtf8*/themeToUse);//文件夹下面的图片 titlePalette = this->palette(); titlePalette.setBrush(backgroundRole(), QBrush(pixmap)); this->setPalette(titlePalette); //设置全局快捷键动作 search = new QAction( QString("搜索歌曲"),this); search->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_F)); search->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/search.png")); this->addAction(search); ui->searchEdit->hide(); this->connect(search, SIGNAL(triggered()), this, SLOT(songsSearch())); last_song = new QAction(ui->lastButton); last_song->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left)); ui->lastButton->addAction(last_song); ui->lastButton->connect(last_song, SIGNAL(triggered()), this, SLOT(lastSong())); next_song = new QAction(ui->nextButton); next_song->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Right)); ui->nextButton->addAction(next_song); ui->nextButton->connect(next_song, SIGNAL(triggered()), this, SLOT(nextSong())); pause_song = new QAction(ui->playButton); pause_song->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Space)); ui->playButton->addAction(pause_song); ui->playButton->connect(pause_song, SIGNAL(triggered()), this, SLOT(playEvent())); small_window = new QAction(this); small_window->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down)); this->addAction(small_window); this->connect(small_window, SIGNAL(triggered()), this, SLOT(showMinimized())); full_window = new QAction(ui->browserHideButton); full_window->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up)); ui->browserHideButton->addAction(full_window); ui->browserHideButton->connect(full_window, SIGNAL(triggered()), this, SLOT(browserSet())); showMini = new QAction( QString("最小化"),this); showMini->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/mini.png")); connect(showMini, SIGNAL(triggered()), this, SLOT(showMinimized())); quit = new QAction(QString("close"), this); quit->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/close.png")); connect(quit, SIGNAL(triggered()), this, SLOT(warning())); login = new QAction(QString("登陆"), this); login->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/login.png")); connect(login, SIGNAL(triggered()), this, SLOT(user_login())); clearList = new QAction(QString("清空列表"), this); clearList->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/clear.png")); connect(clearList, SIGNAL(triggered()), this, SLOT(clear_List())); download = new QAction(QString("下载歌曲"), this); download->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/download.png")); connect(download,SIGNAL(triggered()), this, SLOT(download_File())); information = new QAction(QString("关于"), this); information->setIcon(QIcon("C:/Qt/Qt5.4.1/projects/QT_MusicPlayer/Images/Icon/information.png")); connect(information, SIGNAL(triggered()), this, SLOT(about())); }