sgdk: sound.h File Reference

sgdk

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

Defines | Functions
sound.h File Reference

Audio / Sound stuff. More...

Go to the source code of this file.

## Defines

#define | SOUND_PCM_CH_AUTO 0xFF
| Auto select PCM channel to use.
#define | SOUND_PCM_CH1 Z80_DRV_CH0_SFT
| PCM channel 1.
#define | SOUND_PCM_CH2 Z80_DRV_CH1_SFT
| PCM channel 2.
#define | SOUND_PCM_CH3 Z80_DRV_CH2_SFT
| PCM channel 3.
#define | SOUND_PCM_CH4 Z80_DRV_CH3_SFT
| PCM channel 4.
#define | SOUND_PCM_CH1_MSK Z80_DRV_CH0
| PCM channel 1 selection mask.
#define | SOUND_PCM_CH2_MSK Z80_DRV_CH1
| PCM channel 2 selection mask.
#define | SOUND_PCM_CH3_MSK Z80_DRV_CH2
| PCM channel 3 selection mask.
#define | SOUND_PCM_CH4_MSK Z80_DRV_CH3
| PCM channel 4 selection mask.
#define | SOUND_RATE_32000 0
| PCM sample rate set to 32 Khz. Best quality but take lot of rom space.
#define | SOUND_RATE_22050 1
| PCM sample rate set to 22050 Hz. Best quality but take lot of rom space.
#define | SOUND_RATE_16000 2
| PCM sample rate set to 16 Khz.
#define | SOUND_RATE_13400 3
| PCM sample rate set to 13400 Hz. Good compromise for rom space and quality.
#define | SOUND_RATE_11025 4
| PCM sample rate set to 11025 Hz.
#define | SOUND_RATE_8000 5
| PCM sample rate set to 8 Khz. Worst quality but take less rom place.
#define | SOUND_PAN_LEFT 0x80
| Left speaker panning.
#define | SOUND_PAN_RIGHT 0x40
| Right speaker panning.
#define | SOUND_PAN_CENTER 0xC0
| Center (laft and right) speaker panning.
#define | SND_isPlaying_4PCM_ENV SND_isPlaying_4PCM
#define | SND_startPlay_4PCM_ENV SND_startPlay_4PCM
#define | SND_stopPlay_4PCM_ENV SND_stopPlay_4PCM
#define | SND_getVolume_4PCM_ENV SND_getVolume_4PCM
#define | SND_setVolume_4PCM_ENV SND_setVolume_4PCM
#define | SND_nextFrame_XGM() SND_nextXFrame_XGM(1)

## Functions

