시퀀서가 아니라 시퀀서의 실제 인터페이스입니다. 시퀀서는 시퀀서가 연결된 랩톱에서 실행되는 응용 프로그램으로, 사용자는 드럼 루프를 즉석에서 만들 수 있습니다. 꽤 재미 있지만 시퀀서는 '온보드'가 아니기 때문에 랩톱이 필요합니다.
내가 좋아하는 것은 장치 내에서 시퀀싱을 수행하는 것입니다.
이제 USB MIDI 연결을위한 클래스 컴플라이언스를 해결하는 방법을 알고 있다고 가정하고, 5 핀 DIN 포트에서 MIDI 노트를 전송하기 위해 arduino를 연결하는 방법을 알아낼 수 있다고 가정하겠습니다. 내가 가장 걱정하는 것은 이벤트 루프가 실행될 때마다 일정하지 않은 타이밍으로 인해 시간에 따른 템포 드리프트입니다.
내가 아는 것 :
delay()
템포 루프를 제어하는 데 의존해서는 안됩니다 . 지연은 펌웨어의 모든 작동을 중지하며 시퀀스가 실행되는 동안 물리적 사용자 인터페이스를 변경하여 변경해야하므로 작동하지 않습니다.millis()
특정 카운트가 경과하면 펌웨어가 계속 작동하고 작동 할 수 있기 때문에 기반으로 계산하는 것이 좋습니다.물리적 컨트롤 중 어느 것도 인터럽트 루틴을 트리거하지는 않지만 일부 작업은 메인
loop()
실행을 지연시킬 수 있습니다 . 사용자 입력을 기다리는 함수를 디자인하면millis()
카운트가 끝나면 "마감"이 누락되는 문제가 발생할 수 있습니다 . 나는이 문제가 내 자신의 디자인이라는 것을 알고있다 ...
질문 :
A. AVR 기반 arduino는 사용자 인터페이스를 폴링하고 미션 크리티컬 타이밍 루프를 실행하기에 적합한 마이크로 컨트롤러입니까? ARM 기반 Arduino가 훨씬 빠르다는 것을 알고 있습니다. Teensy 3.0이 더 나은 대안일까요? 이 두 가지 모두 3.3V 보드이므로 작동해야 할 또 다른 문제입니다 ...하지만 지금은 무시하겠습니다.
B. 작업을 두 개의 마이크로 프로세서로 분할해야합니까? 하나는 사용자 인터페이스 폴링 및 업데이트를 처리하고 하나는 미션 크리티컬 타이밍 루프를위한 것입니다.
씨. 다른 것?
나의 주요 목표는 컴퓨터를 전혀 사용할 필요가 없다는 것입니다. 나는 또한 스윙을 계산하고 싶지만,이 경우 스윙은 정확한 타이밍과 템포를 가지고 있지 않다면 아무 의미가 없습니다. 조언 해 주셔서 감사합니다!
noInterrupts();
지터를 중지하고 원하는 모든 인터럽트를 중지합니다.