Android:如何从音频文件中获取音频细节

2024-01-11

我的音乐应用程序使用意图数据作为音乐文件从外部应用程序启动。

所以我有像这样的 mp3 音频 URI

文件:///storage/emulated/0/Music/Tamil/I20(2014)/Ennodu%20 Nee%20 Irundhaal.mp3

如何从 URI 获取音频详细信息,即 Media.TITLE 、 Media.ALBUM 、 Media._ID


MediaMetaDataRetriever 类: - Android 中的 MediaMetaDataRetriever 类具有许多处理音频文件的有利功能。它的包名称是“android.media.MediaMetadataRetriever”它能够提供此类文件的预定义信息,例如:

  • 歌曲艺术家
  • 专辑歌曲名称
  • 歌曲专辑艺术
  • 歌曲类型
  • 歌曲的作曲家以及它拥有的更多选项。

    MediaMetadataRetriever metaRetriver;
    metaRetriver = new MediaMetadataRetriever();
    metaRetriver.setDataSource("/sdcard/audio.mp3");
    

    上面的代码展示了如何创建MediaMetadataRetriever类的对象以及如何设置数据源。

如这段代码所示,音频文件的绝对路径是 SD 卡中的文件集。

byte[] art;
art = metaRetriver.getEmbeddedPicture();

上面的代码用于从音频文件中获取字节格式的专辑封面。

Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length);

上面的代码用于将字节形式的元数据转换为位图格式,以便可以轻松地在定义的 ImageView 上进行设置以显示它。

All Code

ImageView album_art;
TextView album, artist, genre;

MediaMetadataRetriever metaRetriver;
byte[] art;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getInit();

    // Ablum_art retrieval code //

    metaRetriver = new MediaMetadataRetriever();
    metaRetriver.setDataSource("/sdcard/audio.mp3");
    try {
        art = metaRetriver.getEmbeddedPicture();
        Bitmap songImage = BitmapFactory
                .decodeByteArray(art, 0, art.length);
        album_art.setImageBitmap(songImage);
        album.setText(metaRetriver
                .extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
        artist.setText(metaRetriver
                .extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
        genre.setText(metaRetriver
                .extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE));
    } catch (Exception e) {
        album_art.setBackgroundColor(Color.GRAY);
        album.setText("Unknown Album");
        artist.setText("Unknown Artist");
        genre.setText("Unknown Genre");
    }

}

// Fetch Id's form xml 

public void getInit() {

    album_art = (ImageView) findViewById(R.id.album_art);
    album = (TextView) findViewById(R.id.Album);
    artist = (TextView) findViewById(R.id.artist_name);
    genre = (TextView) findViewById(R.id.genre);

}

main.xml

<? xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/album_art_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="60dp"
    android:text="Album Art"
    android:textSize="18dp" />

<ImageView
    android:id="@+id/album_art"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_alignParentRight="true"
    android:layout_centerHorizontal="true"
    android:layout_marginRight="10dp" />

<TextView
    android:id="@+id/album_name_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/album_art_text"
    android:layout_below="@+id/album_art"
    android:layout_marginTop="24dp"
    android:text="Album Name :"
    android:textSize="18dp" />

<TextView
    android:id="@+id/artist_name_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/album_name_text"
    android:layout_below="@+id/album_name_text"
    android:layout_marginTop="43dp"
    android:text="Artist Name :"
    android:textSize="18dp" />

<TextView
    android:id="@+id/genre_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/artist_name_text"
    android:layout_below="@+id/artist_name_text"
    android:layout_marginTop="39dp"
    android:text="Genre :"
    android:textSize="18dp" />

<TextView
    android:id="@+id/genre"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/genre_text"
    android:layout_alignBottom="@+id/genre_text"
    android:layout_toRightOf="@+id/album_art_text"
    android:text="null"
    android:textSize="18dp" />


<TextView
    android:id="@+id/Album"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/artist_name_text"
    android:layout_alignLeft="@+id/album_art"
    android:text="null"
    android:textSize="18dp" />

<TextView
    android:id="@+id/artist_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/genre_text"
    android:layout_alignLeft="@+id/Album"
    android:text="null"
    android:textSize="18dp" />

</RelativeLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何从音频文件中获取音频细节 的相关文章

  • 未捕获的 ReferenceError: myFunction 未在 null:1 处定义 Web 视图中的 Android 异常

    我正在从活动中调用 javascript 函数 但我得到了Uncaught ReferenceError myFunction is not defined at null 1错误 这是我的文件 MainActivity java pack
  • 代码如何从 Android Gallery 加载图像

    我有用于从图库加载图像的代码 但我真的不明白它是如何工作的 这是代码 Override protected void onActivityResult int requestCode int resultCode Intent data s
  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • Context.startForegroundService 然后没有调用Service.startForeground

    这是我的 BroadcastReciever 类 该类处理启动电话状态 Code public class BroadCastRecieverBoot extends BroadcastReceiver Override public vo
  • Android 套接字和 HTTP 响应标头

    有趣的是 我可能无意中找到了解决方案是否可以使用普通套接字连接发送 HTTP 请求并接收没有标头的响应 https stackoverflow com questions 8320574 我希望我忽略了一些东西 无论如何 我正在连接到 We
  • Android 操作栏 SearchView 作为自动完成功能?

    我在操作栏中使用 SearchView 我想在搜索视图上使用自动完成功能来从数据库中获取结果 这可能吗 或者我是否需要使用自定义文本框 然后添加自动完成功能 所以我只需要对 v7 版本执行此操作 并沮丧地发现我不能简单地使用 ArrayAd
  • 为什么Android room不建议使用allowMainThreadQueries()?

    我正在创建一个小型应用程序 仅在数据库中保存一些计数器 如果不存在 请插入一个 如果是的话 增加更新 该应用程序没有任何用户界面 它是一个保存和读取数据 少量表 少量记录 的插件 我可以用吗允许主线程查询 在这种情况下 每次我读到一些关于这
  • 检测Android N版本代码

    是否可以检测用户是否运行 Android N 我有一台装有 Android N 开发者预览版的 Nexus 6 如果我尝试获取构建版本Build VERSION SDK INT 它返回 23 等于 Android Marshmallow Q
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • Ionic4 电容器 android livereload?

    是否有可能在带有 livereload 的 Android 设备上运行带有电容器的 ionic 4 应用程序 我已经找了几个小时的答案了 但没有成功 请帮忙 如果使用最新版本 ionic cli 现在有一个命令ionic capacitor
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 如何让 Mockito 在 androidTest 中工作

    在我的测试中 我如何模拟我编写的课程 这是我的测试代码 import android support test runner AndroidJUnit4 import org junit Before import org junit Te
  • Android 中的 BLE Gatt onConnectionStateChanged 失败,状态为 257

    我正在开发一个同时连接到多个BLE设备的Android应用程序 之后我从这些设备永久读取特征 但过了一会儿 我在onConnectionStateChanged 函数中得到状态257 android文档没有解释错误的原因是什么 或者如何修复
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 如何在捆绑中存储稀疏数组

    我有一个SparseArray
  • 布局聊天气泡问题:TextView 占满整个屏幕

    我正在研究泡泡聊天 我使用具有两种布局的适配器 一种用于传入消息 另一种用于我的消息 适配器工作正常 我的问题在于传入布局 无法很好地显示传入时间文本 当消息文本增长时 会填满屏幕的整个宽度 并隐藏消息时间的文本 第一个问题 如何才能实现这
  • 通知管理器所需的权限

    我正在尝试使用以下命令将振铃器设置为静音且请勿打扰优先级 AudioManager myAudioMgr AudioManager context getSystemService Context AUDIO SERVICE Notific
  • 手动添加带有依赖pom/iml文件的aar

    由于我无法使用私人 Maven 来共享我的库 因此我正在考虑共享 aar 并导入到另一个项目中 当 aar 和 jar 文件不包含任何依赖项时 就会出现问题 因此 一旦我在android studio中手动导入aar 使用Import JA
  • Android IntentService无法实例化类;没有空构造函数

    我有一个MainActivity需要访问在线 API 从而使用网络资源 的类 这需要我在单独的文件中创建的后台线程HttpRequestService java MainActivity java public class MainActi
  • Android 可扩展列表视图随机播放子项

    你好 我正在使用 Android Expandable listview 并用不同的视图在其中膨胀子视图 我遇到的问题是 当我展开视图然后打开另一个父视图时 布局中的子视图会变得混乱并在代码中膨胀错误的布局 这是我的两个项目的示例代码 这是

