首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在改变值的同时补偿值的改变?

在改变值的同时补偿值的改变?
EN

Stack Overflow用户
提问于 2010-02-06 14:23:50
回答 1查看 245关注 0票数 0

我尝试通过将声音的音高指定为正弦波的路径,将我自己的连续音调(vibrato)添加到我的OpenAL对象中。这是我的回调方法,它每隔1/30秒重复一次,以及用于间距的getter和setter。

代码语言:javascript
复制
#define kMaximumAplitude 0.025
#define kVibratoDegreeIncrements is 45
#define kDegreesToRadians(x) (M_PI * (x) / 180)

- (void)vibratoCallBack:(NSTimer *)timer
       {
       float newPitch = kMaximumAplitude * sin(kDegreesToRadians(vibratoDegreeIncrements));
       self.pitch += newPitch;

       vibratoDegreeIncrements += kVibratoDegreeIncrements;
       }

- (void)setPitch:(ALfloat)newPitch
 {
 pitch = newPitch; 
 alSourcef(sourceID, AL_PITCH, pitch);
 }

- (ALfloat)pitch
 {
 return pitch;
 }

默认音调设置为1.0,因此上述输出的正弦波周期如下:

代码语言:javascript
复制
Wrong Pitch: 1.000000
Wrong Pitch: 1.017678
Wrong Pitch: 1.042678
Wrong Pitch: 1.060355
Wrong Pitch: 1.060355
Wrong Pitch: 1.042678
Wrong Pitch: 1.017678
Wrong Pitch: 1.000000

然而,如果你观察这些数字,你会发现它们并不是一个正弦波。据我所知,原因是self.pitch随着正弦波的增加而增加了自身。我希望基础音高(未调制的音高)在颤音方法的音高改变之前保持不变。这样做将允许我继续使用UISlider控制基音高(例如),而调制效果可以选择性且准确地发生而不会影响基音高。我找不到办法。

下面是正确的正弦波输出,我想添加到当前的音高:

代码语言:javascript
复制
Correct Pitch: 0.000000
Correct Pitch: 0.017678
Correct Pitch: 0.025000
Correct Pitch: 0.017678
Correct Pitch: 0.000000
Correct Pitch: -0.017678
Correct Pitch: -0.025000
Correct Pitch: -0.017678
Correct Pitch: -0.000000

因此,如果当前未调制的音调为1.5,我希望输出如下所示:

代码语言:javascript
复制
Desired Pitch: 1.500000
Desired Pitch: 1.517678
Desired Pitch: 1.525000
Desired Pitch: 1.517678
Desired Pitch: 1.500000
Desired Pitch: 1.482322
Desired Pitch: 1.475000
Desired Pitch: 1.482322
Desired Pitch: 1.500000

怎么可能在不影响音高的情况下改变音高呢?有没有一种方法可以补偿方法内部发生的调制,以便在移动(或可移动)的基音节距上产生效果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-07 02:17:12

我认为您只需要将数据分开。有一个基音高存储你的基音高,这将是一个未修改的正弦波。然后你需要另一种方法来产生颤音声波,这是同步于你的基音高。然后,您需要一个getter来返回最终波形的当前音调。换句话说,你不需要像现在这样存储最终波形的音调,你只需要按需计算它。

代码语言:javascript
复制
- (ALfloat) getFinalPitch
{
return getBasePitch() + getVibratoPitch();
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2212275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档