首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ByteStream可视化Android AudioTrack

从ByteStream可视化Android AudioTrack
EN

Stack Overflow用户
提问于 2011-01-27 07:11:20
回答 2查看 1.8K关注 0票数 5

我目前正在使用AudioTrack播放录制的音乐。这包括将轨道数据写入音频缓冲器。如何使用音频数据流在屏幕上绘制代表正在实时播放的音频的波形?在我不确定如何开始之前,我没有在android上使用过任何高级图形。我必须使用openGL吗?或者我可以实现视图吗?以及如何将数据转换为可用于绘图的有用数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-27 07:39:02

第一步是调用setPositionNotificationPeriod(periodInFrames)。这决定了应用程序接收onPeriodicNotification调用的频率。因此,如果您正在进行示波器类型的可视化,并且希望在任何给定时刻在屏幕上显示50毫秒的音频数据,则可以使用periodInFrames值2205 (假设您的WAV文件是单声道,每个采样16位,采样率44,100 Hz )。

在通知事件中,可以确定AudioTrack对象的回放当前所在的位置,然后从原始文件或数组中获取相应的数据切片。然后使用普通的2D图形方法将该数据切片绘制到视图中(这里不需要openGL )。This answer提供了一个C#示例来绘制一段音频数据--很容易转换成java。

所以你的代码看起来就像这样:

代码语言:javascript
复制
audioTrack.setPositionNotificationPeriod(2205);
audioTrack.setPlaybackPositionUpdateListener(this);

...

public void onPeriodicNotification(AudioTrack track) {
    int pos = track.getNotificationMarkerPosition();
    short[] slice = Array.copy(_data, pos, _sliceSize) // pseudo-code
    // render the slice to the view
}
票数 3
EN

Stack Overflow用户

发布于 2012-03-12 20:40:16

关于这一点,我建议您使用android.media.audiofx.Visualizer类来处理波形数组或频率数组的生成。所以你唯一需要注意的就是图形的绘制。

从API 9发布起,您就可以使用这个类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4811211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档