Hyper Voice

From WSdev Wiki
Revision as of 12:52, 24 March 2024 by Asie (talk | contribs)
Jump to navigationJump to search

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%
  |||       |||| ++--- Sample scaling mode:
  |||       ||||         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

Input samples are treated as signed 8-bit values. If volume is not 100% and sample scaling mode is not ignored, they may instead be treated as unsigned and/or be rescaled to the following value ranges:

Sample scaling modes - 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