- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有许多 mp3 文件,我将它们与 Android MediaPlayer 一起使用以从特定偏移量播放。
使用 seekTo() 似乎会停在正确的位置。 player.getCurrrentPosition() 返回正确的偏移量,但在某些情况下,实际位置会偏离多达 200 毫秒。这些文件大约有 3 分钟的记录值(value),不正确的偏移量似乎出现在最后。一些文件。
我尝试使用 Android 4.0.3 设备或 4.3 模拟器都具有相同的效果。
有人有“微调”MediaPlayer 偏移量的经验吗?有没有经历过 MediaPlayer 可能无法正确处理某些文件?都是CBR,立体声,采样频率有的22050,有的44100,码率不同。
我正在设置另一个程序的偏移量并保存到 mp3 标签,然后在有疑问的情况下使用 Audacity 手动验证。 Audacity 同意我对正确偏移量的估计,MediaPlayer 似乎不同意。
我知道我可以对原始声音文件使用 AudioTrack 并有更好的控制,但是这可能不切实际,因为有很多 mp3 文件,所以使用原始声音数据会变得非常大应用程序或许多大型数据文件。
代码没什么特别的:
player.seekTo(start);
player.start();
CountDownTimer timer = new CountDownTimer(length, 100) {
@Override
public void onTick(long millisUntilFinished) {
if (player!=null) setInt(R.id.nLocation, player.getCurrentPosition());
}
@Override
public void onFinish() {
if (player!=null) {
if (player.isPlaying()) {
player.pause();
}
setInt(R.id.nLocation, player.getCurrentPosition());
player.stop();
player.release();
player = null;
}
}
};
timer.start();
最佳答案
我没能找到 MediaPlayer 以不同方式解释一组 MP3 文件的偏移量 (seekTo) 的规则。例如,当使用 Audacity+Lame 的相同参数(MPEG1,第三层,44100 Hz,192 Kb/s)创建一个新的 MP3 文件时,它工作得很好。
但是:
背景 - 为了告诉 MediaPlayer 从某个偏移量开始播放,我将某些数据存储在 MP3 标签中。我使用一个单独的程序来设置播放(以帧为单位):标签 A,开始帧 = 1000,长度 = 100 帧,标签 B,开始 @1500 等。现在当我需要播放它时,我读取 MP3 标题,确定帧长度,例如 26.12245 ms/帧并计算偏移量(1000 帧将是 26122 ms)。
解决方法是在 MP3 标签中存储帧计数和以毫秒为单位的长度(或再次通过并计算帧数)。然后当启动 MediaPlayer 时,将 MediaPlayer.getDuration()(MediaPlayer 估计值)与存储在 MP3 标签中的持续时间进行比较。然后调整边框大小:
adjustedFrameSizeMs = realFrameSizeMs + (player.getDuration()-storedDurationMs)/storedframeCount;
在我的例子中(对于偏移量不正确的文件)调整后的帧长度始终在 26.08 到 26.09 毫秒之间(而不是 26.12245)。
我试着看看这是否是因为 Android 播放录音的速度更快(所以它估计“实时”,而不是根据帧大小和帧数估计的时间)。似乎它确实播放得更快。但比它自己的估计还要快。例如一段约 1 小时的录音:
实际播放时间比 MediaPlayer 自己的估计少 6 秒 (0.25%)。对不同样本的另一次尝试给出了相同的百分比差异。然而,Audacity 和 Foobar 并不总是与我的估计一致,这并不能让我把所有的责任都推到 MediaPlayer 身上。
关于android - Android MediaPlayer seekTo 的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25813150/
我在 logcat 中收到一条警告消息 W/MediaPlayer-JNI(16795): MediaPlayer finalized without being released 请告诉我我错在哪里
我有以下代码。 例如: if(player1 != null){ if(player1.isPlaying()){ //check if it playing //other
我在安卓系统工作。我正在创建一个正在运行音频文件的 mediaPlayer。我有 10 个按钮。我为每个按钮分配了不同的 url。因此,当我按下按钮 1 时,将播放与按钮 1 相关的 url 歌曲。然
我正在使用 MediaPlayer。我想制作在线流媒体广播。现在我有这个 mediaPlayer 对象(MediaPlayer 的),在 fragment 1 中说,当我在 fragment 1 上时
我使用了以下代码: mp = MediaPlayer.create(this, Uri.parse("file://"+filePath)); mp.start(); 这很好用。然后我想播放文件夹中的
我通过下载新文件来启动我的应用程序,如果有任何文件开始播放循环。然后我每 x 秒触发一个任务来寻找新媒体。调用任务后,视频将停止播放,并显示错误 MediaPlayer finalized witho
我的应用程序允许用户从多个音频流中进行选择,当用户点击其中一个播放按钮时,将调用以下代码: @Override public void onClick(View view) { mMediaP
我正在尝试在我的 ViewController 中播放视频。 Mediaplayer.framework 和所有 Headers 都在我的 Frameworks 文件夹中,包括 MediaPlayer
我正在使用 MediaPlayer 和 SurfaceView 播放本地视频文件。 SurfaceView 是 Activity 中的唯一控件,而我的视频文件是 QVGA 或其他。问题是视频被拉伸(s
我正在使用 JavaFX 的 MediaPlayer 播放 mp3 文件,getCurrentTime() 工作正常,但是当我在某个时候使用 seek() 方法时, getCurrentTime()
我将音量设置为 0.0,然后在 while 循环中一点一点地改变音量。然而,音量从 0.0 跳到 1.0?如何顺利改变音量?我试过了 public class EngineSound extends
我为“播放”和“暂停”按钮创建了两个 onClick 方法,但如果先点击“暂停”,然后点击“播放”按钮,则音乐不会播放。下面是代码 package com.example.myaudio; impor
我用 MediaPlayer 控件创建了一个绑定(bind)服务,它可以加载和播放音频。但碰巧的是,有时 mediaPlayer.prepare(); 速度不够快,并不总是准备好播放。 那么我怎样才能
我正在我的应用程序中播放从网络流式传输的 mp3 文件,一些 mp3 文件有奇怪的行为:mediaPlayer.getCurrentPosition() 大于 mediaPlayer.getDurat
我想制作广播播放器示例,但我有一些错误。我无法修复它。 我的源代码 String url = ""; //Shoutcast Radio URL mp = new MediaPlayer();
我知道有一些类似的问题,但没有一个回答我的问题。当我点击一个按钮时,媒体播放器被调用,并且它出现在日志中。 06-02 00:20:38.980 26035-26035/myapp.com.facad
我正在尝试从 URL 流式传输音频。该代码适用于其他 URL,但其中一个 URL 在 OnPrepared 方法中失败,返回此错误代码:(1, -2147483648)。我看过一些人说这是因为权限,但
我在我的 Android 应用程序中使用 MediaPlayer 来播放视频。当通过 mediaPlayer.pause() 方法暂停播放并调用 mediaPlayer.seekTo(msec) 时,
我的应用程序在 MediaPlayer 流媒体方面存在问题,特别是在 Nexus 5 上。我不确定这是 Nexus 5 还是 API 级别 19 导致的问题。基本上我的 MediaPlayer 准备好
不过,我正在使用 RingtoneManager 来获取 Ringtone。 此信息已包含在 this question and answer 中,但 Google 员工不太可能找到它,除非他们已经知
我是一名优秀的程序员,十分优秀!