Russian Qt Forum
Ноябрь 22, 2024, 17:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как в qt 4 прочитать метаданные аудио файлов  (Прочитано 9629 раз)
HolyMacaroni
Гость
« : Май 31, 2010, 01:51 »

здравствуйте, как с помощью qt 4 прочитать метаданные  аудио файлов, название, альбом, жанр, и все такое.
http://ru.wikipedia.org/wiki/ID3v2#ID3v2
нынешний формат ID3v2
www.id3.org
английский к сожалению не знаю.

« Последнее редактирование: Май 31, 2010, 02:22 от HolyMacaroni » Записан
HolyMacaroni
Гость
« Ответ #1 : Июнь 03, 2010, 01:44 »

не знаю в чем ошибка, программа не возвращает теги ogg, но проигрывает трек, появляется просто пустое окно.
теги в файле присутствуют.

Код:
#include <QApplication>
#include <phonon>
#include <QtGui>

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication        app(argc, argv);
    app.setApplicationName("SimplePlayer");
    Phonon::MediaObject media;
    Phonon::AudioOutput ao(Phonon::MusicCategory);

    Phonon::createPath(&media, &ao);

    QObject::connect(&media, SIGNAL(finished()), &app, SLOT(quit()));
    media.setCurrentSource(Phonon::MediaSource("music/Morcheeba.ogg"));

    QStringList MetaData = media.metaData("ARTIST");
               MetaData = media.metaData("ALBUM");
               MetaData = media.metaData("TITLE");
               MetaData = media.metaData("DATE");


    QLabel lbl(MetaData.join(" "));
    lbl.show();

    media.play();


    return app.exec();
}

Записан
HolyMacaroni
Гость
« Ответ #2 : Июнь 03, 2010, 16:08 »

неужели ни кто не знает Непонимающий
Записан
ufna
Гость
« Ответ #3 : Июнь 03, 2010, 18:00 »

а может быть даты нет в этом файле? у тебя только она на лейбл ловится, остальнео все побоку идет, ты же лист не аппендишь.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Июнь 03, 2010, 18:40 »

Медиа инфо в винде считывается только после прихода сигнала (сначала медиа сорс буферизуется, потом с ним можно работать). Смотрите примеры.
Записан
HolyMacaroni
Гость
« Ответ #5 : Июнь 03, 2010, 20:59 »

а может быть даты нет в этом файле? у тебя только она на лейбл ловится, остальнео все побоку идет, ты же лист не аппендишь.
инфа в файле есть, изитегом туда ее сам заносил:).

Медиа инфо в винде считывается только после прихода сигнала (сначала медиа сорс буферизуется, потом с ним можно работать). Смотрите примеры.
где смотреть примеры Непонимающий у меня либо гугл сломался или одно из двух, уже второй день ищу или третий.
« Последнее редактирование: Июнь 03, 2010, 21:12 от HolyMacaroni » Записан
HolyMacaroni
Гость
« Ответ #6 : Июнь 04, 2010, 02:05 »

все, сделал.
Код:
#include <QApplication>
#include <phonon>
#include <QtGui>
#include <QtCore/QtDebug>
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication        app(argc, argv);
    app.setApplicationName("SimplePlayer");

    Phonon::MediaObject media;
    Phonon::AudioOutput ao(Phonon::MusicCategory);

    Phonon::createPath(&media, &ao);

    QObject::connect(&media, SIGNAL(finished()), &app, SLOT(quit()));
    QObject::connect(&media, SIGNAL(metaDataChanged()), &app, SLOT(quit()));
    media.setCurrentSource(Phonon::MediaSource(app.arguments()[1]));
    app.exec();
    QStringList MetaData = media.metaData(Phonon::ArtistMetaData);
        MetaData << media.metaData(Phonon::AlbumMetaData);
        MetaData << media.metaData(Phonon::TitleMetaData);
        MetaData << media.metaData(Phonon::DateMetaData);

    qDebug() << MetaData;

    media.play();
return app.exec();
}
Записан
HolyMacaroni
Гость
« Ответ #7 : Июнь 21, 2010, 10:02 »

Снова здравствуйте, теперь новый вопрос Улыбающийся, как синхронизировать асинхронный метод 
 media.setCurrentSource(Phonon::MediaSource(app.arguments()[1]));
с остальным кодом, так как он сразу же возвращает управление после вызова, а данные можно читать только после сигнала metaDataChanged(). Мне необходимо в цикле считывать метаданные с разных источников.
Записан
crossly
Гость
« Ответ #8 : Июнь 21, 2010, 10:27 »

можно с помощью QEventLoop смотри доки....
Записан
HolyMacaroni
Гость
« Ответ #9 : Июнь 21, 2010, 13:19 »

спасибо получилось Улыбающийся
использовал QEventLoop::exec()/quit()
« Последнее редактирование: Июнь 21, 2010, 14:38 от HolyMacaroni » Записан
Вячеслав Андреевеч
Гость
« Ответ #10 : Ноябрь 19, 2013, 18:24 »

Привет, ребят!

Вот такая вот проблемка есть...

почему альбом и жанр не считываются? они почему-то пусты, на выходе получается строка
Metal Heart/5:24/ACCEPT/null/null/

Посмотрите скрин во вложении к посту, ведь этот альбом и жанр должны быть? Почему же ничего не считывается?
Если это не тот альбом и жанр, как мне вытащить именно эти строки?

Код:
    if (song.metaData("TITLE").isEmpty()) *str+="null/"; else *str+=song.metaData("TITLE").at(0)+"/";  //название
    *str+= QString::number(min)+":"+ QString::number(sec)+"/";  //длительность дорожки
    if (song.metaData("ARTIST").isEmpty()) *str+="null/"; else *str+=song.metaData("ARTIST").at(0)+"/"; // исполнитель
    if (song.metaData("ALBUM").isEmpty()) *str+="null/"; else *str+=song.metaData("ALBUM").at(0)+"/";   //альбом
    if (song.metaData("GENRE").isEmpty()) *str+="null/"; else *str+=song.metaData("GENRE").at(0)+"/";   //жанр
« Последнее редактирование: Ноябрь 19, 2013, 18:39 от Вячеслав Андреевеч » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.