2010-07-08 1 views
1

가 :MIDI : BPM을 FPS 델타 시간으로 변환 하시겠습니까? (192)의 속도 (가장 왼쪽 비트 Off)는 BPM (분당 비트) MIDI 델타 시간을 감안할 때

나는 FPS/TPM로 변환 할
0x00C0 

이 (초당 프레임/분당 틱) 델타 시간 (가장 왼쪽에있는 비트)이지만, 내가 의미하는 바를 알고 있다면 그것은 같은 (또는 가장 정확한) 속도 값이어야합니다.

MIDI Delta Time에 대한 자세한 내용은 Header Chunk -> Time Division에서 Midi File Format을 참조하십시오.

저는이 두 deltatime 유형간에 변환 할 수식을 찾고 있습니다.

답변

2

당신이 0x00C0은 시간 분할 필드 것에 대해 이야기하는 경우, 당신이 언급하는 것은 분 당하지 192 비트,하지만 비트 당이 아니라 192 틱, 아주 다른 짐승이다. BPM은 박자 당 마이크로 초로 주어진 "Set Tempo"이벤트를 통해 간접적으로 지정됩니다 (유비 쿼터스 120 BPM이 시작되는 것으로 가정 함). 이 포맷의 시간 분할의 까다로운 점은 노래의 템포 변화에 따라 틱의 길이가 늘어나고 줄어들 것입니다.

의 당신에 변환 할 시간 분할은 초당 프레임 (24, 25, 29.97, 30) 및 프레임 당 틱으로 GF가 있다고 가정 해 봅시다 (참고!는 분당 틱 아니에요을) . 또한, 박자 당 마이크로 초 단위의 현재 템포가 p이라고 가정 해 봅시다. x는 * (1백92분의 1) 비트를 틱 =

y는/틱 : 새로운이 (! 단위 분석이 정말 도움)이다 틱 에 틱 그런 다음 수식은 주어진 시간을 변환하는 오래 * P μ 초/비트 *는 (1/10 6) 초/μ 초 * F 프레임/초 * G는 새로운/틀
      = ((X * P * F * G 틱)/(192 * 10)) ticks

+0

오른쪽. 비트 당 틱. btw, 'tick'크기는 TimeSpan.TicksPerSecond 등과 같습니다. 나는 MIDI에 익숙하지 않고 참여하려고 애쓰고 있습니다. 당신에게 도움을 주셔서 감사합니다, 당신의 반응은 정말로 복잡합니다, 당신이 그것을 단순화 할 수 있다면 도움이 될 것입니다, 그렇지 않으면 더 많이 파헤쳐 야 할 것입니다. ... – Shimmy

+0

@ Shimmy : 그들은 똑같은 개념이 아닙니다. . TimeSpacn이 틱을 나타낼 때, 그것은 OS에 의해 정의 된 단위를 말하며, 이것은 초 단위의 고정 된 관계를 갖는 경향이 있습니다. MIDI 세계에서의 틱은 시간 단위로 정의 된 추상적 단위이며 초 단위 또는 OS 틱에 대한 고정 된 관계 일 수도 있고 아닐 수도 있습니다. 두 틱의 목적은 정수 값을 사용하여 시간을 효율적으로 표현하면서 타이밍을 적절하게 정확하게 설명 할 수있을만큼 작은 정수 사이의 시간 간격을 선택하는 것입니다. –