改变吉他采集PCM数据的持续时间

时间:2011-10-06 18:43:08

标签: audio core-audio audio-streaming

民间,

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

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

我已经实施了Jaffe-Smith算法用于吉他拔除。

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

假设我计算音符A(440 Hz)的样本一秒钟。

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

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

到目前为止一切顺利。

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

重新计算样本0.6秒可能需要相当长的时间。

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

有没有更好的方法来实现我想要做的事情?

提前感谢您的帮助。

此致 彼得

1 个答案:

答案 0 :(得分:1)

你基本上要做的是创造一把合成吉他,是吗?我可能会建议您选择采样器路线。

通过示例,我的意思是一小段音频(不是ADC或DAC意义上的单个样本)。

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

  • 攻击
  • 衰减
  • 推出

这四个部分按顺序工作,通常称为ADSR envelope。音符的攻击是初始声音。对于一把吉他,你会听到一个弹拨和一个音高的开始。当它逐渐消失时,衰变将成为字符串的样本。维持是一次又一次重复的样本,直到您释放密钥。发布样本是释放密钥时播放的内容。对于吉他,您可能会听到轻轻地将手指放回琴弦上以避免振动的样本。

现在,您可以实时生成所有这些示例,但可能会占用大量CPU资源。

关于你的问题:“我可以简单地播放(11025 * 0.6)样本吗?”是的,采样率为11025,音频为0.6秒。另外请记住,您应该向声卡发送连续的数据流,用0填充任何空白点(对于签名的PCM)。