Del*_*nja 5 java graphics android
我目前正在使用AudioTrack播放录制的音乐。这涉及将轨道数据写入音频缓冲区。如何使用音频数据流在屏幕上绘制表示实时播放的音频的波形?在不确定如何入门之前,我还没有在android上使用任何高级图形。我必须使用openGL还是可以实现View?以及如何将数据转换为有用的图形。
您的第一步是致电setPositionNotificationPeriod(periodInFrames)。这决定了您的应用程序收到呼叫的频率onPeriodicNotification。因此,如果您正在进行示波器类型的可视化,并且希望在任何给定时刻在屏幕上显示 50 毫秒的音频数据,则可以使用periodInFrames值 2205(假设您的 WAV 文件是单声道,每个样本 16 位,并且44,100 Hz 采样率)。
在通知事件中,您可以确定 AudioTrack 对象当前的播放位置,然后从原始文件或数组中获取相应的数据片段。然后,您可以使用普通的 2D 图形方法(此处不需要 openGL)将此数据切片绘制到您的视图中。 这个答案有一个用于绘制音频数据切片的 C# 示例 - 易于转换为 java。
所以你的代码最终会看起来像这样:
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
}
| 归档时间: | 
 | 
| 查看次数: | 1727 次 | 
| 最近记录: |