Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/41: Рейтинг темы: голосов - 41, средняя оценка - 4.95
 Аватар для Ivan Fantom
5 / 5 / 2
Регистрация: 12.10.2011
Сообщений: 75

Чтение метаданных из аудиофайла

23.03.2012, 13:24. Показов 9149. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в считывании метаданных из аудиофайла. Почему-то в списоки строк ничего не записывается; как были пустыми, так и остались пустыми. Подскажите как тут быть? Может есть альтернатива или я чего-то не знаю?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void APlayer::slotLoad()
 {
     QStringList list = QFileDialog::getOpenFileNames(this,"Load","F:/Music/Main/Standart","*.*");
     if(!list.isEmpty())
     {
        for(int i=0;i<list.size();i++)
        {
            m_pmedia->setCurrentSource(Phonon::MediaSource(list[i]));
            QStringList artist=m_pmedia->metaData(Phonon::ArtistMetaData);
            QStringList album=m_pmedia->metaData(Phonon::AlbumMetaData);
            QStringList track=m_pmedia->metaData(Phonon::TitleMetaData);
            QStringList desc=m_pmedia->metaData(Phonon::DescriptionMetaData);
            QStringList trn=m_pmedia->metaData(Phonon::TracknumberMetaData);
            QStringList genre=m_pmedia->metaData(Phonon::GenreMetaData);
            QStringList date=m_pmedia->metaData(Phonon::DateMetaData);
        }
    }
 }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2012, 13:24
Ответы с готовыми решениями:

Получение метаданных аудиофайла в Qt5 без использования QMediaPlayer?
Здравствуйте. Получить метаданные проигрываемого в данный момент файла легко: player = new QMediaPlayer(); playlist = new...

Чтение метаданных аудифайлов
Есть ли какие-нибудь бесплатные библиотеки наподобие BASS, позволяющие читать и записывать метаданные в аудиофайлы. Для C# или C++.

Автоматическое чтение метаданных аудио файла при загрузке его на сайт
Здравствуйте, помогите решит проблему: Автоматическое чтение метаданных аудио файла при загрузке его на сайт, как у zk.fm и прочее... ...

45
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
26.03.2012, 22:13
Студворк — интернет-сервис помощи студентам
так библиотека уже собралась у тебя подключай ее к проекту и используй
0
 Аватар для Ivan Fantom
5 / 5 / 2
Регистрация: 12.10.2011
Сообщений: 75
27.03.2012, 20:23  [ТС]
Тогда еще один вопрос: как подключить ее к проекту?

Добавлено через 21 секунду
Проекту Qt
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 239
28.06.2016, 14:21
не буду создавать новую тему - вопрос по сути тот же - "как подключить"?

начнём с того, что в интернете есть две инструкции по сборке, приводящие к разному результату
первая - она же в файле INSTALL в папке taglib - результатом выполнения написанных там команд является такой набор файлов:
Кликните здесь для просмотра всего текста

вторая инструкция написана здесь, результаты выполнения описанных там действий:
Кликните здесь для просмотра всего текста


в общем и вопрос - какой из двух вариантов правильный (и почему) и как что потом куда положить и подключить?
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 239
29.06.2016, 14:35
я справился, а, поскольку сам перелистал гору тем с вопросами без ответов опишу свой путь к успеху - вдруг кому ещё пригодится

итак:
цель задачи - программа, которая автоматически находит всех исполнителей в указанной папке
для работы с тегами выбрана библиотека taglib
система - Windows 7 x64
компилятор - MinGW 4.9.1

первым делом идём сюда и качаем исходники taglib - я качал версию 1.10
внутри архива будет папка taglib-1.10 и ещё один файл
распаковываем содержимое папки taglib-1.10, в моём случае - D:\qtprojects\taglib
находим там файл INSTALL, открываем его текстовым редактором или смотрим его здесь и делаем то, что там написано:
Кликните здесь для просмотра всего текста

в инструкции написано, что нужен CMake, качаем его здесь
во время установки нужно добавить CMake в системную переменную PATH:
Кликните здесь для просмотра всего текста

также нужно, чтобы там был прописан компилятор, чтобы проверить это жмём правой кнопкой мыши на "мой компьютер" -> свойства -> дополнительные параметры системы -> переменные среды -> системные переменные -> Path -> изменить
в моём случае там написано:
C:\Qt\Qt5.4.1\Tools\mingw491_32\bin;C:\P rogram Files\CMake\bin
в папке Qt есть ещё C:\Qt\Qt5.4.1\5.4\mingw491_32\bin - это не то!!!! нужен вариант, написанный строкой выше
далее запускаем CMake-gui, в строки "Where is the source code" и "Where to build the binaries" прописываем или выбираем адрес папки, куда распакован архив taglib, в моём случае - D:/qtprojects/taglib
ставим галочку Advanced
в переменную CMAKE_BUILD_TYPE пишем Release
в переменную CMAKE_INSTALL_PREFIX - куда собирать библиотеку, в моём случае C:\taglib

