Rapid-Q Documentation by William Yu (c)1999-2000 | Appendix B: QDXSOUND

# QDXSOUND Component

  QDXSound implements DirectSound.
  QDXSound Properties

  Field | Type | R/W | Default

  AutoUpdate | INTEGER | RW | True
  | AutoUpdate determines whether to let the internal thread update the sound buffer every 50ms, or let the programmer control the updates.
  BufferLength | INTEGER | RW | 1000
  | BufferLength specifies how many bytes to read into the buffer for playing. For heavy computations or deeply nested loops, it's a good idea to extend the BufferLength so that the music can play uninterrupted.
  FileName | STRING | RW |
  | FileName specifies the .WAV file.
  Frequency | INTEGER | RW |
  | Frequency specifies the reproduction frequency. Do not set the frequency before loading a file, since a default frequency for the .WAV file will be given to you when you load a new sound file.
  Looped | INTEGER | RW | False
  | Looped specifies whether to replay the sound file after it has finished playing.
  Pan | INTEGER | RW | 0
  | Pan specifies the relative volume of the right and left channels within the range from -100 to 100. A value of -100 mutes the right channel, and a value of 100 mutes the left channel.
  Parent | QFORM | W |
  Playing | INTEGER | R |
  | Playing determines whether the sound file is currently playing.
  Position | INTEGER | RW |
  | Use Position to set/get the current playing position of the sound file.
  Size | INTEGER | R |
  | Size returns the file size of the .WAV file in bytes.
  StickyFocus | INTEGER | RW | False
  | StickyFocus determines whether to keep playing even if the application loses focus.
  Tag | INTEGER | RW |
  | Tag is not used internally, it is reserved storage space for the programmer.
  Volume | INTEGER | RW |
  | Volume specifies the output volume for the current sound as a percentage. Setting volume to 0 mutes the sound, while setting volume to 100 plays the sound with "normal volume" (ie. your current sound settings for your computer).

  QDXSound Methods

  Method | Type | Description | Params

  Play | SUB | Start playing sound | 0
  Stop | SUB | Stop playing sound | 0
  Update | SUB | Update sound buffer | 0

  QDXSound Events

  Event | Type | Occurs when... | Params

  QDXSound Examples

      '-- DirectSound example for Rapid-Q by William Yu

      $TYPECHECK ON
      $INCLUDE "RAPIDQ.INC"

      DECLARE SUB exitItemClick (sender AS QMENUITEM)
      DECLARE SUB openItemClick (sender AS QMENUITEM)
      DECLARE SUB formShow (sender AS QFORM)
      DECLARE SUB playButtonClick (sender AS QBUTTON)
      DECLARE SUB stopButtonClick (sender AS QBUTTON)
      DECLARE SUB positionTrackBarChange (sender AS QTRACKBAR)
      DECLARE SUB freqTrackBarChange (sender AS QTRACKBAR)
      DECLARE SUB volumeTrackBarChange (sender AS QTRACKBAR)
      DECLARE SUB panTrackBarChange (sender AS QTRACKBAR)

      CREATE form AS QFORM
          width = 360
          height = 300
          center
          CREATE dxSound AS QDXSOUND
          END CREATE
          CREATE mainMenu AS QMAINMENU
              CREATE fileMenu AS QMENUITEM
                  caption = "&File"
                  CREATE openItem AS QMENUITEM
                      caption = "&Open..."
                      onClick = openItemClick
                  END CREATE
                  CREATE breakItem1 AS QMENUITEM
                      caption = "-"
                  END CREATE
                  CREATE exitItem AS QMENUITEM
                      caption = "E&xit"
                      onClick = exitItemClick
                  END CREATE
              END CREATE
          END CREATE
          CREATE panTrackBar AS QTRACKBAR
              left = 10
              top = 10
              width = 200
              height = 30
              tickStyle = tsManual
              min = -100
              max = 100
              onChange = panTrackBarChange
              enabled = FALSE
          END CREATE
          CREATE panLabel AS QLABEL
              left = 215
              top = 20
              caption = "Pan 0dB"
          END CREATE
          CREATE volumeTrackBar AS QTRACKBAR
              left = 10
              top = 60
              width = 200
              height = 30
              tickStyle = tsManual
              min = 0
              max = 100
              position = 100
              onChange = volumeTrackBarChange
              enabled = FALSE
          END CREATE
          CREATE volumeLabel AS QLABEL
              left = 215
              top = 70
              caption = "Volume 100%"
          END CREATE
          CREATE freqTrackBar AS QTRACKBAR
              left = 10
              top = 110
              width = 200
              height = 30
              tickStyle = tsManual
              max = 44100
              position = 22050
              min = 0
              onChange = freqTrackBarChange
              enabled = FALSE
          END CREATE
          CREATE freqLabel AS QLABEL
              left = 215
              top = 120
              caption = "Frequency 22050Hz"
          END CREATE
          CREATE positionTrackBar AS QTRACKBAR
              left = 10
              top = 160
              width = 200
              height = 30
              tickStyle = tsManual
              onChange = positionTrackBarChange
              enabled = FALSE
          END CREATE
          CREATE positionLabel AS QLABEL
              left = 215
              top = 170
              caption = "Position 0 / 0"
          END CREATE
          CREATE playButton AS QBUTTON
              left = 30
              top = 210
              caption = "&Play"
              enabled = FALSE
              onClick = playButtonClick
          END CREATE
          CREATE stopButton AS QBUTTON
              left = 110
              top = 210
              caption = "&Stop"
              enabled = FALSE
              onClick = stopButtonClick
          END CREATE
          onShow = formShow
          showModal
      END CREATE

      SUB formShow (sender AS QFORM)
          panTrackBar.setTick(0)
          volumeTrackBar.setTick(50)
          freqTrackBar.setTick(22050)
          dxSound.looped = FALSE
      END SUB

      SUB exitItemClick (sender AS QMENUITEM)
          form.close
      END SUB

      SUB openItemClick (sender AS QMENUITEM)
          DIM openDialog AS QOPENDIALOG

          openDialog.filter = "*.wav|*.wav"
          IF openDialog.execute THEN
              dxSound.fileName = openDialog.fileName
              panTrackBar.enabled = TRUE
              volumeTrackBar.enabled = TRUE
              freqTrackBar.enabled = TRUE
              positionTrackBar.enabled = TRUE
              playButton.enabled = TRUE
              stopButton.enabled = TRUE
              positionTrackBar.position = 0
              positionTrackBar.max = dxSound.size
              freqTrackBar.position = dxSound.frequency
              freqTrackBarChange(freqTrackBar)
              positionTrackBarChange(positionTrackBar)
          END IF
      END SUB

      SUB playButtonClick (sender AS QBUTTON)
          dxSound.play
          WHILE dxSound.playing
              doEvents
              positionTrackBar.position = dxSound.position
              positionLabel.caption = "Position "+STR$(positionTrackBar.position)+" / "+STR$(dxSound.size)
          WEND
      END SUB

      SUB stopButtonClick (sender AS QBUTTON)
          dxSound.stop
          dxSound.position = 0
          positionTrackBar.position = 0
      END SUB

      SUB positionTrackBarChange (sender AS QTRACKBAR)
          dxSound.position = sender.position
          positionLabel.caption = "Position "+STR$(sender.position)+" / "+STR$(dxSound.size)
      END SUB

      SUB freqTrackBarChange (sender AS QTRACKBAR)
          dxSound.frequency = sender.position
          freqLabel.caption = "Frequency "+STR$(sender.position)+"Hz"
      END SUB

      SUB volumeTrackBarChange (sender AS QTRACKBAR)
          dxSound.volume = sender.position
          volumeLabel.caption = "Volume "+STR$(sender.position)+"%"
      END SUB

      SUB panTrackBarChange (sender AS QTRACKBAR)
          dxSound.pan = sender.position
          panLabel.caption = "Pan "+STR$(sender.position)+"dB"
      END SUB

  Prev Component | Contents | Next Component