This commit is contained in:
2020-05-05 22:53:51 +07:00
commit aa59fb43ef
7 changed files with 413 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.pro.*
*.mp3

5
README.md Normal file
View File

@@ -0,0 +1,5 @@
# Запись радио-потока
### Использовалось:
* Qt (5.11.1 и выше)
* Google

11
main.cpp Normal file
View File

@@ -0,0 +1,11 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

63
mainwindow.cpp Normal file
View File

@@ -0,0 +1,63 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
my_proc = new QProcess();
connect(my_proc, SIGNAL(started()), this, SLOT(slotStartedStdout()));
connect(my_proc, SIGNAL(finished(int)), this, SLOT(slotFinishedStdout(int)));
// box = new QMessageBox();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString directory = QFileDialog::getSaveFileName(this, "Сохранить как...", "D:", "MP3 (*.mp3)");
ui->directory->setText(directory);
QString
link = " -i " + ui->link->text().toUtf8(), // http://novosibirsk.radiokp32.mp3.streamr.ru, http://air.radiorecord.ru:805/rr_320, etc...
time = " -t " + secondToTime(ui->time->text().toInt()), // 60 second, 120 second, etc...
bitrate = " -ab " + ui->bitrate->currentText(), // 128k, 192k, 256k, 320k, etc...
discretisation = " -ar " + ui->discretisation->currentText(),
strCommand = "ffmpeg\\bin\\ffmpeg.exe " + link + " -acodec libmp3lame " + bitrate + discretisation + time + " " + directory;
// box->setText(strCommand); // Debug
// box->exec(); // Debug
my_proc->start(strCommand);
}
void MainWindow::slotStartedStdout() {
ui->textEdit->append("Идет запись!");
}
void MainWindow::slotFinishedStdout(int code) {
if(code == 0) {
ui->textEdit->append("Запись завершена!\n");
}
else if(code == 1) {
ui->textEdit->append("Ошибка!\n");
QString error = my_proc->readAllStandardError();
ui->textEdit->append(error);
}
}
QString MainWindow::secondToTime(int i_time) {
QString time;
if(i_time < 60) {
time = "00:00:" + QString::number(i_time);
}
else {
int minute = i_time / 60, hour = minute / 60;
time = QString::number(hour) + ":" +
QString::number(minute - 60*hour) + ":" +
QString::number(i_time - 60*minute);
}
return time;
}

35
mainwindow.h Normal file
View File

@@ -0,0 +1,35 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QProcess>
#include <QFileDialog>
//#include <QMessageBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QString secondToTime(int);
private slots:
void on_pushButton_clicked();
void slotStartedStdout();
void slotFinishedStdout(int);
private:
Ui::MainWindow *ui;
QProcess *my_proc;
// QMessageBox *box;
};
#endif // MAINWINDOW_H

266
mainwindow.ui Normal file
View File

@@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>560</width>
<height>250</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>560</width>
<height>250</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>560</width>
<height>250</height>
</size>
</property>
<property name="windowTitle">
<string>Запись онлайн-радио</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>10</x>
<y>0</y>
<width>241</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>18</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Запись онлайн-радио</string>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>400</x>
<y>40</y>
<width>151</width>
<height>141</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>220</x>
<y>190</y>
<width>161</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Запись</string>
</property>
</widget>
<widget class="QLineEdit" name="directory">
<property name="geometry">
<rect>
<x>140</x>
<y>160</y>
<width>151</width>
<height>20</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>10</x>
<y>160</y>
<width>101</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Путь сохранения:</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>10</x>
<y>70</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Время записи:</string>
</property>
</widget>
<widget class="QLineEdit" name="time">
<property name="geometry">
<rect>
<x>140</x>
<y>70</y>
<width>151</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>400</x>
<y>10</y>
<width>151</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Лог действий</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>10</x>
<y>40</y>
<width>121</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Ссылка на трансляцию:</string>
</property>
</widget>
<widget class="QLineEdit" name="link">
<property name="geometry">
<rect>
<x>140</x>
<y>40</y>
<width>241</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>10</x>
<y>100</y>
<width>61</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Битрейт:</string>
</property>
</widget>
<widget class="QComboBox" name="bitrate">
<property name="geometry">
<rect>
<x>140</x>
<y>100</y>
<width>151</width>
<height>22</height>
</rect>
</property>
<item>
<property name="text">
<string>128k</string>
</property>
</item>
<item>
<property name="text">
<string>192k</string>
</property>
</item>
<item>
<property name="text">
<string>256k</string>
</property>
</item>
<item>
<property name="text">
<string>320k</string>
</property>
</item>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>10</x>
<y>130</y>
<width>131</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Частота дискретизации:</string>
</property>
</widget>
<widget class="QComboBox" name="discretisation">
<property name="geometry">
<rect>
<x>140</x>
<y>130</y>
<width>151</width>
<height>22</height>
</rect>
</property>
<item>
<property name="text">
<string>44100</string>
</property>
</item>
<item>
<property name="text">
<string>48000</string>
</property>
</item>
<item>
<property name="text">
<string>96000</string>
</property>
</item>
<item>
<property name="text">
<string>192000</string>
</property>
</item>
</widget>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

31
radio1.pro Normal file
View File

@@ -0,0 +1,31 @@
#-------------------------------------------------
#
# Project created by QtCreator 2017-11-23T09:07:29
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = radio1
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui