2011-03-19 1 views
4

드럼 머신과 유사한 오디오 멀티 트랙 시퀀서를 만들고 싶습니다. 이것을 구현하는 가장 좋은 방법은 무엇이라고 생각하십니까?음악 시퀀서 프로그래밍

현재 2 개의 트랙으로 표현되는 2 개의 트랙이 있습니다 : 2 x [tick, samplePointer]. 메인 배열에서이 두 트랙을 병합하여 재생 [tick, samplePointer]하고 틱별로 정렬합니다. 오디오 콜백은 모든 틱 (비트 당 4 틱)을 발생시키고 배열의 첫 번째 요소를 확인하고 해당 틱이 전역 노래 위치 (틱)와 같으면이를 재생합니다. 2 트랙 (배열) 중 하나에서 노트를 추가하거나 삭제하면 두 트랙 (병합)을 병합하고 다시 정렬합니다.

작동하지만 더 나은 방법이 있다는 느낌이 들었습니다. 이러한 프로젝트를 구현하는 가장 좋은 방법은 무엇입니까? Logic, Ableton, Cubase, Reason 등의 전문 응용 프로그램은 오디오/미디 이벤트 목록을 구현하고 재생 된 내용, 재생해야 할 대상을 어떻게 관리합니까?

미리 의견을 보내 주셔서 감사합니다.

브리스니스

답변

5

더 자세히 알려면 대답이 필요합니다. 어떤 언어를 사용하고 있습니까? 어떤 템포 범위를 타겟팅하고 있습니까? 어떤 오디오 인터페이스를 프로그래밍 할 것인가? (당신이 다루는 레이턴시에 관해 아는 것이 중요합니다.)

또한 드럼 시퀀서입니까? 아니면 더 복잡한 무엇입니까? 얼마나 많은 "도구"/ "목소리"를 지원할 계획입니까? < 개의 32 보이스를 지원하려면 [int (tick), int (voices)]의 단일 배열이있을 수 있습니다. 각각의 개별 음성은 32 비트 숫자의 비트입니다. 그런 다음 음성이 재생되는지 여부를 확인하려면 배열의 음성 int에 대해 음성 플래그가 "&"이어야합니다. 이것은 배열 정렬/복사/빌드를 피할 것입니다.

여기서 지연 시간은 중요한 문제입니다. 240 (

  • 초당 4 비트가 있습니다 : 당신은 예를 들어 240bpm의 템포와 비트 당 4 개의 "틱"이있는 경우 (정말, 우리는 16 분 음표로 나누어 각 비트에 대해 한 마디를 얘기) 분/60 초당 비트) 이 - 오디오 인터페이스 (Windows의 예를 들어, 공유 모드 WASAPI를 높은 대기 시간이있는 경우> 각각의 "틱"모든 62.5 밀리 초를

발생 -> 각 비트가 마다 250 밀리 초를 발생 Vista +는 약 30ms의 대기 시간을가집니다.), 생성해야 할 다른 "창"을 갖게됩니다.

MIDI 이벤트를 처리하는 경우 개별 틱 내에서 MIDI 이벤트를 수신 할 수 있기 때문에 MIDI 이벤트를 처리하는 것이 더욱 중요합니다.

대부분의 DAW (디지털 오디오 워크 스테이션)는 일반적으로 오디오 데이터와 MIDI 데이터라는 두 가지 "유형"으로 세계를 생각합니다. 오디오 데이터는 "실시간"(또는 실시간으로 얻을 수 있으므로 하위 3ms 대기 시간의 중요성) 경향이 있습니다. 미디는 여전히 상당히 빠르게 진행되고 있습니다. 결국, 미디 데이터 측면에서 생각하게 될 것입니다.

그러나 프로젝트에서 시작하는 가장 좋은 방법은 매우 간단한 드럼 시퀀서를 만드는 것입니다. 4 개의 드럼과 당신이하고있는 물건을 가지고 가서 거기에서 가십시오. 행운을 빕니다!