1999/9/19

286/386組合語言-語音/音效

聲霸卡所提供的VOC語音檔,是由首引區及資料區兩個區塊所組成。

首引區:包含VOC檔的ID識別碼,版本編號及指示資料區的起始點位址。

資料區:在此區塊內又分成各種不同形態的副區塊,如語音資料,靜音,記號,ASCII 文字,重複,結束重複,中斷及最新提供的延伸等區段。

首引區段的結構:在暸解首引區段的結構之前,先使用DEBUG ,查看語音檔內容,入下表:

語音資料區塊的結構:跟隨在首引區之後的所有位元組,是屬於VOC 語音檔的資料區塊,在這個資料區塊內又被分割許多副的小區塊資料,每一個小區塊資料的第一個位元組,是被用來記錄該區塊所屬的區塊形態,其次的三個位元組為一個24Bit,是用來記錄資料長度。

聲霸卡的FM音樂是透過YAMAHA公司所產生的FM CHIP 3812 IC來產生音源,它能一次同時處理16個聲道,最多可同時發出11種聲音。

聲霸卡樂器的合成有兩種輸出方式:
  1. 旋律模式:在此種模式下可以有9種音樂聲新輸出。
  2. 節奏模式:在此種模式可以有6種樂器聲部,5種混合節奏。


聲霸卡CMF音樂檔內定義有以下三種不同的結構:

  1. 首引區塊:在此區塊內包含有一些CMF檔案的訊息,例如CMF版本編號,時間及其他兩區塊的偏移位址。
  2. 音樂區塊:在此區塊定義有樂器的樣式形態,每一種樂器形態是由16Bytes 的長度所組成,至於使用樂器的數量是被定義存放在首引區塊內。

    如何利用組合語言來產生FM音樂?我們使用聲霸卡所提供的驅動程式,SBFMDRV.COM 使用此驅動程式,會自動搜尋一個介於80H 至0BFH沒有被使用的岔斷向量,然後將自己放入此記憶體,假若此驅動程式已正確的載入到80H 的記憶體位址,我們便可以使用INT 80H 來呼叫FM驅動程式的功能。

    • 〔功能0〕取得FM驅動程式版本編號
      〔說明〕此功能可以檢查驅動程式的版本編號,如果所測得值是較早以前的版本,則提示使用者使用較早版本的驅動程式。
    • 〔功能1〕設定音樂狀態位元位址
      〔說明〕當呼叫此函數時,所設計的應用程式必須參考FM驅動程式內音樂態的位元位址。
    • 〔功能2〕設定樂器表
      〔說明〕呼叫此函數時,FM驅動程式會參考所使用的樂器表。
    • 〔功能3〕設定系統時間振動次數
      〔說明〕此函數會告之FM驅動程式所需的 Timer 0 系統時間振動頻率,當驅動程式完成音樂輸出,則會重新設定系統時間的頻率0到驅動程式內。
    • 〔功能4〕設定驅動程式的時間振動次數
      〔說明〕當音樂輸出時,此函數會告之驅動程式每秒所需中斷的次數,FM驅動程式預設每秒中斷次數96次。
    • 〔功能5〕轉換音樂的調子
      〔說明〕聲霸卡音樂的輸出,同意我們使用各種不同聲調,每一首樂曲多多少少會有升音與降音的音符輸出,如果要調整某個音符或整首歌曲的升調與降調,必須使用此功能。
    • 〔功能6〕演奏CMF音樂
      〔說明〕此功能可將所定義的音樂區段內各音符由聲霸卡輸出。
    • 〔功能7〕終止音樂輸出
      〔說明〕此功能會將目前聲霸卡輸出音樂終止,此終斷的動作並不代表已將記憶體內的音樂資料完全清除,若要將記憶體緩衝區內的資料清除必需使用功能8。
    • 〔功能8〕重置FM驅動程式
      〔說明〕此功能會關閉FM晶片並依據驅動程式重置樂器表成預設狀態,假如音樂正在輸出當中,應先呼叫功能7中斷音樂的輸出,然後再使用此功能中斷應用程式。
    • 〔功能9〕暫停音樂輸出
      〔說明〕當音樂目前正在進行,我們可使用功能暫停止音樂輸出,若要繼續音樂輸出,可用功能10。
    • 〔功能10〕使暫停的音樂繼續輸出
      〔說明〕此功能必須是先前由功能9所暫停的動作之後,才可再使用此功能。
  3. 音樂區塊:在此區塊內定義了一些目前所播放音樂的相關資料。


沒有留言:

張貼留言