초보자를 위한 아두이노 코딩 입문-13: 클레멘타인 멜로디 톤 연주steemCreated with Sketch.

in #kr6 years ago (edited)

그림_09.png

아주 오랜 엣날 수메르 문명 시대에도 분명히 음악이 있었겠죠? 자료를 조사해 보니 3,400년 전의 쐐기문자 악보 점토판이 발견되어 1972년에 악보를 복원 후 연주음을 들어 볼 수 있었다. 아래의 인터넷 주소를 방문하여 아름 다운 고대의 음악을 잠깐 즐겨 보기 바라며 이어서 클레멘타인 연주곡을 코딩하여 들어 보자,

Listen to the Oldest Song in the World: A Sumerial Hymn Written 3,400 Years Ago
http://www.openculture.com/2014/07/the-oldest-song-in-the-world.html

그림_08.png

당시의 종교가 어떤 것인지 알 수 없으나 음악을 들어보면 Hymn 찬송가라고는 하지만 그 음조는 동유럽이나 러시아의 3박자 왈츠형 댄스곡에 가까운 듯하다.

현대를 살고 있는 오늘날 우리는 취미로 아두이노 코딩을 이용하여 3,400년 전의 음악 보다 더 소박한 클레멘타인 연주를 들어보도록 하자.

원래 아두이노를 만든 목적이 예능계 쪽 사람들의 컴퓨터 코딩 공부를 도우려고 만들었지만 결코 음악적인 도구로서 도움을 주기 위한 것은 아니다. 하지만 전자 악기 연주의 기본적인 원리를 알아 보는 재미 차원에서 간단한 멜로디를 연주해 보자.
---이 블로그는 스팀잇에 새로이 가입한 회원들을 위하여 Reposting을 통해 재 노출 될 수도 있음을 양해 바랍니다.---

멜로디 톤을 연주하기 위한 아래의 배선은 대단히 간단하다.

그림_01.png

toneMelody 연주에 사용하는 스피커는 시중의 전자공작 키트에 흔히 사용되는 모델을 사용하면 된다. 필자는 네오엘보 공작 박스에 있는 것을 하나 사용하였다. 스피커의 한 선은 GND에 다른 한 선은 디지털 8번 핀에 연결하여 회로구성을 완료한다. 그 이유는 스피커 자체의 직류 전압 하에서의 저항 값 내지는 교류 상태에서의 저항 값(임피던스)이 이미 8옴이므로 충분히 전류 제한이 가능한 상태이다. 스피커 규격은 대체로 4옴, 8옴 및 16옴이 대부분이다. 크기가 작으면 아무런 문제가 없다. 가능하면 배선이 이미 납땜이 되어 있는 모듈을 구매하도록 하자.

그림_02.png
옥션에서 검색어 아두이노 스피커로 구매 가능한 스피커를 찾아보자. 이 모델이 적절하게 이미 납땜 배선이 되어 있으며 8 옴에 1W 출력이다.

그림_07.png

아두이노 스케치 편집기의 파일 탭을 열면 메뉴에서 예제를 찾을 수 있다. 이 예제 중 02.Digital의 toneMelody 코드를 불러내자.

그림_03.png

그림_04.pngtoneMelody 실행을 위해서 이 예제를 불러낼 때 pitches.h 라이브러리가 함께 불려와 설치됨을 알 수 있다. 이 라이브러리 내용은 계명에 해당하는 주파수 테이블을 포함하고 있는 것으로 보인다.

정수형 melody[] 어레이는 아주 짧은 음악 계명 데이터 8개를 설정하고 있다.

noteDurations[]어레이는 계명 별 음표의 길이의 역수를 정의한다. 즉 1000/noteDurations[] 가 실제 음표 길이 즉 박자에 해당한다. 4분 음표, 8분음표, ∙∙∙ 순으로 음의 길이가 정해진다.

계명이 총 8개이므로 8개의 음표 길이를 설정 계산하여 할당한다. 계명과 음표가

