-
vvvv gamma 패치 리뷰 : 오디오 데이터 받아오기 / Audio visualization 오디오 시각화 (1)Graphics/VVVV gamma 2023. 10. 16. 22:35
버전: vvvv gamma 5.0
오늘은 과제로 제출했던 Selbstporträt의 vvvv gamma파일을 다시 풀어 어떻게 만들었는지,
배운 내용을 복습하고 메모해두려 한다.
우선 결과 이미지는 보라색계열의 점과 선들이 원 모양으로 반복되어 생기는 모습이다.
또한 오디오 데이터를 받아 소리가 클수록 원의 크기가 커지며 더 바깥쪽에 생겨나게 된다.
소리가 설정해둔 일정 기준보다 작다면 원은 생기지 않는다.
최종적인 결과가 담긴 패치화면이다.
우선, 큰 순서로 노드 추가 및 연결 과정을 정리하자면, 아래 순서로 나열할 수 있다.
1. 오디오 데이터 받아오기.
2. 원을 만든 다음, 소리에 따라 크기가 반응하게 하기.
3. 그 원의 아웃라인을 따라 점이 만들고 그 사이를 선으로 연결하기.
4. 최종적으로 보여줄 화면에 맞춰 효과를 주거나 값들을 조정하기.
하나씩 살펴보며 어떻게 구성되어 있는지 분석해보았다.
1. 오디오 데이터 받아오기.
노드 연결의 가장 첫 시작 부분이다.
AudioIn: (out) - AudioSignal(Spread)
=> 컴퓨터에 들어오는 오디오 볼륨과 주파수(음 영역대)를 내보낸다.
노드에 마우스 커서를 가져다대면 어떤 역할을 하는지 볼 수 있는데 AudioIn에는
"Returns the audio input signals"라고 적혀있다.
AudioSignal은 스테레오 타입으로 왼쪽과 오른쪽의 사운드 2개 값을 가진 배열로 이루어져 있다.
그 중에서 한쪽 음성만 사용하기 위해 GetSlice와 연결했다.
(이후에 알게 되었지만 ToMono라는 노드를 통해서도 간단히 변환이 가능하다.
오디오 장비를 사용하지 않으면 왼쪽 오른쪽이 모두 동일한 값을 가지기 때문에 임의로 이렇게 작업한듯 싶다.)
How to get items out of a spread (GetSlice Info) GetSlice의 Info창을 열어보면 위와 같은 예시를 볼 수 있다.
GetSlice: (in) - Spread, Default Value, Index
(out) - Spread 인풋에서 받은 타입과 동일
=> Spread(배열의 vvvv gamma식 표현)를 받아 index 인풋을 지정해주면 해당 인덱스의 값이 출력됨.
그렇다면 Default Value 인풋은 어떻게 활용되는지도 살펴보았다.
How to get items out of a spread (GetSlice Info) 그 경우도 친절하게 안내해준 예제가 포함되어 있었다.
Input이 아예 없을때, Default Value로 설정해둔 값을 내보낸다.
Input이 아예 없어야 한다. 다른 경우는 해당되지 않는다.
예를 들어, 인덱스 넘버가 4까지 있는 Spread가 있다고 가정했을때 인덱스 5를 호출하면 그에 해당하는 값이 없다.
이 경우 Default Value가 호출될 것 같지만 한바퀴 돌아 다시 0번째 인덱스 값이 호출된다.
GetSlice로 내보낸 한쪽 오디오를 Meter 노드에 연결한다.
Meter: (in) - AudioSignal
(out) - Level(Float32), Level dBFS(Float32)
=> 단일 AudioSignal을 받아 최대 오디오 시그널 데시벨을 계산한다. 그리고 dBFS와 Level값으로 각각 내보낸다.
Meter의 데시벨 값은 이후에 활용될 것이다.
다시 GetSlice의 아웃풋으로 돌아가면 FFT노드와 연결된 것을 볼 수 있다.
FFT는 다른 예시에 활용해보면서 더 공부해야할 것 같다.
아직 인풋값들이 무엇을 나타내는지 부정확하게 이해하고 있다.
FFT: (in) - AudioSignal, BufferSize, Window Function, Smoothing, dbRange
(out) - IReadList <Float32>
=> 오디오 시그널을 받아 각 주파수의 레벨(소리크기)들을 리스트로 내보내준다.
주파수를 얼마나 촘촘하게 가져갈지는 BufferSize에서 결정할 수 있다.
FFT의 아웃풋은 총 256개의 값을 가진 리스트이다.
개중에서 맨 앞 작은 주파수 영역들은 실내음에도 반응할 정도로 예민하다.
사람의 목소리나 노래 등의 사운드에만 반응하도록 리스트 앞쪽의 값들은 select 노드를 통해 잘라내도록 했다.
Select(/Spread): (in) - a Sequence, Alive Values
(out) - Spread
=> 시퀀스를 받아 Alive Values 인풋으로 사용할 값들만 true로 설정한 뒤, 그 값들만 Spread로 내보낸다.
이번에 값이 256개인것처럼 보통 시퀀스가 가진 값들이 매우 많다.
이를 하나하나 네모칸을 눌러 True로 바꿔주기에는 매우 번거로울 것이다.
쉽게 바꿀 수 있는 방법은 아래와 같다.
우선 그냥 처음에 연결한 뒤, Alive Values를 빼보면 1로 설정되어 있고 False로 조정되어 있을 것이다.
이 상태에서 100까지의 값을 False로 만들기 위해서는 Flase로 둔 채로 1에서 100으로 값을 바꾼다.
그러면 1개일때의 상태가 복사되면서 100개의 인덱스가 모두 False가 된다.
이제 101번째부터 256번째 인덱스까지 True로 조정해보자.
다시 101로 값을 바꿔준 뒤, 마지막 101번째 Boolean 값만 True로 바꿔준다.
그리고 그 상태에서 값을 256으로 바꿔준다.
101번째부터 256번째 까지의 값은 True로 바뀌어 있는 것을 볼 수 있다.
이렇게 필요한 오디오 데이터를 바꿔오는 것까지는 준비를 마쳤다.
다음으로는 이에 반응할 원을 만들어줄 것이다.
'Graphics > VVVV gamma' 카테고리의 다른 글
vvvv gamma 패치 리뷰 : 오디오 데이터 받아오기 / Audio visualization 오디오 시각화 (2) (0) 2023.10.23 vvvv gamma 노드 리뷰 : How to generate a random walk (Wanderer 예제) (0) 2023.10.19 vvvv gamma 노드 리뷰 : Reference Resample (ResampleBSpline 예제) (1) 2023.10.11 vvvv gamma : Controlling Patches / VL7. (1) 2023.10.08 vvvv gamma : Spreads & Iteratio / VL6. (0) 2023.10.07