사인파의 경로에 사운드의 피치를 지정하여 내 OpenAL 오브젝트에 내 자신의 연속 피치 변조 (비브라토)를 추가하려고합니다. 이것은 1/30 초마다 반복되는 콜백 메소드와 피치에 대한 getter 및 setter입니다.값을 변경하는 동안 값 변경을 보상 하시겠습니까?
#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로 설정, 그래서 위의 출력은 다음 정현파주기입니다 : 당신이 그 숫자를 보면
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 (예를 들어)를 사용하여베이스 피치를 계속 제어 할 수있게되는 반면, 변조 효과는베이스 피치에 영향을주지 않고 선택적으로 정확하게 발생할 수 있습니다. 나는 길을 찾을 수 없다. 현재, 변조 피치가 1.5에있는 경우
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
따라서, I는 다음과 같이 출력을하고자 아래
내가하려는 적절한 정현파 출력이 현재의 피치에 추가하는 것 :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
피치를 실제로 변경하지 않고 어떻게 변경할 수 있습니까? 그 방법이 움직이는 (또는 움직일 수있는)베이스 피치에서 효과가 발생할 수 있도록 변조 방법을 보상하는 방법이 있습니까?
어디에 문제가 있는지 잘 모르겠습니다. 당신은베이스가 측정치의 무차별 체가되기를 원합니다. 원하는 피치 = Basepitchvar + Measurement. 그러면 Basepitchvar를 동적으로 변경할 수 있습니다. – joejoeson
문제는 사운드가 재생되는 동안 라이브로 발생한다는 것입니다. 비브라토를 실행하려면, 사운드의 음조에 파형을 지정해야합니다 : self.pitch + = newPitch; 개체의 피치가 변경되었으므로 모든 추가 파형 증분이 새로운 변경된 피치에 적용됩니다. – TheDarkIn1978
나는베이스 피치를 유지하면서베이스 피치에 비브라토 웨이브 폼을 지정하는 법을 모릅니다. 플레이 중에베이스 피치에서 적절한 비브라토를 변경하고 실행할 수 있습니다. 물론 – TheDarkIn1978