바람과함께사라지다
749
2021-10-11 12:17:35
6
122

아두이노 코드가 이해가 안 되는데 도와주실 수 있나요?




위 코드가 산토끼 구현한 예제예요!







악보는 여기있구요


계속 시간 날 때마다 구글링하고

많은 예제들 접했는데도 불구하고


noteDuration 부분이 특히 이해가 안 되네요..

저게 어떤 식으로 박자 규칙을 만들어서 짠 걸까요?


음악 전공한 친구한테 물어봐도 규칙성을 찾기가 어렵다네요..

0
  • 답변 6

  • Eleutherius
    1k
    2021-10-11 13:04:46

    어떤 예제를 보고 공부하신건진 모르겠지만 noteDurations의 값이 이상합니다.

    noteDurations는 각 음의 길이를 나타내는 것인데 4분음표와 8분음표는 각각 4,2로 표현되어야 하나, 4분음표가 3으로 표현되어있습니다.

    3,2,2,2,2,3 ... 으로 되어있는것은 음의 길이입니다.

    noteDurations를 사용하는 것을 보면 noteDurations[i] * 250 이라고 사용하실 거예요

  • 바람과함께사라지다
    749
    2021-10-11 13:38:49

    아! 감사합니다 그러면 3을 4로 바꾸면 모든 게 해결되는 걸까요?


    원래 있던 소스코드는 이거예요!



    #include "pitches.h"
    int melody[] = {NOTE_G4, NOTE_E4, NOTE_E4, NOTE_G4, NOTE_E4, NOTE_C4, 0,
                    NOTE_DS4, NOTE_E4, NOTE_DS4, NOTE_C4, NOTE_E4, NOTE_G4, 0,
                    NOTE_C5, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_E4, 0,
                    NOTE_G4, NOTE_DS4, NOTE_F4, NOTE_E4, NOTE_DS4, NOTE_C4, 0
                   };
    int noteDurations[] =  {3, 2, 2, 2, 2, 3, 1,
                            3, 2, 2, 2, 2, 3, 1,
                            3, 1, 2, 2, 2, 2, 3, 1,
                            3, 2, 2, 2, 2, 2, 1
                           };
    void setup() {
      // iterate over the notes of the melody:
      for (int thisNote = 0; thisNote < 28; 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 = 250 * 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() {}


  • Eleutherius
    1k
    2021-10-11 18:20:01

    현재 어떠한 문제점이 있다는것을 알수가 없습니다... 무엇이 문제였는지, 무엇이 해결되어야하는지 알 수 있을 까요?

  • 바람과함께사라지다
    749
    2021-10-11 18:36:52

    아 그 noteDuration의 값이 이상하다고 하셨잖아요?

    그러면 noteDuration의 부분에서

    4분음표는 '4'일 것이고

    8분음표는 '2'일 것이고

    16분음표는 '1'일 것인데


    Eleutherius 님이 말씀하신 건

    '3'이라는 값이 이상하다는 것 맞으시죠?


    그래서 그 '3'이라는 값을 '4'로 바꾸는 게 정답인가 해서 여쭤봤습니다!


    음악 음표 이쪽에 대해 1도 모르다 보니 다른 코드를 짤 때

    noteDuration을 어떤 식으로 이용해야 될지 모르겠습니다 ㅠㅠ


  • Eleutherius
    1k
    2021-10-11 21:29:07

    넵! 맞습니다

  • 바람과함께사라지다
    749
    2021-10-11 22:02:46

    아 감사합니다! 이런 로직으로 한번 짜보겠습니다 :)

  • 로그인을 하시면 답변을 등록할 수 있습니다.