u8 | SND_isPlaying_PCM ()
| Return play status (Single channel PCM player driver).
void | SND_startPlay_PCM (const u8 *sample, const u32 len, const u8 rate, const u8 pan, const u8 loop)
| Start playing a sample (Single channel PCM player driver). If a sample was currently playing then it's stopped and the new sample is played instead.
void | SND_stopPlay_PCM ()
| Stop playing (Single channel PCM player driver). No effect if no sample was currently playing.
u8 | SND_isPlaying_2ADPCM (const u16 channel_mask)
| Return play status of specified channel (2 channels ADPCM player driver).
void | SND_startPlay_2ADPCM (const u8 *sample, const u32 len, const u16 channel, const u8 loop)
| Start playing a sample on specified channel (2 channels ADPCM player driver). If a sample was currently playing on this channel then it's stopped and the new sample is played instead.
void | SND_stopPlay_2ADPCM (const u16 channel)
| Stop playing the specified channel (2 channels ADPCM player driver). No effect if no sample was currently playing on this channel.
u8 | SND_isPlaying_4PCM (const u16 channel_mask)
| Return play status of specified channel (4 channels PCM player driver).
void | SND_startPlay_4PCM (const u8 *sample, const u32 len, const u16 channel, const u8 loop)
| Start playing a sample on specified channel (4 channels PCM player driver). If a sample was currently playing on this channel then it's stopped and the new sample is played instead.
void | SND_stopPlay_4PCM (const u16 channel)
| Stop playing the specified channel (4 channels PCM player driver). No effect if no sample was currently playing on this channel.
void | SND_setVolume_4PCM (const u16 channel, const u8 volume)
| Change envelop / volume of specified channel (4 channels PCM player driver).
u8 | SND_getVolume_4PCM (const u16 channel)
| Return envelop / volume level of specified channel (4 channels PCM player driver).
u8 | SND_isPlaying_XGM ()
void | SND_startPlay_XGM (const u8 *song)
void | SND_stopPlay_XGM ()
void | SND_pausePlay_XGM ()
void | SND_resumePlay_XGM ()
u8 | SND_isPlayingPCM_XGM (const u16 channel_mask)
void | SND_setPCM_XGM (const u8 id, const u8 *sample, const u32 len)
void | SND_setPCMFast_XGM (const u8 id, const u8 *sample, const u32 len)
void | SND_startPlayPCM_XGM (const u8 id, const u8 priority, const u16 channel)
void | SND_stopPlayPCM_XGM (const u16 channel)
u16 | SND_getMusicTempo_XGM ()
void | SND_setMusicTempo_XGM (u16 value)
u16 | SND_getManualSync_XGM ()
void | SND_setManualSync_XGM (u16 value)
void | SND_nextXFrame_XGM (u16 num)
void | SND_setLoopNumber_XGM (u8 value)
void | SND_set68KBUSProtection_XGM (u8 value)
u16 | SND_getForceDelayDMA_XGM ()
void | SND_setForceDelayDMA_XGM (u16 value)
u32 | SND_getCPULoad_XGM ()

## Detailed Description

Audio / Sound stuff.

Author:
  Stephane Dallongeville

Date:
  08/2011

This unit provides advanced sound playback methods through differents Z80 drivers.
Z80_DRIVER_PCM
Single channel 8 bits signed sample driver.
It can play a sample (8 bit signed) from 8 Khz up to 32 Khz rate.
Z80_DRIVER_2ADPCM
2 channels 4 bits ADPCM sample driver.
It can mix up to 2 ADCPM samples at a fixed 22050 Hz Khz rate.
Address and size of samples have to be 256 bytes boundary.
Z80_DRIVER_4PCM
4 channels 8 bits signed sample driver with volume support.
It can mix up to 4 samples (8 bit signed) at a fixed 16 Khz rate.
with volume support (16 levels du to memory limitation).
Address and size of samples have to be 256 bytes boundary.
The driver does support "cutoff" when mixing so you can use true 8 bits samples :)
Z80_DRIVER_XGM
eXtended VGM music player driver.
Moved to xgm.h unit

## Define Documentation

#define SND_nextFrame_XGM | ( |  | ) | SND_nextXFrame_XGM(1)

Deprecated:
  use XGM_nextFrame(..) instead

## Function Documentation

u32 SND_getCPULoad_XGM | ( |  | ) |

Deprecated:
  use XGM_getCPULoad(..) instead

u16 SND_getForceDelayDMA_XGM | ( |  | ) |

Deprecated:
  use XGM_getForceDelayDMA(..) instead

u16 SND_getManualSync_XGM | ( |  | ) |

Deprecated:
  use XGM_getManualSync(..) instead

u16 SND_getMusicTempo_XGM | ( |  | ) |

Deprecated:
  use XGM_getMusicTempo(..) instead

u8 SND_getVolume_4PCM | ( | const u16 | channel | ) |

Return envelop / volume level of specified channel (4 channels PCM player driver).

Parameters:

  channel

  Channel we want to retrieve envelop level.
  SOUND_PCM_CH1 = channel 1
  SOUND_PCM_CH2 = channel 2
  SOUND_PCM_CH3 = channel 3
  SOUND_PCM_CH4 = channel 4

Returns:
  Envelop of specified channel.
  The returned value is comprised between 0 (quiet) to 15 (loud).

u8 SND_isPlaying_2ADPCM | ( | const u16 | channel_mask | ) |

