2016년 10월 3일 월요일

버저(Buzzer) 다루기

버저(Buzzer)는 소리를 낼 수 있는 대표적인 부품입니다.

버저의 원리는 얇은 전극판을 전기적 신호로 떨리게 만들어서 소리를 내는 것입니다. 여기서 소리를 내는 전기적 신호는 진동수(Frequency)를 의미하며 Digital 신호로 이 효과를 만들어 냅니다.
버저를 제어하는 아두이노 회로도는 다음과 같습니다.

이 회로에서 쓰는 저항의 역할은 소리 볼륨(Volume)을 조절하는 것입니다. 저항의 크기가 클수록 소리 크기가 작아지고 저항의 크기가 작을수록 소리 크기는 커집니다.
이 회로를 유니티에서 다룰려면 아두니티 Wire Editor에서 다음과 같이 연결합니다.

아두이노 스케치를 Export하고 Upload하면 유니티에서 버저를 제어할 준비가 끝납니다.
아두이노 보드를 연결한 후, GenericTone의 ToneFrequency를 변경하면 버저에서 소리가 납니다.



전자 피아노 만들기
유니티의 UI Button으로 버저 음계를 선택하도록 한다면 전자 피아노를 쉽게 만들 수 있습니다.
우선, 음계를 제어할 UI Button을 만듭니다.

각 버튼이 눌릴때마다 GenericTone의 ToneFrequency를 변경하면 됩니다.
ButtonReactor를 사용하면 버튼의 눌림 상태를 알아낼 수 있습니다.

그러나, ButtonReactor는 ToneFrequency 값을 바꿀 수는 없기에 이 역할을 할 기능이 필요합니다.
ToneOutput은 지정한 ToneFrequency 값을 GenericTone에게 전달할 수 있는 기능을 갖고 있습니다.



ToneOutput에 필요한 ToneFrequency를 선택하고 GenericTone에 연결하면 됩니다.



전자 기타 소리 내기
ToneFrequency를 사용하면 버저의 음계를 쉽게 잡을 수 있습니다. 그러나, 음계간의 부드러운 소리 연결이나 바이브레이션(Vibration)등의 소리 효과는 내기가 어렵습니다.
CurveOutput을 이용하면 쉽게 이런 효과를 낼 수 있습니다.


CurveOutput의 Start/Loop/End Curve를 아래와 같이 만들어주면 마치 전자 기타 소리같은 효과를 낼 수 있습니다.

CurveOutput과 ToneOutput을 결합하면 ToneFrequency값이 Curve형태로 전달됩니다.



RTTTL Song
버저를 활용할 때 빠질 수 없는 것은 멜로디 연주입니다. 음악은 악보로 표현되고 이 악보를 컴퓨터로 표현하려면 아주 많은 노력이 필요합니다.
악보에는 음악 표현에 필요한 정보가 포함되어 있다.

일반적으로 음악을 표현하려면 다음과 같은 정보가 필요합니다.
  • 음의 순서
  • 연주 속도
  • 음의 길이
  • 음의 높낮이
따라서, 이와 같은 모든 정보를 코드로 표현하려면 프로그램이 매우 복잡해집니다. 더 큰 문제는 곡마다 이 정보가 다르므로 매번 다르게 만들어야 한다는 것입니다.
RTTTL(Ring Tone Text Transfer Language)는 핸드폰 벨소리를 표현하기 위해 노키아(Nokia)에서 제정한 멜로디 표현에 대한 표준 규격입니다. (위키피디아에서 RTTTL에 대해 알아보기)
RTTTL을 이용하면 멜로디 연주를 아주 쉽게 할 수 있습니다.
RTTTL Song은 인터넷에서 쉽게 구할 수 있고, 그 문법이 간단하기 때문에 자신이 직접 음악을 만들 수도 있습니다.



  • songAsset: RTTTL Song이 기입된 Text 파일

아두니티 에셋에 포함된 SampleSong을 선택하고 유니티를 Play하면 SampleSong에 포함된 멜로디 목록을 선택하고 연주할 수 있습니다.

GenericTone과 다음과 같이 연결하면 RTTTL Song이 연주됩니다.


지금까지 버저 활용을 동영상으로 확인하기 바랍니다.




댓글 없음:

댓글 쓰기