如何模拟音频处理中的乙烯基划痕效应?

时间:2012-05-07 16:59:25

标签: java android signal-processing audio-processing

我正在尝试制作一个简单的“虚拟划痕”,但我不知道背后的理论。由于我在google上发现没什么用,我在这里问:

  • 当我划伤(向前移动轨道)时会发生什么?我是否提高样品的间距和/或比率?
  • 如何使用音频处理算法模拟这种现象?

示例代码/教程将非常感谢: - )

3 个答案:

答案 0 :(得分:5)

  

当我划伤(向前移动轨道)时会发生什么?我提高了   样本的间距和/或速率?

考虑实际发生的事情:记录包含音频数据。记录针从记录中读取音频数据。随着记录旋转,播放位置改变。 (这与观看播放头在数字音频编辑器中移动音频文件非常相似。)

当您以更快的速度旋转记录时,您正在提高播放速率。音频更快更高音调。将播放速率提高2,音频将高出八度。

当您以较慢的速度旋转记录时,您正在降低播放速率。音频较慢且音调较低。将播放速率降低2,音频将降低八度。

记录只能通过加快或减慢物理记录来修改音频播放,这会影响音高和播放速率。某些音频软件可以独立改变音高和速率。记录球员不能。

(获取一个唱机和实验,听听它听起来像。)

  

如何使用音频处理算法模拟这种现象?

要模仿DJ刮擦记录,您需要能够在用户“刮擦”时调整音频的播放速率。

当用户加速记录时,加快播放速度。当用户减慢记录时,请降低播放速度。

当用户停止录制时,完全停止播放。

当用户反向旋转记录时,反转播放。

您无需更改音频的音高。更改播放速率将自动执行此操作。对音高的任何进一步调整都听起来不正确。

我对图书馆没有任何建议,但如果你花时间,这样的事情并不难实现。

答案 1 :(得分:1)

当你划伤时,你只是在针下来回移动记录。所以它相当于在音频文件的同一部分上反复循环前进和后退。我猜想速度介于正弦波和三角波之间。您需要对样本进行线性插值。

对于移动应用,我首先将屏幕的一个轴映射到音频文件中的时间范围。保留包含最后MotionEvent的缓冲区。当下一个MotionEvent到达时,根据(X,Y)坐标计算映射的开始和结束位置。然后,计算两个MotionEvents之间的经过时间。这为您提供了足够的信息,可以在正确的位置和速度下播放文件,并随着每个动作事件不断更新。

您可能需要对数据进行某种平滑处理,但这是一个起点。

答案 2 :(得分:1)

可变速率重采样器可能是合适的。这将加快播放速度并以相同的比例增加音高。

您可以跟踪“划痕”运动的角速度与正常的盘片旋转速度之间的比率,并将其用作局部重采样率。

比线性插值有更好的(更高音质)DSP方法进行速率重采样,例如使用可变宽度Sinc插值内核。