음악, 삶, 개발
AudioPlayHead 클래스 본문
AudioPlayHead::CurrentPositionInfo 클래스
< AudioProcessor 클래스의 getPlayHead() 함수 >
아래는 AudioProcessor 클래스안에 getPlayHead() 함수에 대한 설명이다.
읽어보자.
AudioPlayHead 클래스는 내가 단독으로 객체를 만들면 안되고,
AudioProcessor 클래스안의 processBlock 함수에서
getPlayHead() 라는 함수를 통해 AudioPlayHead 객체에 접근해야한다.
getPlayHead() 는 AudioPlayHead 포인터를 return 하는데,
이 포인터를 절대 저장하지말고, 오디오 thread 가 아닌곳에서 접근하려하지말라고한다.
한마디로 processBlock() 안에서만 사용해야한다. (포인터를 저장하지말고)
< 예제 코드 >
void processBlock(juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiBuffer) override {
juce::AudioPlayHead::CurrentPositionInfo info;
getPlayHead()->getCurrentPosition(info);
DBG(info.bpm);
}
위의 코드를 보면, info 를 getPlayHead()->getCurrentPosition(info) 로 업데이트하고있다.
위의 Juce 문서에서 pointer 를 저장하지말라고했서
getPlayHead()->getCurrentPosition(info) 같은 코드가 나온것이다.
info 는 output 파라미터이다.
이런 모양새가 꽤나 당황스러울수있는데,
Juce 코드를 보다보면 이런것들이 꽤 자주 등장한다.
하지만 내가 만들 함수에서는 이런 input 파라미터가 output 파라미터가 되는 것은 피해야한다.
< AudioPlayHead::CurrentPositionInfo 클래스의 멤버 변수들 >
사실은 클래스가 아니라 구조체라서, 따로 get 함수가 없으니
. 연산자를 사용하여 바로 접근하면 된다.
< Juce 포럼 질문글 >
Call AudioPlayHead::getCurrentPosition outside processBlock
Can not get bpm from AudioPlayHead->getCurrentPosition
AudioPlayHead position info not working in AU + Live 9
AudioPlayHead simple example needed for noob
AudioPlayHead::CurrentPositionInfo::timeInSamples can be smaller than zero?
AudioPlayHead isPlaying and Ableton