use of android.media.MediaMetadataRetriever in project android_frameworks_base by ParanoidAndroid.
the class MediaMetadataRetrieverTest method testMetadataRetrieval.
@LargeTest
public static void testMetadataRetrieval() throws Exception {
boolean supportWMA = MediaProfileReader.getWMAEnable();
boolean supportWMV = MediaProfileReader.getWMVEnable();
boolean hasFailed = false;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
for (int i = 0, n = MediaNames.THUMBNAIL_METADATA_TEST_FILES.length; i < n; ++i) {
try {
Log.v(TAG, "File " + i + ": " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]);
if ((MediaNames.THUMBNAIL_METADATA_TEST_FILES[i].endsWith(".wma") && !supportWMA) || (MediaNames.THUMBNAIL_METADATA_TEST_FILES[i].endsWith(".wmv") && !supportWMV)) {
Log.v(TAG, "windows media is not supported and thus we will skip the test for this file");
continue;
}
retriever.setDataSource(MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]);
extractAllSupportedMetadataValues(retriever);
} catch (Exception e) {
Log.e(TAG, "Fails to setDataSource for file " + MediaNames.THUMBNAIL_METADATA_TEST_FILES[i]);
hasFailed = true;
}
// Don't be evil
Thread.yield();
}
retriever.release();
assertTrue(!hasFailed);
}
use of android.media.MediaMetadataRetriever in project actor-platform by actorapp.
the class AndroidMessenger method sendVideo.
public void sendVideo(Peer peer, String fullFilePath, String fileName) {
try {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(fullFilePath);
int duration = (int) (Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000L);
Bitmap img = retriever.getFrameAtTime(0);
int width = img.getWidth();
int height = img.getHeight();
Bitmap smallThumb = ImageHelper.scaleFit(img, 90, 90);
byte[] smallThumbData = ImageHelper.save(smallThumb);
FastThumb thumb = new FastThumb(smallThumb.getWidth(), smallThumb.getHeight(), smallThumbData);
sendVideo(peer, fileName, width, height, duration, thumb, fullFilePath);
} catch (Throwable e) {
e.printStackTrace();
}
}
use of android.media.MediaMetadataRetriever in project android by owncloud.
the class PreviewAudioFragment method extractAndSetCoverArt.
/**
* tries to read the cover art from the audio file and sets it as cover art.
*
* @param file audio file with potential cover art
*/
private void extractAndSetCoverArt(OCFile file) {
try {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(file.getStoragePath());
byte[] data = mmr.getEmbeddedPicture();
if (data != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//associated cover art in bitmap
mImagePreview.setImageBitmap(bitmap);
} else {
mImagePreview.setImageResource(R.drawable.logo);
}
} catch (Throwable t) {
mImagePreview.setImageResource(R.drawable.logo);
}
}
use of android.media.MediaMetadataRetriever in project JamsMusicPlayer by psaravan.
the class AsyncPlayFolderRecursiveTask method extractFileMetadata.
//Extracts specific ID3 metadata from an audio file and returns them in an ArrayList.
public static ArrayList<Object> extractFileMetadata(String filePath) {
ArrayList<Object> metadata = new ArrayList<Object>();
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(filePath);
metadata.add(mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
metadata.add(mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
metadata.add(mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
metadata.add(mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
metadata.add(mediaMetadataRetriever.getEmbeddedPicture());
return metadata;
}
use of android.media.MediaMetadataRetriever in project JamsMusicPlayer by psaravan.
the class PlaylistPagerFlippedFragment method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_playlist_pager_flipped, container, false);
mContext = getActivity().getApplicationContext();
mApp = (Common) mContext;
ratingBar = (RatingBar) rootView.findViewById(R.id.playlist_pager_flipped_rating_bar);
lyricsRelativeLayout = (RelativeLayout) rootView.findViewById(R.id.lyricsRelativeLayout);
lyricsTextView = (TextView) rootView.findViewById(R.id.playlist_pager_flipped_lyrics);
headerTextView = (TextView) rootView.findViewById(R.id.playlist_pager_flipped_title);
noLyricsFoundText = (TextView) rootView.findViewById(R.id.no_embedded_lyrics_found_text);
lyricsTextView.setTypeface(TypefaceHelper.getTypeface(mContext, "RobotoCondensed-Light"));
lyricsTextView.setPaintFlags(lyricsTextView.getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
headerTextView.setTypeface(TypefaceHelper.getTypeface(mContext, "RobotoCondensed-Light"));
headerTextView.setPaintFlags(headerTextView.getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
noLyricsFoundText.setTypeface(TypefaceHelper.getTypeface(mContext, "RobotoCondensed-Light"));
noLyricsFoundText.setPaintFlags(noLyricsFoundText.getPaintFlags() | Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
lyricsRelativeLayout.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
//Fire a broadcast that notifies the PlaylistPager to update flip back to the album art.
Intent intent = new Intent(broadcastMessage);
intent.putExtra("MESSAGE", broadcastMessage);
//Initialize the local broadcast manager.
localBroadcastManager = LocalBroadcastManager.getInstance(mContext);
localBroadcastManager.sendBroadcast(intent);
return true;
}
});
//Get the file path of the current song.
String updatedSongTitle = "";
String updatedSongArtist = "";
String songFilePath = "";
String songId = "";
MediaMetadataRetriever mmdr = new MediaMetadataRetriever();
tempCursor = mApp.getService().getCursor();
tempCursor.moveToPosition(mApp.getService().getPlaybackIndecesList().get(mApp.getService().getCurrentSongIndex()));
if (tempCursor.getColumnIndex(DBAccessHelper.SONG_FILE_PATH) == -1) {
//Retrieve the info from the file's metadata.
songFilePath = tempCursor.getString(tempCursor.getColumnIndex(null));
mmdr.setDataSource(songFilePath);
updatedSongTitle = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
updatedSongArtist = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
} else {
/* Check if the cursor has the SONG_FILE_PATH column. If it does, we're dealing
* with the SONGS table. If not, we're dealing with the PLAYLISTS table. We'll
* retrieve data from the appropriate columns using this info. */
if (tempCursor.getColumnIndex(DBAccessHelper.SONG_FILE_PATH) == -1) {
//We're dealing with the Playlists table.
songFilePath = tempCursor.getString(tempCursor.getColumnIndex(DBAccessHelper.PLAYLIST_FILE_PATH));
mmdr.setDataSource(songFilePath);
updatedSongTitle = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
updatedSongArtist = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
} else {
//We're dealing with the songs table.
songFilePath = tempCursor.getString(tempCursor.getColumnIndex(DBAccessHelper.SONG_FILE_PATH));
updatedSongTitle = tempCursor.getString(tempCursor.getColumnIndex(DBAccessHelper.SONG_TITLE));
updatedSongArtist = tempCursor.getString(tempCursor.getColumnIndex(DBAccessHelper.SONG_ARTIST));
songId = tempCursor.getString(tempCursor.getColumnIndex(DBAccessHelper.SONG_ID));
}
}
headerTextView.setText(updatedSongTitle + " - " + updatedSongArtist);
ratingBar.setStepSize(1);
int rating = mApp.getDBAccessHelper().getSongRating(songId);
ratingBar.setRating(rating);
//Get the rating value for the song.
AudioFile audioFile = null;
File file = null;
try {
audioFile = null;
file = new File(songFilePath);
try {
audioFile = AudioFileIO.read(file);
} catch (CannotReadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (org.jaudiotagger.tag.TagException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ReadOnlyFileException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidAudioFrameException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
final AudioFile finalizedAudioFile = audioFile;
final String finalSongFilePath = songFilePath;
final String finalSongId = songId;
ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
//Change the rating in the DB and the actual audio file itself.
Log.e("DEBUG", ">>>>>RATING: " + rating);
try {
Tag tag = finalizedAudioFile.getTag();
tag.addField(FieldKey.RATING, "" + ((int) rating));
} catch (KeyNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FieldDataInvalidException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
Log.e("DEBUG", ">>>>>>>RATING FIELD NOT FOUND");
}
try {
finalizedAudioFile.commit();
} catch (CannotWriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
mApp.getDBAccessHelper().setSongRating(finalSongId, (int) rating);
}
});
//Check if the audio file has any embedded lyrics.
String lyrics = null;
try {
Tag tag = audioFile.getTag();
lyrics = tag.getFirst(FieldKey.LYRICS);
if (lyrics == null || lyrics.isEmpty()) {
lyricsTextView.setVisibility(View.GONE);
noLyricsFoundText.setVisibility(View.VISIBLE);
return rootView;
}
//Since the song has embedded lyrics, display them in the layout.
lyricsTextView.setVisibility(View.VISIBLE);
noLyricsFoundText.setVisibility(View.GONE);
lyricsTextView.setText(lyrics);
} catch (Exception e) {
e.printStackTrace();
lyricsTextView.setVisibility(View.GONE);
noLyricsFoundText.setVisibility(View.VISIBLE);
return rootView;
}
} catch (Exception e) {
e.printStackTrace();
//Can't do much here.
}
return rootView;
}
Aggregations