TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicsongringtonemakerwidget.cpp
Go to the documentation of this file.
2 #include "ui_musicsongringtonemakerwidget.h"
3 #include "musiccutsliderwidget.h"
4 #include "musiccoremplayer.h"
5 #include "musictoastlabel.h"
6 #include "musicsongmeta.h"
7 #include "musicfileutils.h"
8 #include "ttktime.h"
9 
10 #include <QProcess>
11 
13  : MusicAbstractMoveDialog(parent),
14  m_ui(new Ui::MusicSongRingtoneMaker),
15  m_playRingtone(false),
16  m_startPos(0),
17  m_stopPos(TTK_HIGH_LEVEL)
18 {
19  m_ui->setupUi(this);
20  setFixedSize(size());
21  setBackgroundLabel(m_ui->background);
22 
23  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
24  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
25  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
26  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
27  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
28 
29  m_ui->addSongButton->setStyleSheet(TTK::UI::PushButtonStyle04);
30  m_ui->playSongButton->setStyleSheet(TTK::UI::PushButtonStyle04);
31  m_ui->playRingButton->setStyleSheet(TTK::UI::PushButtonStyle04);
32  m_ui->saveSongButton->setStyleSheet(TTK::UI::PushButtonStyle04);
33 
38 #ifdef Q_OS_UNIX
39  m_ui->addSongButton->setFocusPolicy(Qt::NoFocus);
40  m_ui->playSongButton->setFocusPolicy(Qt::NoFocus);
41  m_ui->playRingButton->setFocusPolicy(Qt::NoFocus);
42  m_ui->saveSongButton->setFocusPolicy(Qt::NoFocus);
43 #endif
44  m_player = new MusicCoreMPlayer(this);
45 
46  initialize();
47 
48  m_ui->playSongButton->setEnabled(false);
49  m_ui->playRingButton->setEnabled(false);
50  m_ui->saveSongButton->setEnabled(false);
51  m_ui->cutSliderWidget->resizeGeometry(440, 55);
52 
53  connect(m_ui->addSongButton, SIGNAL(clicked()), SLOT(initInputPath()));
54  connect(m_ui->playSongButton, SIGNAL(clicked()), SLOT(playInputSong()));
55  connect(m_ui->playRingButton, SIGNAL(clicked()), SLOT(playRingtone()));
56  connect(m_ui->saveSongButton, SIGNAL(clicked()), SLOT(initOutputPath()));
57  connect(m_ui->cutSliderWidget, SIGNAL(posChanged(qint64,qint64)), SLOT(posChanged(qint64,qint64)));
58  connect(m_ui->cutSliderWidget, SIGNAL(buttonReleaseChanged(qint64)), SLOT(buttonReleaseChanged(qint64)));
59  connect(m_player, SIGNAL(positionChanged(qint64)), SLOT(positionChanged(qint64)));
60  connect(m_player, SIGNAL(durationChanged(qint64)), SLOT(durationChanged(qint64)));
61 }
62 
64 {
65  delete m_player;
66  delete m_ui;
67 }
68 
70 {
71  QStringList supportedFormat;
72  supportedFormat << "mp3" << "wav" << "wma" << "ogg" << "flac" << "ac3" << "aac";
73 
74  QString filter = "Audio Files (";
75  for(int i = 0; i < supportedFormat.count(); ++i)
76  {
77  filter += QString("*.%1 ").arg(supportedFormat[i]);
78  }
79  filter = filter.trimmed() + ")";
80 
81  const QString &path = TTK::File::getOpenFileName(this, filter);
82  if(path.isEmpty())
83  {
84  return;
85  }
86 
87  m_inputFilePath = path;
88  MusicSongMeta meta;
89  if(meta.read(m_inputFilePath))
90  {
91  QString name = QFileInfo(m_inputFilePath).fileName();
92  m_ui->songLabelValue->setToolTip(name);
93  name = TTK::Widget::elidedText(font(), name, Qt::ElideRight, 220);
94  m_ui->songLabelValue->setText(tr("SongName: %1 (%2, %3, %4)").arg(name, meta.duration(), meta.sampleRate(), meta.bitrate()));
95  }
96  else
97  {
98  m_ui->songLabelValue->setText(tr("Open file error"));
99  return;
100  }
101 
102  m_ui->playSongButton->setEnabled(true);
103  m_ui->playRingButton->setEnabled(true);
104  m_ui->saveSongButton->setEnabled(true);
105 
107  playInputSong();
108 
109 }
110 
112 {
113  QString value = QString("Files (*.%1)").arg(m_ui->formatCombo->currentText().toLower());
114  value = TTK::File::getSaveFileName(this, value);
115  if(value.isEmpty())
116  {
117  return;
118  }
119 
121  "-i", m_inputFilePath, "-ss", QString::number(m_startPos),
122  "-t", QString::number(m_stopPos), "-acodec", "copy",
123  "-ab", m_ui->kbpsCombo->currentText() + "k",
124  "-ar", m_ui->hzCombo->currentText(),
125  "-ac", QString::number(m_ui->msCombo->currentIndex() + 1), value});
126 }
127 
129 {
130  m_playRingtone = false;
132  m_player->play();
133 }
134 
136 {
137  if(!m_player->isPlaying())
138  {
139  m_ui->playSongButton->setText(tr("Pause"));
140  }
141  m_playRingtone = true;
143 }
144 
146 {
147  m_ui->cutSliderWidget->setPosition(position);
148  if(m_playRingtone && m_stopPos < position)
149  {
150  m_player->play();
151  m_ui->playSongButton->setText(tr("Play"));
152  }
153 }
154 
156 {
157  m_ui->cutSliderWidget->setDuration(duration);
158 }
159 
160 void MusicSongRingtoneMaker::posChanged(qint64 start, qint64 end)
161 {
162  m_startPos = start;
163  m_stopPos = end;
164  m_ui->startTimeLabel->setText(tr("Begin: ") + TTKTime::toString(start * 1000, "mm:ss:zzz"));
165  m_ui->stopTimeLabel->setText(tr("End: ") + TTKTime::toString(end * 1000, "mm:ss:zzz"));
166  m_ui->ringLabelValue->setText(tr("Ring Info.\tCut Length: %1").arg(TTKTime::toString((end - start) * 1000, "mm:ss")));
167 }
168 
170 {
171  if(!m_player->isPlaying())
172  {
173  m_ui->playSongButton->setText(tr("Pause"));
174  }
175  m_player->setPosition(pos);
176 }
177 
179 {
180  if(!QFile::exists(MAKE_TRANSFORM_PATH_FULL))
181  {
182  MusicToastLabel::popup(tr("Lack of plugin file"));
183  return -1;
184  }
185 
187 }
188 
190 {
191  m_ui->formatCombo->addItems({"MP3", "WAV"});
192  m_ui->kbpsCombo->addItems({"32", "48", "56", "64", "80", "96", "112", "128", "192", "224", "256", "320"});
193  m_ui->hzCombo->addItems({"8000", "12050", "16000", "22050", "24000", "32000", "44100", "48000"});
194  m_ui->msCombo->addItems({"Mono", "Stereo"});
195 
196  m_ui->kbpsCombo->setCurrentIndex(7);
197  m_ui->hzCombo->setCurrentIndex(6);
198 }
199 
201 {
202  if(!m_player->isPlaying())
203  {
204  m_ui->playSongButton->setText(tr("Pause"));
205  }
206  else
207  {
208  m_ui->playSongButton->setText(tr("Play"));
209  }
210 }
void setBackgroundLabel(QLabel *label)
MusicSongRingtoneMaker(QWidget *parent=nullptr)
bool read(const QString &url)
bool isPlaying() const
QString sampleRate() noexcept
voidpf void uLong size
Definition: ioapi.h:136
TTK_MODULE_EXPORT QString getOpenFileName(QWidget *parent, const QString &filter="Image Files (*.png *.bmp *.jpg)")
TTK_MODULE_EXPORT bool execute(const QString &path)
The class of the song ringtone maker widget.
QString bitrate() noexcept
static void popup(const QString &text)
TTK_MODULE_EXPORT QString getSaveFileName(QWidget *parent, const QString &filter="Image Files (*.png *.bmp *.jpg)")
const char * name
Definition: http_parser.c:458
static const QString PushButtonStyle04
#define MAKE_TRANSFORM_PATH_FULL
Definition: musicobject.h:148
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
void posChanged(qint64 start, qint64 end)
The class of the moving dialog base.
The class of the mplayer core.
TTK_MODULE_EXPORT void generateComboBoxFormat(QComboBox *widget, const QString &style={})
#define TTK_HIGH_LEVEL
Definition: ttkglobal.h:255
QString duration() noexcept
static const QString ToolButtonStyle04
Ui::MusicSongRingtoneMaker * m_ui
The class of the music song meta.
Definition: musicsongmeta.h:30
void setMedia(Module type, const QString &data, int winId=-1)
static QString toString(qint64 time, const QString &format) noexcept
Definition: ttktime.cpp:72
void setPosition(qint64 pos)