2014-11-01 3 views
0

JUCE의 버퍼 내부에있는 신호를 오버 샘플링하여 시각적 기본으로 실행하려고합니다. http://www.juce.com/about-juceJuce ResamplingAudioSource 구현

정확히 말하면 : 오버 샘플은 동일한 시간 동안 샘플 수를 늘리는 것을 의미합니다. 예를 들어 원본 파일이 44100khz 인 경우 샘플 속도를 88200khz로 늘리겠습니다. 이것은 신호에 존재할 수있는 디지털 아티팩트를 감쇄시키는 데 유용합니다. http://www.juce.com/api/classResamplingAudioSource.html#details 내 문제는 내가 클래스를 구현하는 방법을 모르겠입니다 ResamplingAudioSource : 내가 이해에서

는 Juce이에 대한 클래스가 있습니다.

클래스 PluginOversampler : 그래서 같은 클래스의 새로운 인스턴스 생성 시도 공공 ResamplingAudioSource을 { 공개 : PluginOversampler(); ~ PluginOversampler(); 그때 리샘플링 속도를 변경하는 PluginOversampler :: setResamplingRatio (지정된 비율 여기)를 호출 할 수있는 아이디어와

void setResamplingRatio (double samplesInPerOutputSample) 

}

.

그러나 프로젝트는 시각적 기본으로 컴파일되지 않습니다. 오류는 수백 개가 넘고 번호는 100 개입니다. 그들 중 일부는 전역 변수와 관련 내가 다른 .CPP 및 .H 파일

std::string string22 = ""; 

그리고 결과 오류가있는 경우 전반에 걸쳐 사용 string22
: 나는 생략하면

extern std::string string22; 
1>c:\users\friendly2\downloads\final\ctrl\source\plugineditor.h(28): error  C2377: 'std::string' : redefinition; typedef cannot be overloaded with any other symbol 

이 프로젝트는 잘 컴파일

PluginOversampler : public ResamplingAudioSource 

다른 오류 메시지의 선언은 Juce 헤더 파일이 제대로 유형을 정의하지 않는 것이 좋습니다,하지만 난 생각 Juce 파일이 아니라 내 자신의 프로그래밍에서 오류가 발생했습니다.이 프로그램을 구현하기 전에 프로그램이 완벽하게 작동하고 있습니다 (vst 파일은 DAW에서 정상적으로 작동합니다).

class PluginAudioProcessor : public PluginProcessor 
{ 
public: 
    //============================================================================== 
    PluginWidthCtrlAudioProcessor(); 
    ~PluginWidthCtrlAudioProcessor(); 

... 
... 

} 

내가 수업을 'PluginAudioProcessor' 'ResamplingAudioSource'내부의 기능을 상속해야합니까 :

이미 다른 클래스의 인스턴스를했다? 나는 꽤 길을 잃었다.

+0

"시각적 기본으로 돌아 가기".... 그게 무슨 뜻입니까? – rubenvb

답변

0

당신은 #DEFINE DONT_SET_USING_JUCE_NAMESPACE에게

을 사용할 수 있습니다 그리고 당신은 JUCE하기 :: ResamplingAudioSource 또는 기타 주스 클래스가 있습니다.

대부분의 JUCE 클래스는 이미 다른 라이브러리 또는 시스템 라이브러리에 정의되어 있습니다. 이렇게하면 대부분의 버그를 해결하는 데 도움이됩니다.

0

정확히 말하면 : 오버 샘플은 같은 시간 동안 샘플 수를 늘리는 것을 의미합니다. 예를 들어 원본 파일이 44100 khz 인 경우 과 같이 샘플 속도를 88200khz로 늘리십시오. 이것은 신호에 을 표시 할 수있는 디지털 인공물을 감쇠시키는 데 유용합니다.

아니요.

이것은 기본 신호 이론입니다. Nyquist이 있습니다. 당신은 그것에 대해 아무 것도 할 수 없습니다. 신호가 44.1kS/s로 한번 디지털화되었으므로 그 과정에서 손실 된 정보를 되돌릴 방법이 없습니다. (protip : 손실 된 정보가 없으므로 22.05kHz 이상의 주파수로 사람이 물리적으로 지각 할 수 없습니다.).

이제 신호를 생성 한 사운드 카드가 전체 0Hz - 22.05kHz 스펙트럼에서 완전히 선형이 아니었다 고 가정하는 것이 합리적입니다. 이퀄라이징을 통해 계정을 조정할 수 있지만 완전히 다른 이야기입니다. 일반적으로이 과정에서 특수 필터는 보다 낮은의 대역폭을 가지고 있으며 원래 신호보다 이 아니며이 아닌 특수하게 조작 된 디지털 필터를 사용합니다. 그러나 신호를 평준화하는 것은 어려운 문제이며 먼저 디지털화 시스템의 특성을 추정해야합니다. 알려진 표준 신호를 얻을 가능성이 없을 때 거의 불가능합니다.

편집 : 당신이 accidentially (예를 들어, 당신이 typedef mytype std::string 대신 typedef std::string mytype 같은 것을했다) std::string-형식 정의를 다시 시도 같은 방법으로, 당신의 오류가 보인다.