음악, 삶, 개발

AudioPlayHead 클래스 본문

개발 공부/Juce 공부방

AudioPlayHead 클래스

Lee_____ 2020. 10. 6. 18:26

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 포럼 질문글 >

 

How to get info from DAW

Getting BPM and Beats

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

PPQ and AudioPlayHead

AudioPlayHead::CurrentPositionInfo::timeInSamples can be smaller than zero?

AudioPlayHead isPlaying and Ableton