关于音频:更改PCM数据中吉他弹奏的持续时间

Changing duration of Guitar pluck in PCM data

民间,

我正在努力解决一个与PCM数据播放时间有关的简单概念。非常感谢您的反馈。

我正在开发的应用程序会播放音乐单中的吉他音符。

我已经实现了用于吉他弹拨的Jaffe-Smith算法。

https://ccrma.stanford.edu/~jos/Mohonk05/Extended_Karplus_Strong_EKS_Algorithm.html。

假设我在一秒钟内为音符A(440 Hz)计算采样。

我将以11025的采样率存储11025个可以作为PCM音频发送到计算机扬声器的采样。

对于吉他上所有独特的音符,要花费所有时间来计算所有音符的样本。我想我将预先计算并将它们保存为二进制数据,并在运行应用程序时简单地加载它们。

到目前为止一切都很好。

现在,假设我想播放一首歌(各种音符列表)。假设这首歌需要以每分钟100拍的速度播放。假设我必须演奏音符A一拍或0.6秒(60/100)。

重新计算样本0.6秒可能要花费一些时间。

我可以简单地播放(11025 * 0.6)个样本吗?这会产生副作用吗?

是否有更好的方法来实现我想做的事情?

在此先感谢您的帮助。

关于,
彼得


您基本上想做的是制造合成吉他,是吗?我可能建议您改用采样器路线。

按样本,我是指一小段音频片段(就ADC或DAC而言,不是单个样本)。

基本上,您可以将所需的内容分成4部分:

  • 攻击
  • 衰变
  • 支持
  • 释放

这四个部分按此顺序工作,通常称为ADSR信封。音符的起音是初始声音。对于吉他,您将听到弹拨和音高的开始。衰减将成为弦的样本,因为它开始逐渐消失。延音是一遍又一遍重复的样本,直到您松开琴键为止。释放示例是释放键时所播放的内容。对于吉他,您可能会听到一个样本,手指轻轻地放回琴弦上以停止其振动。

现在,您可以实时生成所有这些样本,但是可能会占用大量CPU。

关于您的问题:"我可以简单播放(11025 * 0.6)个样本吗?"是的,以11025的采样率,将是0.6秒的音频。还请记住,尽管您应该将连续的数据流发送到声卡,并用0(对于带符号的PCM)填充任何空白点。