жмём Configure
задаём настройки компилятора
если в окне переменных написано, что CMAKE_C_COMPILER "not found", значит в переменной path неправильно задан путь к нему
также при этом поменяются пути к папкам bin, include, lib в соответствии с указанным выше префиксом
остальные переменные можно поменять по своему желанию, после изменений надо жать Configure, чтобы они применились
жмём Generate
запускаем командную строку (пуск -> выполнить -> cmd)
переходим в папку taglib и устанавливаем его, в моём случае:
d:
cd qtprojects/taglib
mingw32-make
mingw32-make install

после этого у меня появилась такая структура файлов:
Кликните здесь для просмотра всего текста

берём файлы libtag.dll, libtag.dll.a и папку taglib (из папки include) и копируем в папку с программой, в моём случае: D:\qtproject\myprojectfolder
добавляем библиотеку в проект:
правой кнопкой на проекте -> добавить библиотеку -> внешняя -> далее -> файл библиотеки обзор -> libtag.dll.a
снимаем ненужные галочки (я снял все, кроме "windows")
компоновка - динамическая
после этого в файле myproject.pro появятся следующие строки:
C++ (Qt)
1
2
3
4
win32: LIBS += -L$$PWD/ -llibtag
 
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/
всё, теперь добавляем необходимые заголовочные файлы и используем:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "taglib/fileref.h"
#include "taglib/taglib.h"
#include "taglib/tag.h"
 
QLineEdit start_folder;
QStringList artists;
 
void myproject::search_artists()
{
    QString str = start_folder->text();
    artists.clear();
    searching(str);
 
    QString name = qApp->applicationDirPath() + QDir::separator() + "artists.txt";
    QFile file(name); // создаем объект класса QFile
    if(file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) // открываем для записи и предварительно полностью обнуляем файл
    {
        QTextStream outStream(&file);
 
        for (int i = 0; i < artists.size(); i++)
            outStream << artists.at(i) << endl;
        file.close(); // записали и закрыли
    }
}
 
void myproject::searching(QString path)
{
    bool new_artist;
    // [url]https://www.cyberforum.ru/qt/thread644532.html[/url]
    // там есть пример и без рекурсии, но так как-то понятнее
 
    QDir currentFolder(path);
 
    currentFolder.setFilter(QDir::Dirs | QDir::Files);
    currentFolder.setSorting(QDir::Name);
 
    QFileInfoList folderitems(currentFolder.entryInfoList());
 
    foreach (QFileInfo i_file, folderitems)
    {
        QString i_filename(i_file.fileName());
        if (i_filename == "." || i_filename == ".." || i_filename.isEmpty())
            continue;
 
        if (i_file.isDir())
            searching(path + "/" + i_filename);
        else
        {
            file_counter++;
            QString full_filename = path + "/" + i_filename;
 
            TagLib::FileRef ref(QFile::encodeName(full_filename).constData());
            if (!ref.isNull() && ref.tag() != NULL)
            {
                QString data = QString("%1").arg(ref.tag()->artist().toCString());
                new_artist = true;
                for (int i = 0; i < artists.size(); i++)
                    if (data == artists.at(i))
                        new_artist = false;
                if (new_artist)
                    artists.push_back(data);
            }
        }
    }
}
только я пока не разобрался - как быть с русскими, чешскими, шведскими и другими нестандартными буквами, но это уже другой вопрос
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 239
29.06.2016, 16:29
почему-то не загрузились изображения, а отредактировать свой пост нельзя
Кликните здесь для просмотра всего текста

это про CMake

А это про структуру, внутри папки taglib


кстати, 52-я строка кода - неправильная - так будут пропускаться папки с нелатиницей
а вот так не будут:
C++ (Qt)
1
            TagLib::FileRef ref(full_filename.toStdWString().c_str());
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.10.2017, 16:35
Кроме того для релиза и дебага могут быть разные библиотеки, обычно для дебага в конце добавляется в название d
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2017, 16:35

Ошибка Метаданных "не найден идентификатор в справочнике Идентификатор объекта метаданных"
В общем ситуация следующая, только начал разбираться с 1С, скачал с оф сайта учебную версию для программиста. Мне дали задание на...

Обновление метаданных
Привет. Я мигрирую на MS SQL с Pervasive-а. Пока неясно как обновлять метаданные, если что-то меняется: добавляются поля, меняется тип...

Передача Аудиофайла
Здравствуйте! Думаю я не первый кто задает данный вопрос, но мне интересно, какими средствами можно передавать аудио файл с сервера...

Инвертирование аудиофайла
Верно, так же?

Длительность аудиофайла
В принципе в этом-то и весь вопрос. Возможно ли средствами стандартной библиотеки С++ вытащить длительность, скажем, mp3 файла? Ну, или,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru