ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NRPN과 RPN 이란?
    노래방 /홍사철의 미디교실 2022. 7. 24. 12:00

    MIDI에서 사용되는 NRPN과 RPN에 대한 정의는?

    [문1] 
    제가 미디 전문가 처럼 콘트롤러 사용을 뛰어나게 하지는
    못하지만 말이죠..(참고로 예전엔 roland xp-10을 음원으로 사용하였기에
    선생님의 강좌에 쓰여진 형식들이 잘 먹혔었지요. 하지만 야마하로 음원을
    바꾸고 나서는 먹히는 건 먹히고 안돼는 건 안돼기에 기초적인 지식을
    알면 응용도 가능하지 않을까 하는 생각에 질문을 했답니다.*^^*)
    유명한 사람의 미디 파일들을 다운 받아 밤낮으로 분석해 보니
    아주 복잡한 콘트롤러 명령을 쓰고 있더군요.
    그게 바로.. NRPN이니 하는 것이 더라구요.. 물론 지금도
    잘 모르지만 그 땐 수치를 조금씩 바꿔보며 이게 이런거구나 하면서
    그저 카피해서 썼답니다..
    하지만 항상 이게 왜 이렇게 되는걸까? 하는 의문이 가시질 않더라구요
    그래서 선생님께 질문을 던졌었습니다..

    참고로 저는 컴퓨터공학을 전공하고 있답니다..^^;

    [답1] 안녕하십니까?
    저런~ 진작 컴퓨터공학을 전공하고 있다고 말씀해 주셨으면 좋았을것을~쯧쯧~
    맞습니다 이 홈페이지의 기본틀 역시 "인간의 혼이 담긴 컴퓨터음악을 위해서..."이며
    이말은 본인의 음악적 추구에 의해 스스로 만든 말이기도 합니다만.
    바로 NRPN이 필요한 이유도 이것에 기인한다고 볼수 있습니다.
    인간적인 맛과 휠을 위한 제어 수단으로 기존의 0...127가지의 Control  메시지로는
    부족하기에 추가적인 제어 요소로 NRPN구조의 명령을 덧붙여 사용하게 됩니다.
    컴퓨터공학을 전공하고 계시다니 설명이 한결 편해집니다.
    기계어를 사용하려면 메시지의 구분자 선언이 필요합니다.
    따라서 상위 바이트 선언인 MSB:Most Significant Bytes,와
    하위바이트 LSB: Least Significant Bytes의 구분으로 어드래스를 정의하여 준후
    Data Entry값의 변수값에 의해 제어되게 됩니다.
    이 정의문들은 귀하의 매뉴얼 후단에 있는 MIDI DATA FORMAT 또는
    MIDI Implementation 에 의거하며 제작자에 의해 정의된  Format과
    국제적인 협약에 의해 정의된 Format로 분류되어 있으나
    사용자에게는 같은 방식으로 사용되어지며 다만, 미리 정의된 규격에 의거하여
    제어해야 한다는 내용이 됩니다. 그러기에 이 제어법을 이해 했다고 해서
    컴프터 C++처럼 귀하 마음대로 시스템을 갖고 놀수는 없는
    규정속에 있는 명령어 일 뿐입니다.
    예를 들어 이것을 제어 하려면 이 제품의 어디를 누루십시오와 같은 맥락입니다.
    이때 볼륨이라는 것은 전 세계적으로 소리를 키우고 줄이는 것으로
    통일된 정의에 대한 메시지일것이고
    어떠한 이상한 기능 특히 귀하가 갖고 있는 제품에만 있는 특수기능의 경우라면,
    이 제품을 고안한 제작자가 이것은 이런 기능이며 이렇게 사용하십시오 와 같은
    그제품 특유의 메시지일것입니다.

    미디에서의 바이트 단위의 정보,즉 MIDI코드는
    상태 바이트( Status Byte )와 데이타 바이트( Data Byte )로 나누어 집니다.
    한 바이트중 최상위 비트( MSB = Most Significant Bit )가 '1'이면
    상태 바이트이며, 최상위 비트가 '0'이면 데이타 바이트인 것입니다.
    즉 데이타가 127보다 크면 상태 바이트, 작으면 데이터 바이트이다라는 정의이며..

    (잠시 휴식~)
    이그~! 진작 "컴퓨터공학 전공이라고 밝혔으면 이고생 안하지~~~!  여튼,..
    모든 설명을 일일이 풀어서 적지 않아도되니 편하기는 합니다~~....(휴식 끝~!)

    MIDI에서는 하나의 상태 바이트에 이어서 0 - 2개의 데이타 바이트가 전송되며
    이것을 묶어서 미디 메세지라고 합니다. 즉 메세지중에서 커맨드 부분이 상태 바이트이고
    데이타 부분은 데이타 바이트가 되는 것이기에
    MIDI Messege = ( Status Byte ) * 1개 + ( Data Byte ) * ( 0 - 2 )개. 로
    이 메시지의 의미이며. 궁극적으로 MIDI 데이타를 처리한다는것은
    MIDI 신호를 메세지 단위로 처리하고 있다는것을
    말하는 것이됩니다. 문장이 맞나?... 어때요 지금까지 무슨 소린지는 대충 아셨죠?~~~
    그럼 계속해서 나아갑니다.
    필자가 보유한 SC-88VL메뉴얼을 근거로 MIDI Implementation자료중에 아래와 같이
    Vibrato와 관련된 메시지를 대충 발췌하여봅니다.

    NRPN
    Data entry
    MSB LSB

      Function and range
     
    01H 08H mmH   Vibrato Rate (relative change)


    mm: 00H - 40H - 7FH (-64 -0- +63)




     
    01H 09H mmH   Vibrato Depth (relative change)


    mm:
    00H - 40H - 7FH (-64 -0- +63)




     
    01H 0AH mmH   Vibrato Delay (relative change)


    mm:
    .
    .
    .
    00H - 40H - 7FH (-64 -0- +63)


    자~ 귀하가 만약에 음원에서 발생되는 음의 떨림속도를
    임의로 제어하고 싶다라고 했을 때..
    보유하고 있는 매뉴얼 예를 들어 SC-88VL 의 MIDI Implementation에서 정의된 내용중
    "Vibrato rate"찾아보니 위의 붉은색의 메시지와 같이 표기 되어 있는데 자세히 살펴보니..
    NRPN:Non Registered Parameter Number에 의한 상위바이트 MSB값 01H는
    지금부터 음원의 시스템을 제어하겠다는 선언의 의미가 되며 다음에 나타나는,
    NRPN:Non Registered Parameter Number에 의한 하위바이트LSB값 08H가 바로
    제어하고 싶은 "Yibrato rate"를 선언하는 메시지임을 알수있습니다.
    이 제 남은 일은 얼마만큼 속도를 제어 할것이냐의 변수값 Data Entry=mmH 
    ,.. mm을 정의해주면 되는데
    mm의 값은 00H:40H.7FH의 범위로 가변할수 있으며
    이 가변범위는 수치상 (-64...0...+63)값을 의미한다는 메시지로서
    "00H" 는 기본값 "0"인 "40H" 보다 "-64"값 정도 느려지고
    "7FH"는 기본값 "0"인 "40H" 보다 "+63"값 정도 빨라진다는 정의를 읽을수 있습니다.
    결국, 귀하가 지금것 의미를 너무 깊게 두고 있는 내용으로
    이렇게 제어할수 있도록 자동차 엔진을 만들었으니 이 내용을 이해 할 수 있는
    능력자라면 알아서 제어하여 훌륭하게 사용하십시오라는
    전문가용 실무서비스메뉴얼쯤으로 이해바랍니다.

    자~! 이제는 이 명령을 이해 하였다면 MIDI시퀀서에서 사용할수 있도록
    컨트럴 메시지 용으로 풀어줄수만 있다면 사용상 불편이 없겠죠?
    풀어봅니다

    MSB  99
    LSB 는  98 그리고
    Data Entry는 6 으로 정의되어 있으니
    MSB 99 의 값은 01H로 10진수로 변환하면 01이 되고
    LSB 98 의 값인 08H는  역시 10진수로   08이되며 마지막으로
    Data Entry 6의값 만 주면 되는데 디폴트가 40H 이더라
    여기에서 00H - 40H - 7FH (-64 -0- +63)가 의미하는 내용을
    다시 풀어보면 00H =0이고 40H=64 이며 7FH=127이기 때문에
    결국 10진수 64라는 수치가 디폴트인 변화치가 없는 0 이라는 것을 알게 됩니다.

    그래서~ 컨트롤 메시지로 정리 해보니 아래와 같이 되었기에
    케이크워크 Event List에서 사용해 봅니다.

    Control 99 - 1
    Control 98 - 8
    Control  6 - 64...(디폴트)

    이 디폴트값을 127쪽으로 변경하면 할수록 따발총 쏘듯이
    점점 Vibrato 속도가 빨라질것입니다.
    그러나 SC-55/88의 경우 14에서 114가지의 범위만 동작되고 있었기에 도표 그대로
    100% 믿을수 없는 부분도 가끔 발견 됩디다.~

    따분했죠? 어쨓든 여기까지 읽느라 수고 많았습니다.
    제발 이해했으면 좋으련만 ~ 이정도 까지가 필자의 한계입니다.
    양해 바라며 이것들에 대한 알기쉬운 자료를 필자가 이미 SC-55가 처음 발표될 때인
    십수년전에 모두 풀어 놓았으니 "인간의 혼이 담긴 컴퓨터 음악을 위해 ..."
    멋지게 활용바랍니다.

    오랜만에 컴퓨터 공학을 전공하는 분이기에 마음 놓고 전문용어를
    들먹여 보았습니다.
    아래 문항들을 차례로 숙지해 보시면 이해하시는데
    많은 도움이 될것입니다.
    참고로 지금까지 미루어 왔던 NRPN이 아닌
    RPN은 드럼용 및 시스템 전체를 제어하는용도로 사용됩니다.

Designed by Tistory.