Difference between revisions of "PM Audio"
(More audio information) |
|||
Line 4: | Line 4: | ||
3 Levels of volume: 0%, 50%, 100% | 3 Levels of volume: 0%, 50%, 100% | ||
+ | |||
+ | [[PM_Registers|Register 0x71, Bit 0 to 1]] | ||
+ | 0 = 0% (Silence) | ||
+ | 1 = 50% | ||
+ | 2 = 50% | ||
+ | 3 = 100% (Full volume) | ||
Can read back timer values (since sound is assigned to [[Timers|Timer 3]]). | Can read back timer values (since sound is assigned to [[Timers|Timer 3]]). | ||
+ | |||
+ | To hear sound, you must: | ||
+ | * Enable Timer 3 (with [[PM_Registers|Registers 0x19, 0x1C, 0x1D, 0x48 and 0x49]], check [[Timers]]) | ||
+ | * Configure Timer 3 with the Preset & Pivot (Based of the frequency and pulse-width) (with [[PM_Registers|Registers 0x4A to 0x4D]], check [[Timers]]) | ||
+ | * Set volume to 50% or 100% (with [[PM_Registers|Register 0x71]]) | ||
+ | * NOTE: Pulse of 0% or 100% will not be audible | ||
+ | |||
+ | Some useful information: | ||
+ | * To generate Square-Wave, use Timer 3 Pivot with half the value of the Timer 3 Preset. | ||
+ | * Commercial games use very small Pulse-Width length to generate weak sounds (for example when Music Volume is 25%). | ||
+ | |||
+ | == Formulas == | ||
+ | |||
+ | Timer3_Frequency = The Timer 3 counting speed in Hz (Check [[Timers]]) | ||
+ | |||
+ | Sound_Frequency = The frequency of the note in Hz | ||
+ | |||
+ | Preset_Value = Timer 3 Preset value (to be written in [[PM_Registers|Registers 0x4A and 0x4B]]) | ||
+ | |||
+ | Sound_Pivot = Timer 3 Pivot value (to be written in [[PM_Registers|Registers 0x4C and 0x4D]]) | ||
+ | |||
+ | Pulse_Width = Pulse-Width from 0.0 to 1.0 (e.g. 0.0 = 0%, 0.5 = 50% (Square), 1.0 = 100%) | ||
+ | |||
+ | === Sound Frequency into Timer 3 Preset === | ||
+ | |||
+ | Preset_Value = (Timer3_Frequency / Sound_Frequency) - 1 | ||
+ | |||
+ | === Timer 3 Preset into Sound Frequency === | ||
+ | |||
+ | Sound_Frequency = Timer3_Frequency / (Preset_Value + 1) | ||
+ | |||
+ | === Pulse-Width into Sound-Pivot === | ||
+ | |||
+ | Sound_Pivot = Preset_Value * Pulse_Width | ||
+ | |||
+ | === Sound-Pivot into Pulse-Width === | ||
+ | |||
+ | Pulse_Width = Sound_Pivot / Preset_Value |
Latest revision as of 22:51, 17 April 2009
Contents
Sound
Single-channel square-wave with adjustable pulse-width.
3 Levels of volume: 0%, 50%, 100%
Register 0x71, Bit 0 to 1 0 = 0% (Silence) 1 = 50% 2 = 50% 3 = 100% (Full volume)
Can read back timer values (since sound is assigned to Timer 3).
To hear sound, you must:
- Enable Timer 3 (with Registers 0x19, 0x1C, 0x1D, 0x48 and 0x49, check Timers)
- Configure Timer 3 with the Preset & Pivot (Based of the frequency and pulse-width) (with Registers 0x4A to 0x4D, check Timers)
- Set volume to 50% or 100% (with Register 0x71)
- NOTE: Pulse of 0% or 100% will not be audible
Some useful information:
- To generate Square-Wave, use Timer 3 Pivot with half the value of the Timer 3 Preset.
- Commercial games use very small Pulse-Width length to generate weak sounds (for example when Music Volume is 25%).
Formulas
Timer3_Frequency = The Timer 3 counting speed in Hz (Check Timers)
Sound_Frequency = The frequency of the note in Hz
Preset_Value = Timer 3 Preset value (to be written in Registers 0x4A and 0x4B)
Sound_Pivot = Timer 3 Pivot value (to be written in Registers 0x4C and 0x4D)
Pulse_Width = Pulse-Width from 0.0 to 1.0 (e.g. 0.0 = 0%, 0.5 = 50% (Square), 1.0 = 100%)
Sound Frequency into Timer 3 Preset
Preset_Value = (Timer3_Frequency / Sound_Frequency) - 1
Timer 3 Preset into Sound Frequency
Sound_Frequency = Timer3_Frequency / (Preset_Value + 1)
Pulse-Width into Sound-Pivot
Sound_Pivot = Preset_Value * Pulse_Width
Sound-Pivot into Pulse-Width
Pulse_Width = Sound_Pivot / Preset_Value