Return play status of specified channel (2 channels ADPCM player driver).

Parameters:

  channel_mask

  Channel(s) we want to retrieve play state.
  SOUND_PCM_CH1_MSK = channel 1
  SOUND_PCM_CH2_MSK = channel 2
  You can combine mask to retrieve state of severals channels at once:
  `isPlaying_2ADPCM(SOUND_PCM_CH1_MSK | SOUND_PCM_CH2_MSK)`
  will actually return play state for channel 1 and channel 2.

Returns:
  Return non zero if specified channel(s) is(are) playing.

u8 SND_isPlaying_4PCM | ( | const u16 | channel_mask | ) |

Return play status of specified channel (4 channels PCM player driver).

Parameters:

  channel_mask

  Channel(s) we want to retrieve play state.
  SOUND_PCM_CH1_MSK = channel 1
  SOUND_PCM_CH2_MSK = channel 2
  SOUND_PCM_CH3_MSK = channel 3
  SOUND_PCM_CH4_MSK = channel 4
  You can combine mask to retrieve state of severals channels at once:
  `isPlaying_2ADPCM(SOUND_PCM_CH1_MSK | SOUND_PCM_CH2_MSK)`
  will actually return play state for channel 1 and channel 2.

Returns:
  Return non zero if specified channel(s) is(are) playing.

u8 SND_isPlaying_PCM | ( |  | ) |

Return play status (Single channel PCM player driver).

Returns:
  Return non zero if PCM player is currently playing a sample

u8 SND_isPlaying_XGM | ( |  | ) |

Deprecated:
  use XGM_isPlaying() instead

u8 SND_isPlayingPCM_XGM | ( | const u16 | channel_mask | ) |

Deprecated:
  use XGM_isPlayingPCM(..) instead

void SND_nextXFrame_XGM | ( | u16 | num | ) |

Deprecated:
  use XGM_nextXFrame(..) instead

void SND_pausePlay_XGM | ( |  | ) |

Deprecated:
  use XGM_pausePlay(..) instead

void SND_resumePlay_XGM | ( |  | ) |

Deprecated:
  use XGM_resumePlay(..) instead

void SND_set68KBUSProtection_XGM | ( | u8 | value | ) |

Deprecated:
  use XGM_set68KBUSProtection(..) instead

void SND_setForceDelayDMA_XGM | ( | u16 | value | ) |

Deprecated:
  use XGM_setForceDelayDMA(..) instead

void SND_setLoopNumber_XGM | ( | u8 | value | ) |

Deprecated:
  use XGM_setLoopNumber(..) instead

void SND_setManualSync_XGM | ( | u16 | value | ) |

Deprecated:
  use XGM_setManualSync(..) instead

void SND_setMusicTempo_XGM | ( | u16 | value | ) |

Deprecated:
  use XGM_setMusicTempo(..) instead

void SND_setPCM_XGM | ( | const u8 | id,
|  | const u8 * | sample,
|  | const u32 | len
| ) |  |

Deprecated:
  use XGM_setPCM(..) instead

void SND_setPCMFast_XGM | ( | const u8 | id,
|  | const u8 * | sample,
|  | const u32 | len
| ) |  |

Deprecated:
  use XGM_setPCMFast(..) instead

void SND_setVolume_4PCM | ( | const u16 | channel,
|  | const u8 | volume
| ) |  |

Change envelop / volume of specified channel (4 channels PCM player driver).

Parameters:

  channel

  Channel we want to set envelop.
  SOUND_PCM_CH1 = channel 1
  SOUND_PCM_CH2 = channel 2
  SOUND_PCM_CH3 = channel 3
  SOUND_PCM_CH4 = channel 4

  volume | Volume to set : 16 possible level from 0 (minimum) to 15 (maximum).

void SND_startPlay_2ADPCM | ( | const u8 * | sample,
|  | const u32 | len,
|  | const u16 | channel,
|  | const u8 | loop
| ) |  |

Start playing a sample on specified channel (2 channels ADPCM player driver).
If a sample was currently playing on this channel then it's stopped and the new sample is played instead.

