Patch title: Release 87 bulk changes
Abstract:
File: /pliant/linux/multimedia/sound.pli
Key:
    Removed line
    Added line
module "/pliant/language/stream.pli"
module "/pliant/language/os.pli"


constant os_SNDCTL_DSP_RESET 0C0045000h
constant os_SNDCTL_DSP_SYNC 0C0045001h
constant os_SNDCTL_DSP_SPEED 0C0045002h
constant os_SNDCTL_DSP_STEREO 0C0045003h
constant os_SNDCTL_DSP_SETFMT 0C0045005h
constant os_SNDCTL_DSP_CHANNELS 0C0045006h

function sound_open dsp options
  arg_rw Stream dsp ; arg Str options
  os_ioctl dsp:stream_handle os_SNDCTL_DSP_RESET null
  var Int rate := options option "rate" Int 44100
  if (os_ioctl dsp:stream_handle os_SNDCTL_DSP_SPEED addressof:rate)<>0
    console "failed to set audio sampling rate" eol
  var Int stereo := shunt (options option "mono") 0 1
  if (os_ioctl dsp:stream_handle os_SNDCTL_DSP_STEREO addressof:stereo)<>0
    console "failed to set audio mono/stereo" eol
  var Int bits := options option "bits" Int 16
  if (os_ioctl dsp:stream_handle os_SNDCTL_DSP_SETFMT addressof:bits)<>0
    console "failed to set audio sampling resolution" eol

function sound_close dsp
  arg_rw Stream dsp
  os_ioctl dsp:stream_handle os_SNDCTL_DSP_SYNC null


function sound_play stream options
  arg_rw Stream stream ; arg Str options
  (var Stream dsp) open "device:/dsp" out+safe
  sound_open dsp options
  while not stream:atend and dsp=success
    raw_copy stream dsp 1 2^24
  sound_close dsp

function sound_record stream options
  arg_rw Stream stream ; arg Str options
  (var Stream dsp) open "device:/dsp" in+safe
  sound_open dsp options
  while not dsp:atend and stream=success
    raw_copy dsp stream 1 2^24
  sound_close dsp


function sound_record file options
  arg Str file options
  (var Stream data) open file out+safe
  sound_record data options

function sound_play file options
  arg Str file options
  (var Stream data) open file in+safe
  sound_play data options


export sound_play sound_record