Aaron B.
- Forum-Beiträge: 206
28.07.2013, 13:22:17 via App
28.07.2013 13:22:17 via App
hallo community.
Ich arbeite gerade an einem Music-Player und möchte für diesen alle Sound-Dateien aus der Sd-Card und externen Sd-Card heraussuchen und für diese folgende Informationen erhalten:
-Titel
-Interpret
-Album
-Länge
-Bild
Dazu nutze ich momentan den MediaMetadataRetreiver. Dieser funktioniert jedoch nur bei mp3-Dateien und findet nur bei sehr wenigen Titeln Informationen.
Mein Problem ist, dass das Finden der Dateien und das Heraussuchen derer Unformationen ca. 40 Sekunden dauert, was viel zu lang ist.
Außerdem möchte ich auch andere Formate neben mp3 nutzen können.
Die Daten sollen wenn möglich in eine ArrayList <SoundItem> geladen werden. SoundItem ist eine Custom-Klasse, die Bild (Cover), Titel, Artist, Album, Länge und Pfad beinhaltet.
Mit dieser Klasse lade ich momentan die Informationen:
Gibt es einen schnelleren und zuverlässigeren Weg, Musik-Daten zu laden?
Danke im Voraus für Antworten.
Ich arbeite gerade an einem Music-Player und möchte für diesen alle Sound-Dateien aus der Sd-Card und externen Sd-Card heraussuchen und für diese folgende Informationen erhalten:
-Titel
-Interpret
-Album
-Länge
-Bild
Dazu nutze ich momentan den MediaMetadataRetreiver. Dieser funktioniert jedoch nur bei mp3-Dateien und findet nur bei sehr wenigen Titeln Informationen.
Mein Problem ist, dass das Finden der Dateien und das Heraussuchen derer Unformationen ca. 40 Sekunden dauert, was viel zu lang ist.
Außerdem möchte ich auch andere Formate neben mp3 nutzen können.
Die Daten sollen wenn möglich in eine ArrayList <SoundItem> geladen werden. SoundItem ist eine Custom-Klasse, die Bild (Cover), Titel, Artist, Album, Länge und Pfad beinhaltet.
Mit dieser Klasse lade ich momentan die Informationen:
1package de.mymusic.classes;
2
3import android.content.*;
4import android.graphics.*;
5import android.media.*;
6import android.os.*;
7import android.widget.*;
8import de.mymusic.adapters.*;
9import java.io.*;
10import java.util.*;
11
12public class MusicManager
13{
14
15 public static ArrayList<String> getAllSoundsInExternalStorage() {
16 ArrayList<String> result = getAllSoundsInFolder(new File(Environment.getExternalStorageDirectory() + File.separator).getParent());
17
18 return result;
19 }
20
21 public static ArrayList<String> getAllSoundsInFolder(String path) {
22 ArrayList<String> result = new ArrayList<String>();
23
24 for(File f : new File(path).listFiles()) {
25 try {
26 if(f.isDirectory()) {
27 for(String f2 : getAllSoundsInFolder(f.getPath())) {
28 result.add(f2);
29 }
30 } else if(f.getName().endsWith(".mp3")) {
31 result.add(f.getPath());
32 }/* else if(f.getName().endsWith(".m4a")) {
33 result.add(f.getPath());
34 }*/
35 } catch(Exception e) {
36
37 }
38 }
39
40 return result;
41 }
42
43 public static ArrayList<SoundItem> buildTitleList(Context c, ArrayList<String> soundFiles) {
44 ArrayList<SoundItem> result = new ArrayList<SoundItem>();
45
46 for(String f : soundFiles) {
47 try {
48 MediaMetadataRetriever rec = new MediaMetadataRetriever();
49 rec.setDataSource(f);
50
51 Float time = Float.valueOf(rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
52 time = time / 1000 / 60;
53
54 SoundItem adding = new SoundItem((rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE) == null ? new File(f).getName().replace(".mp3", "").replace(".m4a", "") : rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)), rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST), rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM), time, f);
55 try {
56 adding.setCover(BitmapFactory.decodeByteArray(rec.getEmbeddedPicture(), 0, rec.getEmbeddedPicture().length));
57 } catch(Exception e) {
58
59 }
60 result.add(adding);
61 } catch(Exception e) {
62
63 }
64 }
65
66 return result;
67 }
68
69}
2
3import android.content.*;
4import android.graphics.*;
5import android.media.*;
6import android.os.*;
7import android.widget.*;
8import de.mymusic.adapters.*;
9import java.io.*;
10import java.util.*;
11
12public class MusicManager
13{
14
15 public static ArrayList<String> getAllSoundsInExternalStorage() {
16 ArrayList<String> result = getAllSoundsInFolder(new File(Environment.getExternalStorageDirectory() + File.separator).getParent());
17
18 return result;
19 }
20
21 public static ArrayList<String> getAllSoundsInFolder(String path) {
22 ArrayList<String> result = new ArrayList<String>();
23
24 for(File f : new File(path).listFiles()) {
25 try {
26 if(f.isDirectory()) {
27 for(String f2 : getAllSoundsInFolder(f.getPath())) {
28 result.add(f2);
29 }
30 } else if(f.getName().endsWith(".mp3")) {
31 result.add(f.getPath());
32 }/* else if(f.getName().endsWith(".m4a")) {
33 result.add(f.getPath());
34 }*/
35 } catch(Exception e) {
36
37 }
38 }
39
40 return result;
41 }
42
43 public static ArrayList<SoundItem> buildTitleList(Context c, ArrayList<String> soundFiles) {
44 ArrayList<SoundItem> result = new ArrayList<SoundItem>();
45
46 for(String f : soundFiles) {
47 try {
48 MediaMetadataRetriever rec = new MediaMetadataRetriever();
49 rec.setDataSource(f);
50
51 Float time = Float.valueOf(rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
52 time = time / 1000 / 60;
53
54 SoundItem adding = new SoundItem((rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE) == null ? new File(f).getName().replace(".mp3", "").replace(".m4a", "") : rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)), rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST), rec.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM), time, f);
55 try {
56 adding.setCover(BitmapFactory.decodeByteArray(rec.getEmbeddedPicture(), 0, rec.getEmbeddedPicture().length));
57 } catch(Exception e) {
58
59 }
60 result.add(adding);
61 } catch(Exception e) {
62
63 }
64 }
65
66 return result;
67 }
68
69}
Gibt es einen schnelleren und zuverlässigeren Weg, Musik-Daten zu laden?
Danke im Voraus für Antworten.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.