2012-06-09 19 views
2

編輯:發佈於音頻/視頻製作網站https://video.stackexchange.com/questions/4148/creating-midi-files-explanation-of-time-division-in-header-chunk創建MIDI文件 - 時分說明在頭塊

我一直在閱讀有關MIDI文件結構,我感興趣的是編寫一個應用程序,它會以這種格式讀/寫文件,但我對標題塊中的時間分歧有點困惑。

我的理解是,這部分本質上是16位,其中如果符號位爲1,則其餘位指定SMPTE時間碼,如果爲0,則這些位指定每四分音符(PPQ)的嘀嗒聲/ 。

我的問題,具體而言,主要有:

  • 什麼是一個高/低PPQ做一個MIDI文件?這是否會改變聲音的質量?我的理解是它不影響速度
  • SMPTE時間碼在播放中如何影響MIDI文件?

本質上,我試圖理解這些實際上對最終結果意味着什麼。

+0

由於您不是在尋求編碼方面的幫助,我標記了這個問題。這應該在AV –

+0

我的歉意,我是這個社區的新手。你有鏈接到正確的位置發佈這個問題? – rakemanyohneth

+0

我沒有鏈接。但堆棧交換有一個在他們的網站頁面 –

回答

1

我不是登記了上論壇,所以我要把它貼在這裏:

我可以回答一部分1.

PPQ絕對會影響MIDI文件的節奏。它不會改變聲音的質量,它會改變事件處理的速度。

速度按照每四分音符的微秒數定義。如果更改四分音符(PPQ)中的節拍數(脈衝),則可以有效地更改文件播放的速率。 PPQ的標準值爲480.如果您對文件所作的唯一更改是將PPQ加倍,則基本上會使播放速率(速度)減半。

+0

嘿!因此,讓我知道如果下面的情況是正確的: 如果我最初將PPQ設置爲480,它與PPQ爲96(和默認速度)的文件沒有區別。如果我然後將第一個文件的PPQ更改爲240,那麼它將更像是以240 BPM播放(由於音符之間的脈衝數量減少,2 *默認速度)? 類似地,如果第二個文件(96PPQ一個)是240BPM開始,那麼兩個MIDI文件的速度在改變爲第一個PPQ後是相同的? – rakemanyohneth

-1

@LeffelMania說得很對,但我只想補充一點,SMPTE只是一種保持時間安排的不同方式。如果你使用SMPTE,那麼你會得到每個事件的絕對時間,但是否則事件是相對於以前的事件。

根據我的經驗,大多數MIDI文件都使用傳統的相對事件時序(即不是SMPTE),因爲這樣更容易處理。

+0

啊,謝謝!是的,我看着SMPTE,並沒有真正看到它的需要。我想如果你與視頻同步,但我不明白爲什麼要這樣做。 – rakemanyohneth

+1

SMPTE不僅適用於視頻。它比MIDI同步精確得多,所以當你將多個音序器同步在一起時,使用SMPTE往往比MIDI時鐘更可靠。但是,這是因爲MIDI速度很慢,當您直接從文件(而不是電纜)讀取事件時,這種限制不適用。 –

+0

這個「如果你使用SMPTE,那麼你得到每個事件的絕對時間」是不正確的。 – Slight

0

我知道這是一個古老的問題,但並沒有完全或完全準確地回答。

所有MIDI文件都使用增量時間。 MIDI文件中沒有絕對時序,SMPTE或沒有。

在原始MIDI格式文件中,標題時間信息指定PPQN或脈衝每四分音符。 SetTempo元事件指定每個四分音符(節奏)的微秒數。 MIDI事件增量信息指定此事件與上次事件之間的脈衝數。

在SMPTE風格的MIDI文件中,標題時序信息指定了兩個值 - 每秒幀數和幀細分。每秒幀數實際上是FPS(有些值需要調整,如29實際上是29.97)。幀細分可以被認爲是每幀的脈衝數。 MIDI事件增量信息指定自上次事件以來幀分段(或脈衝)的數量。

一個重要的區別是,SMPTE文件不使用SetTempo元事件。所有時間尺度都由標題時間字段固定。