Enregistrer un flux audio venant d'une URL dans un tampon/fichier
>Bonjour à tous,
Je m'initie à Qt et souhaite pouvoir enregistrer une partie des émissions radio dans un buffer ou un fichier.
Pour le moment je lance le stream grâce à une Url sur QMediaPlayer (http://direct.francebleu.fr/live/fb1071-lofi.mp3 , par exemple).
et je l'enregistre via un QAudioRecorder... Le hic est :
Que l'audio enregistré passe par mes hauts parleur puis est enregistré par le micro donc qualité pas top et polluée par les sons ambiants.
Le : recorder->setOutputLocation(QUrl::fromLocalFile("D:\\Mes_Projets_Qt_Creator\\Son\\Son\\fichierAudioTampon\\SonTamponAutre")); fait naturellement un fichier or je cherche à rester sur la ram pour le moment.
J'ai essayer de capter le stream par QDataStream pour la branché sur un QIODevice, j'ai aussi tenté une Qprobe avec un QAudioBuffer et aussi... de changer le QAudioInput du recorder pour avoir la sortie de la carte son.
Bref je suis paumé, est-ce que quelqu'un saurait comment s'y prendre ?
Résolu grâce à eyllanesc sur Stackoverflow (pour ceux que ça peut aider)
Pour ceux que ça intéresse ou qui auraient la même problématique la solution m'a été donné par eyllanesc sur Stack Overflow :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
#include <QCoreApplication>
#include <QDataStream>
#include <QDir>
#include <QFile>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkAccessManager nam;
QNetworkRequest request(QUrl("http://rfm-live-mp3-64.scdn.arkena.com/rfm.mp3"));
QString downloadDir = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
QFile file(QDir(downloadDir).absoluteFilePath("test.mp3"));
QDataStream ds(&file);
if(!file.open(QFile::WriteOnly))
return -1;
QNetworkReply *reply = nam.get(request);
QObject::connect(reply, &QNetworkReply::downloadProgress, [reply, &ds](qint64 bytesReceived, qint64 bytesTotal){
ds << reply->readAll();
qDebug()<<bytesReceived<<bytesTotal;
});
qDebug()<<reply;
return a.exec();
} |