Parameters:

  sample | Sample address, should be 128 bytes boundary aligned SGDK automatically align resource as needed
  len | Size of sample in bytes, should be a multiple of 128 SGDK automatically adjust resource size as needed
  channel | Channel where we want to play sample. SOUND_PCM_CH_AUTO = auto selection from current channel usage SOUND_PCM_CH1 = channel 1 SOUND_PCM_CH2 = channel 2
  loop | Loop flag. If non zero then the sample will be played in loop (else sample is played only once).

void SND_startPlay_4PCM | ( | const u8 * | sample,
|  | const u32 | len,
|  | const u16 | channel,
|  | const u8 | loop
| ) |  |

Start playing a sample on specified channel (4 channels PCM player driver).
If a sample was currently playing on this channel then it's stopped and the new sample is played instead.

Parameters:

  sample | Sample address, should be 256 bytes boundary aligned SGDK automatically align resource as needed
  len | Size of sample in bytes, should be a multiple of 256 SGDK automatically adjust resource size as needed

  channel

  Channel where we want to play sample.
  SOUND_PCM_CH_AUTO = auto selection from current channel usage
  SOUND_PCM_CH1 = channel 1
  SOUND_PCM_CH2 = channel 2
  SOUND_PCM_CH3 = channel 3
  SOUND_PCM_CH4 = channel 4

  loop | Loop flag. If non zero then the sample will be played in loop (else sample is played only once).

void SND_startPlay_PCM | ( | const u8 * | sample,
|  | const u32 | len,
|  | const u8 | rate,
|  | const u8 | pan,
|  | const u8 | loop
| ) |  |

Start playing a sample (Single channel PCM player driver).
If a sample was currently playing then it's stopped and the new sample is played instead.

Parameters:

  sample | Sample address, should be 256 bytes boundary aligned SGDK automatically align resource as needed
  len | Size of sample in bytes, should be a multiple of 256 SGDK automatically adjust resource size as needed

  rate

  Playback rate :
  SOUND_RATE_32000 = 32 Khz (best quality but take lot of rom space)
  SOUND_RATE_22050 = 22 Khz
  SOUND_RATE_16000 = 16 Khz
  SOUND_RATE_13400 = 13.4 Khz
  SOUND_RATE_11025 = 11 Khz
  SOUND_RATE_8000 = 8 Khz (worst quality but take less rom place)

  pan | Panning : SOUND_PAN_LEFT = play on left speaker SOUND_PAN_RIGHT = play on right speaker SOUND_PAN_CENTER = play on both speaker
  loop | Loop flag. If non zero then the sample will be played in loop (else sample is played only once).

void SND_startPlay_XGM | ( | const u8 * | song | ) |

Deprecated:
  use XGM_startPlay(..) instead

void SND_startPlayPCM_XGM | ( | const u8 | id,
|  | const u8 | priority,
|  | const u16 | channel
| ) |  |

Deprecated:
  use XGM_startPlayPCM(..) instead

void SND_stopPlay_2ADPCM | ( | const u16 | channel | ) |

Stop playing the specified channel (2 channels ADPCM player driver).
No effect if no sample was currently playing on this channel.

Parameters:

  channel | Channel we want to stop. SOUND_PCM_CH1 = channel 1 SOUND_PCM_CH2 = channel 2

void SND_stopPlay_4PCM | ( | const u16 | channel | ) |

Stop playing the specified channel (4 channels PCM player driver).
No effect if no sample was currently playing on this channel.

Parameters:

  channel

  Channel we want to stop.
  SOUND_PCM_CH1 = channel 1
  SOUND_PCM_CH2 = channel 2
  SOUND_PCM_CH3 = channel 3
  SOUND_PCM_CH4 = channel 4

void SND_stopPlay_XGM | ( |  | ) |

Deprecated:
  use XGM_stopPlay(..) instead

void SND_stopPlayPCM_XGM | ( | const u16 | channel | ) |

Deprecated:
  use XGM_stopPlayPCM(..) instead

All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines