- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到许多资源建议在现代Android版本上使用AudioTrack.getTimestamp()
来计算音频/视频同步的音频延迟。
例如:
https://stackoverflow.com/a/37625791/332798
https://developer.amazon.com/docs/fire-tv/audio-video-synchronization.html#section1-1
https://groups.google.com/forum/#!topic/android-platform/PoHfyNK54ps
但是,这些方法都不能解释,如何使用时间戳来计算延迟?我正在努力弄清楚如何使用时间戳的framePosition / nanoTime来提供延迟数字。
最佳答案
因此,在使用此API之前,您将使用AudioTrack.getPlaybackHeadPosition()
,这只是一个近似值。因此,要考虑延迟,您必须使用两个隐藏方法之一中的延迟值来抵消该值:AudioManager.getOutputLatency()
或AudioTrack.getLatency()
。
使用新的AudioTrack.getTimestamp()
API,您可以在给定的时间获取播放头位置的快照,并直接在输出中拍摄。这样,它是完全准确的,并且已经解决了设备延迟问题。因此,现在无需调用任何其他API来添加/删除延迟。
需要注意的是,此时间戳仅是快照,文档建议您不要经常调用此新方法。因此,获得“当前”位置的技巧是使用上一个快照并线性插值当前值:
playheadPos = timestamp.framePosition +
(System.nanoTime() - timestamp.nanoTime) * samplerate / 1e9;
AudioTrack
中多少帧,每次
AudioTrack.write()
完成时,该计数器都会递增:
int bytesWritten = track.write(...);
writtenPos += bytesWritten / pcmFrameSize;
ENCODING_AC3
,则
AudioTrack
报告的播放头位置仍以样本为单位。您将需要将其转换为字节,或者将已写入的字节数转换回样本。无论哪种方式,您都需要知道AC3流的比特率(即
384000bps
)
int bytesWritten = track.write(...);
writtenPos += bytesWritten * samplerate / (bitrate / 8);
关于android - 如何在Android上使用AudioTrack.getTimestamp()计算延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581054/
java.util.Date、java.util.Timetamp 似乎让很多人感到困惑。在 StackOverflow 中有很多问题,不幸的是我的问题有点扭曲。 有 2 个 JDBC api。他们应
我看到许多资源建议在现代Android版本上使用AudioTrack.getTimestamp()来计算音频/视频同步的音频延迟。 例如: https://stackoverflow.com/a/37
我需要一个像 Stopwatch.GetTimestamp() 这样的时钟 获取值时的开销很小 精确到至少 1 毫秒(不减少操作系统范围的计时器间隔) 不必与一天中的实际时间 Hook (例如 Dat
我使用jdk-1.6, 操作系统-红帽5, driver-class12.jar,(jar 和 jdk lib) 数据库-Oracle 10g 对于 resultset.getTimestamp("C
我的要求:从数据库 ResultSet 获取时间戳(以 UTC 格式存储)并以线程安全的方式执行此操作。 我的代码目前如下所示: Calendar utcCal = Calendar.getInsta
我的数据库中有以下条目: Start End 2013-08-25 14:23:20 2013-09-14 14:23:20 (类型为datetime,数据
我有一个表 timestamptest,其中有一列 timestamp 类型为 timestamp without time zone。 我在此表中插入了一个值: insert into timest
我正在尝试从 ObjectID 获取时间戳,但 Mongo 一直给我这个错误。我错过了进口吗?将时间戳转换为标准日期格式的最佳方法是什么? video['date'] = video['_id'].g
我在来自 mongodb 的 _id 上调用了 .getTimeStamp 方法,其输出如下 Fri Apr 24 2015 15:28:34 GMT+0100 (GMT Daylight Time
在使用 Stopwatch.GetTimestamp() 时我们发现,如果您记录返回值,然后继续调用它并与之前的返回值进行比较,它最终会意外地返回一个小于原始值的值。 这是预期的行为吗? 在生产代码中
副本:How to get timestamp of tick precision in .NET / C#? 我如何从 Stopwatch.GetTimestamp() 到 DateTime 假设
在我的数据库中,我将值设置为 9/28/2010 11:30:00 PM。 现在我正在使用dataResultSet.getTimestamp(3),它给我一个值为2010-09-28 23:30:0
可能没有办法处理匿名对象? 我想做这样的简短思考: echo (new DateTime())->getTimestamp(); 在 javascript 中我们可以很快使用: alert( (new
我有一个包含列类型的表:timestamp。存储在那里的数据如下所示: 我想做一个简单的选择,看看给定的开始日期和结束日期之间是否有一个日期。 这是我目前所做的: $starttime = $_POS
我目前正在使用 ResultSet,但想切换到 Hibernate 查询。 我有这个代码: Statement stmt = nfCon.createStatement(); stmt = nfCon
我在 MySQL 数据库中有一个 DATETIME 类型的列,其值为 2012-05-07 19:59:12。我正在尝试从数据库中检索此值,假设它存储在 UTC 时区中: Calendar cal =
我在部署在 eclipse 中运行良好的应用程序时遇到了问题,但在创建可运行的 jar 时生成了以下错误(使用选项:将所需的库提取到生成的 JAR 中): org.eclipse.swt.SWTExc
当出于某种原因将 JDBC 用于 SQLite 时,日期和时间戳值正确存储在数据库中,在使用命令行 sqlite3 工具时正确显示,但是当使用 ResultSet 函数检索这些值时,它不起作用。下面是
本文整理了Java中org.openimaj.video.xuggle.XuggleVideo.getTimeStamp()方法的一些代码示例,展示了XuggleVideo.getTimeStamp(
本文整理了Java中us.ihmc.robotDataVisualizer.logger.YoVariableLogPlaybackRobot.getTimestamp()方法的一些代码示例,展示了Y
我是一名优秀的程序员,十分优秀!