Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt 4.5.2] Phonon::MediaObject::metaData(), инфо о треке 
:(
    Опции темы
anatox91
Дата 6.8.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Всем привет. Есть простенький музыкальный плеер, написанный  с использованием Qt 4.5.2 и Phonon. Есть также функция которая отображает информацию о текущем треке (большей частью скопированная из примера /demos/mediaplayer). Однако что в самом примере /demos/mediaplayer, что в моей программе когда я открываю файл информация отображается китайскими каракулями, тем более что тот же AIMP2(муз. плеер под windows) спокойно показывает информацию об этих же треках. Сам код функции такой:
Код

void updateInfo() {
    int maxLength = 30;
    QMap<QString, QString> metaData = mediaObject->metaData();

    QString trackArtist = metaData.value("ARTIST");
    if(trackArtist.length() > maxLength)
        trackArtist = trackArtist.left(maxLength) + "...";

    QString trackTitle = metaData.value("TITLE");
    int trackBitrate = metaData.value("BITRATE").toInt();

    QString filename;
    filename = mediaObject->currentSource().fileName();
    filename = filename.right(filename.length() - filename.lastIndexOf('/') - 1);
    if(filename.length() > maxLength)
        filename = filename.left(maxLength) + "...";

    QString title;
    if(!trackTitle.isEmpty()) {
        if(trackTitle.length() > maxLength)
            trackTitle = trackTitle.left(maxLength) + "...";
        title = "Title: " + trackTitle + "<br>";
    } else if(!filename.isEmpty()) {
        if(filename.length() > maxLength)
            filename = filename.left(maxLength) + "...";
        title = filename;
        title.prepend("File: ");
    }

    QString artist;
    if(!trackArtist.isEmpty())
        artist = "Artist: " + trackArtist;

    QString bitrate;
    if(trackBitrate != 0)
        bitrate = "<br>Bitrate: " + QString::number(trackBitrate/1000) + " kbps";

    infoLabel->setText(title + artist + bitrate);
}


Пример того что отображается в аттаче.

Кто-нибудь знает как можно это исправить?
Заранее спасибо

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  error.jpg 23,51 Kb


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
bsa
Дата 6.8.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Под Windows получение тегов идет через:
Код
            ComPointer<IAMMediaContent> mediaContent(m_demux, IID_IAMMediaContent);
            if (mediaContent) {
                //let's get the meta data
                BSTR str;
                HRESULT hr = mediaContent->get_AuthorName(&str);
                if (SUCCEEDED(hr)) {
                    ret.insert(QLatin1String("ARTIST"), QString::fromUtf16((const unsigned short*)str));
                    SysFreeString(str);
                }
                ...
            }
Может это проблема кодеков... Попробуй файлы типа ogg.
PM   Вверх
anatox91
Дата 6.8.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Цитата

Под Windows получение тегов идет через:
Код
            ComPointer<IAMMediaContent> mediaContent(m_demux, IID_IAMMediaContent);
            if (mediaContent) {
                //let's get the meta data
                BSTR str;
                HRESULT hr = mediaContent->get_AuthorName(&str);
                if (SUCCEEDED(hr)) {
                    ret.insert(QLatin1String("ARTIST"), QString::fromUtf16((const unsigned short*)str));
                    SysFreeString(str);
                }
                ...
            }
Может это проблема кодеков... Попробуй файлы типа ogg.

а что за переменная m_demux и ret? Можно увидеть откуда взят этот код? 
И есть ли все-таки какое-нибудь кроссплатформенное решение? 

P.S. Вообще чем дольше знакомлюсь с Phonon'ом тем больше он разочаровывает... Довольно скудные возможности он пока что предоставляет, к сожалению


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
just_geek
Дата 6.8.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Это я так понимаю кусок кода из реализации phonon ds9 backend. Вообще попробуй побаловатся с кодировкой.

Цитата

P.S. Вообще чем дольше знакомлюсь с Phonon'ом тем больше он разочаровывает... Довольно скудные возможности он пока что предоставляет, к сожалению


Ну в 4.6 будет новый модуль Qt Multimedia smile) Audio Input/Output уже умеет. А плотнее пока не смотрел.
PM MAIL   Вверх
anatox91
Дата 6.8.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Цитата(just_geek @  6.8.2009,  17:19 Найти цитируемый пост)
Ну в 4.6 будет новый модуль Qt Multimedia ) Audio Input/Output уже умеет. А плотнее пока не смотрел.

