gpt4 book ai didi

java - 从 ByteStream 可视化 Android AudioTrack

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:54 24 4
gpt4 key购买 nike

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

最佳答案

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

在您的通知事件中,您可以确定您的 AudioTrack 对象当前的播放位置,然后从原始文件或数组中获取相应的数据切片。然后,您可以使用普通的 2D 图形方法(此处不需要 openGL)将此数据切片绘制到您的 View 中。 This answer有一个用于绘制一段音频数据的 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
}

关于java - 从 ByteStream 可视化 Android AudioTrack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com