我正在嘗試在 tasm 中撰寫一個播放音符的程式。我在網上找不到任何檔案,我找到的最接近的是this,它能夠產生“嗶”聲,但我不知道:
此代碼如何作業
什么是聲音映射以及如何演奏特定的音符(請重新...)
uj5u.com熱心網友回復:
使用 PC 揚聲器播放單音可以使用參考問題中提到的方法。它使用來自系統定時器的方波發生器,通過將操作模式 0xB6 設定為 I/O 埠 0x43 來激活。請參閱定時器埠。寫入埠 0x43 的值 182=0xB6=0y10110110 指定
- 選擇定時器計數器 Nr.2(位 6-7)
- 位元組序:首先是低位元組,其次是高位元組(位 4-5)
- 模式 3:方件生成(位 1-3)
- 格式 0:二進制模式(位 0)。然后,您應該使用
OUT 0x42,LowByte和指定所需的頻率OUT 0x42,HighByte。這個 16 位二進制整數實際上指定了方波的周期,即從 0 到 1 翻轉波必須經過的滴答數,反之亦然。
當您對頻率進行編程后,請使用可編程外設介面將揚聲器連接到方波發生器。如果 PPI 埠為 0x61,則通過設定兩個最低有效位來完成此操作,請參閱PPI 埠。
IN AL,0x61 ; Get the previous value of PPI port B.
OR AL,0x03 ; Set the two least significant bits.
OUT 0x61,AL ; Write it back to PPI port B.
現在您應該等待一段時間讓音調播放,然后將 PPI 埠 B 處的兩位重置為 0。
將音調映射到您可以在此處找到的頻率。您將需要一個表格來將do、re、mi等音調的頻率轉換為 16 位整數,將其作為LowByte和HighByte放入系統計時器。
請參閱示例代碼如何獲取 LowByte和HighByte。PC 計時器以 1193180 Hz 的頻率計時。當你想演奏音do時(注C 4 =261.63 Hz),計算1193180/261.63=4560=0x11D0。低位元組=0xD0 和高位元組=0x11。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437344.html
