2012-06-09 2 views
2

편집 : 오디오/비디오 제작 사이트에 게시 https://video.stackexchange.com/questions/4148/creating-midi-files-explanation-of-time-division-in-header-chunk은 MIDI 파일 만들기 - 시간 분할의 설명 헤더 청크에

내가하고자하는 응용 프로그램을 작성에 관심이 있어요 나는이 MIDI 파일 구조에 대해 읽어 봤는데 이 형식으로 파일을 읽거나 씁니다.하지만 헤더 덩어리에서 시간 분할에 대해 약간 혼란 스럽습니다.

이 부분은 본질적으로 16 비트입니다. 여기서 부호 비트가 1이면 나머지 비트는 SMPTE 타임 코드를 지정하고 0이면 비트가 4 분 음표 (PPQ) 당 틱/펄스 수를 지정합니다. .

내 질문은, 구체적으로는 다음과 같습니다

  • 높은/낮은 PPQ은 MIDI 파일에 무엇입니까? 이것은 소리의 품질을 변화 시키는가? 내 이해는 템포에 영향을 미치지 않는다는 것입니다.
  • SMPTE 타임 코드는 재생시 MIDI 파일에 어떤 영향을 줍니까?

본질적으로, 나는 이것이 최종 결과에 실제로 어떤 의미인지 이해하려고 노력하고 있습니다.

+0

코딩 도움말을 요청하지 않으므로 질문에 플래그를 지정했습니다. 이 AV에 있어야합니다 –

+0

사과,이 커뮤니티에 새로운 해요. 이 질문을 올릴 적절한 위치에 대한 링크가 있습니까? – rakemanyohneth

+0

링크가 없습니다. 하지만 스택 교환 사이트 페이지에 하나 있습니다 –

답변

1

은 내가 그 포럼에 이상 등록되지 않은, 그래서 내가 여기에 붙여 넣을 수 있습니다 :

내가

PPQ이 절대적으로 MIDI 파일의 템포에 영향을 미치는 부분 1. 응답 할 수 있습니다. 사운드의 품질을 변경하지 않고 이벤트 처리 속도를 변경합니다.

템포는 4 분 음표에 대한 마이크로 초 단위로 정의됩니다. 4 분 음표 (PPQ)의 틱 (펄스) 수를 변경하면 파일이 재생되는 속도가 효과적으로 변경됩니다. PPQ의 표준 값은 480입니다. 파일에 대한 유일한 변경 사항이 PPQ를 두 배로하는 것이면 재생 속도 (템포)는 본질적으로 절반입니다.

+0

Gotcha! 그럼 다음 시나리오가 맞는지 알려주세요. 처음 PPQ를 480으로 설정하면 PPQ가 96 (기본 템포) 인 파일과 다를 바 없습니다. 그런 다음 첫 번째 파일의 PPQ를 240으로 변경하면 240 BPM (노트 사이의 펄스 수가 줄어들 기 때문에 2 * 기본 템포)에서 재생하는 것과 비슷합니다. 마찬가지로 두 번째 파일 (96 PPQ 중 하나)이 시작하려면 240 BPM 이었으면 두 MIDI 파일의 템포는 첫 번째 파일의 PPQ로 변경된 후에도 동일 할 것입니다. – rakemanyohneth

-1

@LeffelMania가 맞았으나 SMPTE는 단순히 당신의 준비 시간을 유지하는 다른 방법이라고 덧붙이고 싶었습니다. SMPTE를 사용하면 각 이벤트에 대한 절대 시간을 얻지 만 그렇지 않은 경우 이전 이벤트와 관련된 이벤트가 발생합니다.

내 경험에 비추어 볼 때 대부분의 MIDI 파일은 상대적 이벤트 타이밍 (즉, SMPTE가 아닌)의 일반적인 방식을 사용합니다.

+0

아, 고마워! 그래, 나는 SMPTE를 보았고 정말로 SMPTE의 필요성을 알 수 없었다. 당신이 비디오와 동기화하고 있었다면 나는 추측합니다.하지만 왜 그렇게하고 싶어하는지 알 수 없습니다. – rakemanyohneth

+1

SMPTE는 비디오에만 유용하지 않습니다. 그것은 MIDI 동기화보다 훨씬 정확합니다. 따라서 여러 개의 시퀀서를 함께 동기화 할 경우 SMPTE를 사용하면 MIDI 클럭보다 더 신뢰할 수 있습니다. 그러나 MIDI가 매우 느리므로 제한 사항은 파일에서 직접 이벤트를 읽을 때 적용되지 않습니다 (케이블을 끄는 대신). –

+0

"SMPTE를 사용한다면 각 이벤트의 절대 시간을 얻습니다"라는 말이 틀립니다. – Slight

0

이 질문은 오래된 질문이지만 완전히 답변되지 않았거나 완전히 정확하게 답변되지 않았습니다.

모든 MIDI 파일은 델타 시간을 사용합니다. 미디 파일 SMPTE에 절대 타이밍이 없습니다.

원래의 MIDI 형식 파일에서 헤더 타이밍 정보는 PPQN 또는 분기 별 펄스를 지정합니다. SetTempo 메타 이벤트는 4 분 음표 (템포) 당 마이크로 초의 수를 지정합니다. MIDI 이벤트 델타 정보는이 이벤트와 마지막 이벤트 사이의 펄스 수를 지정합니다.

SMPTE 스타일의 MIDI 파일에서 헤더 타이밍 정보는 초당 프레임 수와 프레임 세분화의 두 가지 값을 지정합니다. 초당 프레임 수는 문자 그대로 FPS입니다 (일부 값은 29와 같이 29.97로 조정해야합니다). 프레임 서브 디비전은 프레임 당 펄스의 수로 생각할 수 있습니다. MIDI 이벤트 델타 정보는 마지막 이벤트 이후 프레임 세분 (또는 펄스) 수를 지정합니다.

중요한 차이점 중 하나는 SMPTE 파일이 SetTempo 메타 이벤트를 사용하지 않는다는 것입니다. 모든 시간 스케일은 헤더 타이밍 필드로 고정됩니다.