а можно ссылочку, почитать об этом? )


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Любитель
Дата 6.8.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Теги в файле в какой кодировке? Попробуй что-то такое (варианты):
Код

QTextCodec::setCodecForLocale(QTextCodec::codecForName("CP 1251"));
QString trackTitle = metaData.value("TITLE");
char* data = static_cast<char*>(trackTitle.utf16());

QString s1 = QString::fromUtf8(data);
QString s2 = QString::fromLocal8Bit(data);



--------------------
PM MAIL ICQ Skype   Вверх
just_geek
Дата 6.8.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



anatox91, 
пока толком нигде. Есть в git'e

Ну да и тут есть кой-чего
http://doc.qtsoftware.com/4.6-snapshot/qaudiooutput.html
http://doc.qtsoftware.com/4.6-snapshot/qaudioinput.html
http://doc.qtsoftware.com/4.6-snapshot/qaudioformat.html
http://doc.qtsoftware.com/4.6-snapshot/qaudiodeviceinfo.html
http://doc.qtsoftware.com/4.6-snapshot/qaudiodeviceid.html

для самого модуля пока документации нету. Плюс там же в git'e есть пример использования. Пока 4.6 не собирал, ничего сказать по этому поводу не могу smile

Это сообщение отредактировал(а) just_geek - 6.8.2009, 20:59
PM MAIL   Вверх
anatox91
Дата 7.8.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Цитата

Теги в файле в какой кодировке? Попробуй что-то такое (варианты):
Код

QTextCodec::setCodecForLocale(QTextCodec::codecForName("CP 1251"));
QString trackTitle = metaData.value("TITLE");
char* data = static_cast<char*>(trackTitle.utf16());

QString s1 = QString::fromUtf8(data);
QString s2 = QString::fromLocal8Bit(data);


такое не прокатывает, компилятор ругается о неправильном преобразовании const ushort* к char*


Цитата(just_geek @  6.8.2009,  20:58 Найти цитируемый пост)
anatox91, пока толком нигде. Есть в git'e

Ну да и тут есть кой-чего

http://doc.qtsoftware.com/4.6-snapshot/qaudiooutput.html
http://doc.qtsoftware.com/4.6-snapshot/qaudioinput.html
http://doc.qtsoftware.com/4.6-snapshot/qaudioformat.html
http://doc.qtsoftware.com/4.6-snapshot/qaudiodeviceinfo.html
http://doc.qtsoftware.com/4.6-snapshot/qaudiodeviceid.html
для самого модуля пока документации нету. Плюс там же в git'e есть пример использования. Пока 4.6 не собирал, ничего сказать по этому поводу не могу 


довольно интересно, а с Phonon'ом они что будут делать? или это будет на основе Phonon'а?




--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Любитель
Дата 8.8.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(anatox91 @  7.8.2009,  22:39 Найти цитируемый пост)
такое не прокатывает, компилятор ругается о неправильном преобразовании const ushort* к char*

Ну поставь const char*. reinterpret_cast на крайний раз.


--------------------
PM MAIL ICQ Skype   Вверх
anatox91
Дата 8.8.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Цитата(Любитель @  8.8.2009,  00:17 Найти цитируемый пост)
Ну поставь const char*. reinterpret_cast на крайний раз.

перепробовал много вариантов но даже те которые компилятся не помогли...


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Любитель
Дата 8.8.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Сделай дамп в UTF-16 и пришли сюда smile


--------------------
PM MAIL ICQ Skype   Вверх
anatox91
Дата 8.8.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



глупый вопрос: а как его сделать? ) и дамп чего? )


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Любитель
Дата 8.8.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Взять содержимое твоего trackTitle и сохранить в файл smile


--------------------
PM MAIL ICQ Skype   Вверх
anatox91
Дата 8.8.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



вот для примера

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  out.txt 0,03 Kb


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Любитель
Дата 8.8.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Ну.. здесь всё чтение строки закончилось на этапе вызова где-то MultiByteToWideChar.. А для треков с английскими названиями тоже самое получается?


--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.