2013-05-08 1 views
0

Я создаю музыкальный плеер для Ubuntu Touch в QML, и у меня есть некоторые вещи, на которые я был бы признателен за помощь, поскольку я новичок в QML.Получите метаданные из делегированных файлов с использованием QML

У меня есть список треков из каталога, но я хочу показать метаданные (имя исполнителя, название дорожки, год, альбом и т. Д.) Вместо имени файла.

Использование Qt.Multimedia в состоянии получить метаданные из текущей воспроизводимой дорожки, но я не могу найти, как это сделать для каждого файла из моих делегированных файлов FolderListModel.

Как бы я это сделал?

Это текущий код:

  Column { 
       anchors.centerIn: parent 
       anchors.fill: parent 
       ListView { 
        id: musicFolder 
        FolderListModel { 
         id: folderModel 
         folder: musicDir 
         showDirs: false 
         nameFilters: ["*.ogg","*.mp3","*.oga","*.wav"] 
        } 
        width: parent.width 
        height: parent.height 
        model: folderModel 
        delegate: ListItem.Subtitled { 
         text: fileName 
         subText: "Artist: " 
         onClicked: { 
          console.debug('Debug: User pressed '+musicDir+fileName) 
          playMusic.source = musicDir+fileName 
          playMusic.play() 
          trackInfo.text = playMusic.metaData.albumArtist+" - "+playMusic.metaData.title // show track meta data 
         } 
        } 
       } 
      } 
+0

Я не уверен в QtMultimedia, но в Phonon вам нужно было сначала воспроизвести файл, прежде чем вы сможете извлечь метаданные. Чтобы явно извлечь данные из всех файлов в папке, вам придется использовать внешние библиотеки, такие как http://taglib.github.io/ Является ли поведение одинаковым в QtMultimedia? –

+0

Привет, снова Амит, ну да, похоже, мне нужно сначала сыграть каждый трек, прежде чем извлекать метаданные с помощью QtMultimedia. Но он использует довольно много энергии и сделал приложение очень медленным, поэтому я хотел посмотреть, есть ли другие варианты, которые можно было бы сделать вместо этого. –

ответ

0

Похоже, что проще всего сделать, здесь было бы пойти получить ++ библиотеки C, которая может анализировать метаданные из этих файлов и использовать его для создания пользовательский ListModel в C++, который заполняет эту информацию на себя. К сожалению, это должно быть сделано на C++, поскольку javascript не имеет возможностей ввода-вывода для чтения и анализа файлов.

+0

Спасибо. Если это будет так, я надеюсь, что некоторые из участников станут музыкальным приложением, которое поможет мне в этом. –

0

На самом деле, я думаю, что я могу пойти дальше и использовать QtMultimedia, но хранить данные в локальной базе данных. При запуске он проверяет музыкальный каталог и добавляет/удаляет треки. Таким образом, при первом запуске он будет только медленным (надеюсь)