2012-07-02 46 views

回答

2

答案並不真實。您獲得的音頻信號是一個調製載波,並從中提取SMPTE位是一個多步驟過程:您通過麥克風或音頻輸入的原始數據不會對應SMPTE時間碼。因此,您需要解碼音頻,這並不簡單。

第一步是將您的音頻信號從biphase mark code轉換。我自己並沒有實現SMPTE讀卡器,但您知道SMPTE標準的時鐘速率,所以我要做的第一件事是仔細過濾以消除背景噪音,因爲它聽起來像是從音頻中取出音頻麥克風。溫和的高通以消除任何直流偏移應該做,並且溫和的低頻對於高頻噪聲也應該有幫助。 (你可以使用寬帶通)

然後,你需要找到每個時鐘週期的開始。你可以做一些像自相關或PLL算法那樣的花式,但我懷疑知道SMPTE標準的大致時鐘速率並能夠上下調整百分之幾就足夠了 - 也許會更好。所以,根據規格尋找重複的轉換。如果你懷疑你的時間碼高度扭曲(如果你有一個非常古老的磁帶卡,或者你想以非常高/低的速度進行同步,那麼做一些奇特的事情會有所幫助,但是LTC並不是真正爲此設計的。更多VTC的領域。)。

一旦確定了時鐘,就需要爲每個時鐘週期確定是否在時鐘週期開始時發生信號轉換。每個時鐘節拍在中間會有一個轉換,但是開始時的轉換指示一個0位。這就是BMC如何在單一流中傳輸時鐘和數據的方式。這使您可以創建新的實際SMPTE數據流。

現在,您已將BMC解碼爲SMPTE流。下一步是查找同步代碼。從維基百科的規格和我對SMPTE的記憶中,我可以斷言找到一個同步代碼是不夠的,這可能是由於80位數據塊中的其他地方偶然發生或偶然發生的。相反,您必須以正確的間隔連續找幾個。然後,您可以將數據讀入80位SMPTE模塊,並且在您閱讀的過程中,您必須繼續驗證同步代碼。如果您沒有看到您期望的地方,請從頭開始搜索。

最後,一旦你解碼了,你將不得不想出一些方法來「飛輪」,因爲你幾乎肯定不會一直讀取所有數據(沒有校驗和!)。那是野獸的本質。

+0

哇,謝謝你這個澄清的答案。你認爲libsmpte(https://ltcsmpte.svn.sourceforge.net/svnroot/ltcsmpte/libltcsmpte/trunk/)是否具有解調功能?你知道任何可能有幫助的Java庫嗎? – joafeldmann

+0

我可能會誤讀,但看起來像這樣,http://ltcsmpte.sourceforge.net/,該庫*被設計成可以做你想做的。恐怕我不知道有任何Java庫可以幫助您,但您可能會發現某些內容是您搜索雙相標記代碼或相關術語,然後在其上編寫您自己的SMPTE閱讀器。 –