Hyper Voice: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
(document volume/mode interplay)
Line 59: Line 59:
   |||      |            7 = 24000/12 =  2000 Hz
   |||      |            7 = 24000/12 =  2000 Hz
   |||      +--------- Enable: 0 = off, 1 = on
   |||      +--------- Enable: 0 = off, 1 = on
   ||+----------------- Write 1 to reset DMA input channel to left
   ||+----------------- Reset: When 1 is written, the following DMA sample
                              will be used for the left channel.
   ++------------------ Channel mode:
   ++------------------ Channel mode:
                         0 = Stereo
                         0 = Stereo

Revision as of 06:37, 24 March 2024

Hyper Voice is a headphone-only sample output channel introduced with the WonderSwan Color. It allows converting 8-bit signed and unsigned, mono and stereo samples into 16-bit signed PCM sent directly to the headphone output, after mixing with the traditional four channels.

I/O Ports

Hyper Voice Left Output ($64, $65 write)

Hyper Voice Right Output ($66, $67 write)

15  bit  8  7  bit  0
 ---- ----  ---- ----
 ssss ssss  ssss ssss
 |||| ||||  |||| ||||
 ++++-++++--++++-++++- Signed 16-bit sample.

Unlike the Sound sample output registers, these can be written to - allowing for direct 16-bit sample output.

Hyper Voice Left Input ($68 write)

Hyper Voice Right Input ($69 write)

7  bit  0
---- ----
ssss ssss
|||| ||||
++++-++++- 8-bit sample.

These are typically written to by Sound DMA, but can also be written to manually by the user.

Hyper Voice Control ($6A, $6B)

15  bit  8  7  bit  0
 ---- ----  ---- ----
 .mmc ????  errr ffss
  |||       |||| ||||
  |||       |||| ||++- Shift/Volume:
  |||       |||| ||      0 = 100%   1 = 50%
  |||       |||| ||      2 = 25%    3 = 12.5%
  |||       |||| ++--- Volume scaling algorithm:
  |||       ||||         0 = Unsigned
  |||       ||||         1 = Unsigned, negated
  |||       ||||         2 = Signed
  |||       ||||         3 = Ignored
  |||       |+++------ Update sample rate/Divisor:
  |||       |            0 = 24000/1  = 24000 Hz
  |||       |            1 = 24000/2  = 12000 Hz
  |||       |            2 = 24000/3  =  8000 Hz
  |||       |            3 = 24000/4  =  6000 Hz
  |||       |            4 = 24000/5  =  4800 Hz
  |||       |            5 = 24000/6  =  4000 Hz
  |||       |            6 = 24000/8  =  3000 Hz
  |||       |            7 = 24000/12 =  2000 Hz
  |||       +--------- Enable: 0 = off, 1 = on
  ||+----------------- Reset: When 1 is written, the following DMA sample
                              will be used for the left channel.
  ++------------------ Channel mode:
                         0 = Stereo
                         1 = Mono, left channel only
                         2 = Mono, right channel only
                         3 = Mono, both channels
Volume scaling algorithms - resulting sample ranges
Algorithm/Volume 100% 50% 25% 12.5%
Unsigned 0x0000 .. 0xFFFF 0x8000 .. 0xFFFF 0x8000 .. 0xBFFF 0x8000 .. 0x9FFF
Unsigned, negated 0x0000 .. 0xFFFF 0x0000 .. 0x7FFF 0x4000 .. 0x7FFF 0x6000 .. 0x7FFF
Signed 0x0000 .. 0xFFFF 0x4000 .. 0xBFFF 0x6000 .. 0x9FFF 0x7000 .. 0x8FFF
Ignored 0x0000 .. 0xFFFF 0x0000 .. 0xFFFF 0x0000 .. 0xFFFF 0x0000 .. 0xFFFF