随机推荐

  • smap 中的“Private_Dirty”内存是什么意思?

    我有一个消耗大量 RAM 的 Java 进程 我试图弄清楚他用所有这些内存做了什么 所以 我正在这个 PID 上执行 pmap x 这是结果的一部分 Address Kbytes RSS Dirty Mode Mapping 0000000
  • 将多行插入表中,仅更改一个值

    假设我有一个包含以下列的表 字段 1 领域 2 字段3 字段4 我想在此表中插入多行 但每行的 field1 field2 和 field3 的值都相同 只有field4的值会改变 显然 我可以单独插入每一行 但生成的查询会有点难看 我想知
  • 更改暂停消息

    好的 所以您输入时就知道了pause在 CMD 中 它会显示 按任意键继续 我如何将其更改为 按某个键继续 之类的内容 最后 我正在编写一个批处理文件 我想知道如果我有类似的情况会发生什么 echo off cls pause pause
  • Any 的相反方法是什么

    如果集合不包含对象 如何使用 Linq 检查 IE 相反的是Any
  • 如何在java中创建嵌套的json

    我在用java制作json时遇到问题 下面是我必须通过 java 代码创建的 JSON status 0 Response abc def fgh abc abc def abc ghi abc abc abc def abc
  • 更新版本控制上的预提交挂钩文件

    我最近更新了我的pre commit sample文件以在提交时运行 rubocop 重命名为 pre commit bin sh Check for ruby style errors rake run rubocop 我错误地认为这会在
  • 带 orderBy 的 firestore 相等过滤器

    我正在使用 Firestore 并且我有非常简单的带有相等过滤器的查询 其中我需要执行 orderBy 因为我必须限制结果 我无法将 startAfter 与 orderBy 一起使用 因为 Firebase 在这种情况下会引发错误 Fir
  • CSS div:显示:表格替代品?

    div div div some box with unknown width div div div div div wr width 300px height 100px border 1px solid red margin 50px
  • 我们真的需要放置新表达式吗?

    我试图理解放置新表达式 https timsong cpp github io cppwp new delete placement in C 这个堆栈溢出答案 https stackoverflow com a 35089001 2326
  • 反向传播算法:误差计算

    我目前正在编写反向传播脚本 我不确定如何更新我的体重值 这是一张图片 只是为了让事情变得简单 我的问题 如何计算和应用误差 我确实知道 k1 和 k2 会产生错误值 我知道 k1 和 k2 产生单独的误差值 目标 输出 但我不知道是否要使用
  • x86 汇编两条具有相同目标的跳转指令

    我尝试理解 Michael Sikorski 所著的 实用恶意软件分析 一书中的示例 有一个我不理解的反反汇编技术的例子 它说一种常见的技术是创建两个条件指令 即零时跳转 JZ 和非零时跳转 JNZ 它们一起考虑实际上只是一个无条件指令 这
  • 如何使用 Angular js 将本地存储数据放入视图文件中

    你好 我是平均堆栈的初学者 我在本地存储中有数据 我想从本地存储中获取数据并显示在 html 文件中 但我不知道如何获取它 在视图文件上 scope useredit function d var user id d id var data
  • 使用 python3 在 vi​​rtualenv 中设置环境,卡在 setuptools、pip、wheel 上

    运行以下命令 virtualenv p python3 venv gives Running virtualenv with interpreter usr bin python3 Using base prefix usr New pyt
  • 如何在 pgadmin 中删除数据库

    当我尝试在 pgadmin 4 中创建名为 eCommerce 的其他数据库时 会出现此消息 错误 源数据库 template1 正在被其他用户访问 详细信息 还有 2 个其他会话正在使用该数据库 我尝试删除其他数据库 但不起作用并出现 错
  • 延迟 NUnit 断言消息评估

    我的测试代码中有这个断言 Assert That gt eventData Count 0 Is True After notificationPollingDelay Received unexpected event with last
  • 如何规避 Windows 通用 CRT 标头对 vcruntime.h 的依赖

    在尝试在 Windows 上评估 Clang 时 利用 Windows Universal C Run Time Windows Kits 10 Include 10 0 15063 0 ucrt 我立即面临着意想不到的障碍 其形式是未公开
  • Angular:如何在测试时模拟 MatDialogRef

    我有一个DialogComponent具有以下构造函数 其中Dialog是一个自定义对象 constructor public dialogRef MatDialogRef
  • Firebase TypeError:无法读取未定义的属性“val”

    I have tried Firebase cloud function for sending a notification My project structure 这是index js const functions require
  • 使用 PHP 将文件备份到 google 驱动器

    我有一个服务器和一个域名GoDaddy https godaddy com 我想为要上传的文件创建备份谷歌云端硬盘 https drive google com 这样我的所有文件和数据库都有其数据谷歌云端硬盘 https drive goo
  • Android:如何从音频文件中获取音频细节

    我的音乐应用程序使用意图数据作为音乐文件从外部应用程序启动 所以我有像这样的 mp3 音频 URI 文件 storage emulated 0 Music Tamil I20 2014 Ennodu 20 Nee 20 Irundhaal