준비되면 8번 디지털 핀에 연결된 스피커에 tone() 명령을 통해 실행한다.

아두이노의 음안 연주 톤은 사각형의 단순한 듀티 파형을 사용하므로 다양한 사운드를 제공해주는 신디사이저와 비교해보면 대단히 단조로운 편이다.
음악이 너무 짧으므로 반복적이지만 되풀이시켜 연주 시간을 늘리려면 계명과 박자를 늘리고 아울러 thisNote<8에서 늘린 음과 박자 숫자만큼 8이라는 숫자를 늘려 주어야 한다. 그리고 이 예제 파일은 아두이노 시스템의 example 디렉토리에 이미 저장되어 있기 때문에 저장할 필요가 없다.

짧은 소절의 음정 연주가 성공적으로 이루어졌으면 아래에 첨부된 클레멘타인 연주를 시도해 보자. 이 연주를 시도함에 있어서 앞에서 언급되었던 pitches.h 파일이 동시에 올라와 있어야 한다. 제일 쉬운 방법으로는 toneMelody 예제 파일을 불러 온 상태에서 pitches.h 파일도 함께 로딩되는데, toneMeleody 파일만 다 지우고 toneMelody_Clementine을 복사한 후 저장하고 컴파일 업로딩 하는 방법이다.
두 번째 방법은 스케치 탭의 파일 추가∙∙∙ 명령을 사용하여 불러들이는 방법이다.

그림_05.png

pitches.h 파일은 아두이노 시스템 밑의 examples 디렉토리 속의 02.Digital 밑의 toneMelody 디렉토리에 들어 있는으므로 파일 추가에서 윈도우창이 뜨면 이 위치까지 찾아 들어가서 더블 클릭하도록 한다.

그림_06.png

아두이노 스케치 편집기에 toneMelody 와 pitches.h 가 나란히 뜨면 이 결과를 저장 후 컴파일 업로딩하면 클레멘타인을 들을 수 있다.

좀 더 다양한 음악 연주를 들어 보고 싶으면 직접 악보를 구해다가 코딩 작업을 해야 할 것이다.

클레멘타인 연주를 들어 보았으면 다음의 블로그에서 LED를 배선하여 스타워즈 송을 들어 보도록 하자.

초보자를 위한 아두이노 코딩 입문-15: 스타워즈 송과 함께 번쩍이는 LED
https://steemit.com/kr/@codingart/15-led

toneMelody_Clementine

#include "pitches.h"
// notes in the melody:
int melody[] = {NOTE_A3, NOTE_B3, NOTE_C4, NOTE_C4,NOTE_B3,NOTE_A3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_A3, NOTE_D3, NOTE_FS3, NOTE_A3, NOTE_G3,
NOTE_G3, NOTE_G3, NOTE_G3, NOTE_D3, NOTE_B3, NOTE_B3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_D4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_A3,
NOTE_A3, NOTE_B3, NOTE_C4, NOTE_C4,NOTE_B3,NOTE_A3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_A3, NOTE_D3, NOTE_FS3, NOTE_A3, NOTE_G3,
NOTE_G3, NOTE_G3, NOTE_G3, NOTE_D3, NOTE_B3, NOTE_B3, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_B3, NOTE_D4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_A3
};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 4, 4, 1,
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 3, 4, 1,
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 4, 4, 1,
3, 4, 2, 2, 3, 4, 2, 2, 4, 4, 1, 4, 3, 4, 1
};
void setup() {
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < 60; thisNote++) {
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000 / noteDurations[thisNote];
tone(8, melody[thisNote], noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(8);
}
}
void loop() {
// no need to repeat the melody.
}

Sort:  

!!! 힘찬 하루 보내요!
https://steemit.com/kr/@mmcartoon-kr/5r5d5c
어마어마합니다!! 상금이 2억원!!!!!!

엄청나긴한데 구경이 가능할까요?

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.030
BTC 68140.53
ETH 3250.90
USDT 1.00
SBD 2.65