Fix to get fields when file format is ID3v2.4

master
tesshucom 6 years ago
parent eea9416fbe
commit f5f1ec336f
  1. 64
      airsonic-main/src/main/java/org/airsonic/player/service/metadata/JaudiotaggerParser.java

@ -28,6 +28,9 @@ import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.AudioHeader; import org.jaudiotagger.audio.AudioHeader;
import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag; import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.id3.AbstractID3Tag;
import org.jaudiotagger.tag.id3.ID3v24Frames;
import org.jaudiotagger.tag.id3.ID3v24Tag;
import org.jaudiotagger.tag.images.Artwork; import org.jaudiotagger.tag.images.Artwork;
import org.jaudiotagger.tag.reference.GenreTypes; import org.jaudiotagger.tag.reference.GenreTypes;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -96,10 +99,71 @@ public class JaudiotaggerParser extends MetaDataParser {
String songArtist = getTagField(tag, FieldKey.ARTIST); String songArtist = getTagField(tag, FieldKey.ARTIST);
String albumArtist = getTagField(tag, FieldKey.ALBUM_ARTIST); String albumArtist = getTagField(tag, FieldKey.ALBUM_ARTIST);
if (tag instanceof AbstractID3Tag && 0 < audioFile.getTag().getFieldCount()) {
AbstractID3Tag id3Tag = (AbstractID3Tag)tag;
if (ID3v24Tag.RELEASE == id3Tag.getRelease()
&& ID3v24Tag.MAJOR_VERSION == id3Tag.getMajorVersion()
&& ID3v24Tag.REVISION == id3Tag.getRevision()) {
audioFile.getTag().getFields().forEachRemaining(f -> {
switch (f.getId()) {
case ID3v24Frames.FRAME_ID_ALBUM:
if (null == metaData.getAlbumName()) {
metaData.setAlbumName(f.toString());
}
break;
case ID3v24Frames.FRAME_ID_TITLE:
if (null == metaData.getTitle()) {
metaData.setTitle(f.toString());
}
break;
case ID3v24Frames.FRAME_ID_YEAR:
if (null == metaData.getYear()) {
metaData.setYear(parseYear(f.toString()));
}
break;
case ID3v24Frames.FRAME_ID_GENRE:
if (null == metaData.getGenre()) {
metaData.setGenre(mapGenre(f.toString()));
}
break;
case ID3v24Frames.FRAME_ID_SET:
if (null == metaData.getDiscNumber()) {
metaData.setDiscNumber(parseInteger(f.toString()));
}
break;
case ID3v24Frames.FRAME_ID_TRACK:
if (null == metaData.getTrackNumber()) {
metaData.setTrackNumber(parseTrackNumber(f.toString()));
}
break;
case ID3v24Frames.FRAME_ID_ARTIST:
if (null == metaData.getArtist() && null == songArtist) {
metaData.setArtist(f.toString());
}
break;
case ID3v24Frames.FRAME_ID_ACCOMPANIMENT:
if (null == metaData.getAlbumArtist()) {
metaData.setAlbumArtist(f.toString());
}
break;
default:
break;
}
});
}
}
if(StringUtils.isBlank(metaData.getArtist())) {
metaData.setArtist(StringUtils.isBlank(songArtist) ? albumArtist : songArtist); metaData.setArtist(StringUtils.isBlank(songArtist) ? albumArtist : songArtist);
}
if(StringUtils.isBlank(metaData.getAlbumArtist())) {
metaData.setAlbumArtist(StringUtils.isBlank(albumArtist) ? songArtist : albumArtist); metaData.setAlbumArtist(StringUtils.isBlank(albumArtist) ? songArtist : albumArtist);
} }
}
AudioHeader audioHeader = audioFile.getAudioHeader(); AudioHeader audioHeader = audioFile.getAudioHeader();
if (audioHeader != null) { if (audioHeader != null) {
metaData.setVariableBitRate(audioHeader.isVariableBitRate()); metaData.setVariableBitRate(audioHeader.isVariableBitRate());

Loading…
Cancel
Save