AudioFile f = AudioFileIO.read(file);
Tag tag = f.getTag();
Iterator<TagField> it = tag.getFields();
while (it.hasNext()) {
TagField tf = it.next();
TagData tagData = getTagData(tf);
if (tagData != null) {
String[] values;
if (separatorCharacters != null && separatorCharacters.trim().length() > 0) {
values = tagData.getValue().split("[" + separatorCharacters + "]");
} else {
values = new String[]{tagData.getValue()};
}
for (String value : values) {
if (value != null && value.trim().length() > 0) {
String name = getMappedTagName(tagData.getName());
if (name != null) {
if (normalTags.containsKey(name)) {
normalTags.get(name).add(value);
} else {
normalTags.put(name, new ArrayList<String>(Arrays.asList(value)));
}
} else if (getSortTag(tagData.getName()) != null) {
String sortName = getSortTag(tagData.getName());
if (sortTags.containsKey(sortName)) {
sortTags.get(sortName).add(value);
} else {
sortTags.put(sortName, new ArrayList<String>(Arrays.asList(value)));
}
}
}
}
}
}
for (Map.Entry<String, List<String>> entry : normalTags.entrySet()) {
List<String> values = entry.getValue();
List<String> sortValues = null;
if (sortTags.containsKey(entry.getKey())) {
sortValues = sortTags.get(entry.getKey());
}
int i = 0;
for (String value : values) {
String sortValue = null;
if (sortValues != null && sortValues.size() > i) {
sortValue = sortValues.get(i);
}
result.getTags().add(new TagData(entry.getKey(), value, sortValue));
}
}
return result;
} catch (TagException e) {
throw new IOException(e);