Difference between revisions of "Tips And Tricks"

From Open Sound System
Jump to: navigation, search
m (Changing the default sound output used for /dev/dsp)
(Added multimedia key idea from Archlinux wiki page for OSS)
Line 18: Line 18:
 
# Many drivers offer a 'vol' mixer control. If this is used as a recording source, than the current sound output will be recorded. Note that this is the mixed total of all sound played, not of a single program.
 
# Many drivers offer a 'vol' mixer control. If this is used as a recording source, than the current sound output will be recorded. Note that this is the mixed total of all sound played, not of a single program.
 
#: ossrecord -ivol blah.wav
 
#: ossrecord -ivol blah.wav
# vmix loopback driver can record the output of a program. Set vmix_numloops to 1 (or more) in vmix.conf, and make the program output to the newly created /dev/oss/vmix0/loop0 device. Then record from that device. e.g.
 
#: ossplay test.wav -d/dev/oss/vmix0/loop0 &
 
#: ossrecord test2.wav -d/dev/oss/vmix0/loop0
 
 
# OSS wrappers can be used to record the output of a program. vsound is one such wrapper. (vsound doesn't handle output to /dev/oss/* device nodes, but all OSS-supporting programs are/can be easily made to output to /dev/dsp).
 
# OSS wrappers can be used to record the output of a program. vsound is one such wrapper. (vsound doesn't handle output to /dev/oss/* device nodes, but all OSS-supporting programs are/can be easily made to output to /dev/dsp).
 
#: vsound ossplay test.wav
 
#: vsound ossplay test.wav
 +
# (This method doesn't work in build 1016) vmix loopback driver can record the output of a program. Set vmix_numloops to 1 (or more) in vmix.conf, and make the program output to the newly created /dev/oss/vmix0/loop0 device. Then record from that device. e.g.
 +
#: ossplay test.wav -d/dev/oss/vmix0/loop0 &
 +
#: ossrecord test2.wav -d/dev/oss/vmix0/loop0
 +
 +
=== Using your multimedia keys with OSS ===
 +
# First, we should make the keys be able to start external scripts. This is outside the scope of this wiki, but is documented at [http://gentoo-wiki.com/HOWTO_Use_Multimedia_Keys] and at [http://wiki.archlinux.org/index.php/Extra_Keyboard_Keys].
 +
# Then, we can use scripts like the examples below:
 +
lowervolume.sh:
 +
  CTRL=vmix0-vol
 +
  VOL=$(ossmix | grep $CTRL | awk '{print $4}' | awk -F : '{print $1}')
 +
  VOL=$(echo $VOL-2 | bc)
 +
  ossmix $CTRL $VOL
 +
 +
raisevolume.sh:
 +
  CTRL=vmix0-vol
 +
  VOL=$(ossmix | grep $CTRL | awk '{print $4}' | awk -F : '{print $1}')
 +
  VOL=$(echo $VOL+2 | bc)
 +
  ossmix $CTRL $VOL
 +
 +
mute.sh:
 +
  #!/bin/bash
 +
  CTRL=vmix0-vol
 +
  VOLUME=$(cat $HOME/.volume)
 +
  if [ -z "$VOLUME" ]; then
 +
        VOLUME=$(ossmix | grep $CTRL | awk '{print $4}' | awk -F : '{print $1}')
 +
        ossmix $CTRL 0
 +
        echo $VOLUME > $HOME/.volume
 +
  else
 +
        ossmix $CTRL $VOLUME
 +
        > $HOME/.volume
 +
  fi
 +
This will restore the previous volume levels when unmuting. Issue a:
 +
  touch $HOME/.volume
 +
before using the first time.
 +
 +
You may wish to modify a different mixer control than vmix0-vol. In that case, you will need to change the value of CTRL above.

Revision as of 20:32, 1 July 2008

Tips

Starting ossxmix minimized to tray on desktop startup

The '-b' option starts ossxmix in the background - minimized to tray if tray support is compiled in, iconfied window if not. The '-S' option prevents ossxmix from trying to use a system tray. ossxmix -Sb' will always start an iconified window.

  1. KDE: create a desktop shortcut in ~/.kde/Autostart with the command 'ossxmix -b'.
    Alternative: create a desktop shortcut in the same place, with the command "ossxmix -Sb'. Go to Applications->"Advance options" and select "Place in system tray".
  2. Gnome: go to Control center->Session->"Startup Programs" and add "ossxmix -b".
  3. X11 in general: edit the Xsession file. Make sure the tray program runs before ossxmix, or use the '-S' switch as well.
  4. See [1] for info on other environments.

Changing the default sound output used for /dev/dsp

  1. Relink /dev/dsp to the desired /dev/oss/.../ device. The device node matching the desired sound output can be discovered by running 'ossinfo -a'. If OSS insists on recreating /dev/dsp, simply add the appropriate linking command (typically ln -sf /dev/oss/.../ /dev/dsp) to $OSSLIBDIR/soundon.user.
  2. Alternative: $OSSLIBDIR/etc/installed_drivers influences the order of sound cards set by ossdetect. By removing other devices or moving the desired sound card to the first place, followed by running 'ossdetect -v', the default device can be modified.
    The root directory $OSSLIBDIR can be found by checking /etc/oss.conf. It is typically /usr/lib/oss/.

Recording sound output of a program

There are several methods to achieve this:

  1. Many drivers offer a 'vol' mixer control. If this is used as a recording source, than the current sound output will be recorded. Note that this is the mixed total of all sound played, not of a single program.
    ossrecord -ivol blah.wav
  2. OSS wrappers can be used to record the output of a program. vsound is one such wrapper. (vsound doesn't handle output to /dev/oss/* device nodes, but all OSS-supporting programs are/can be easily made to output to /dev/dsp).
    vsound ossplay test.wav
  3. (This method doesn't work in build 1016) vmix loopback driver can record the output of a program. Set vmix_numloops to 1 (or more) in vmix.conf, and make the program output to the newly created /dev/oss/vmix0/loop0 device. Then record from that device. e.g.
    ossplay test.wav -d/dev/oss/vmix0/loop0 &
    ossrecord test2.wav -d/dev/oss/vmix0/loop0

Using your multimedia keys with OSS

  1. First, we should make the keys be able to start external scripts. This is outside the scope of this wiki, but is documented at [2] and at [3].
  2. Then, we can use scripts like the examples below:

lowervolume.sh:

 CTRL=vmix0-vol
 VOL=$(ossmix | grep $CTRL | awk '{print $4}' | awk -F : '{print $1}')
 VOL=$(echo $VOL-2 | bc)
 ossmix $CTRL $VOL

raisevolume.sh:

 CTRL=vmix0-vol
 VOL=$(ossmix | grep $CTRL | awk '{print $4}' | awk -F : '{print $1}')
 VOL=$(echo $VOL+2 | bc)
 ossmix $CTRL $VOL

mute.sh:

 #!/bin/bash
 CTRL=vmix0-vol
 VOLUME=$(cat $HOME/.volume)
 if [ -z "$VOLUME" ]; then
       VOLUME=$(ossmix | grep $CTRL | awk '{print $4}' | awk -F : '{print $1}')
       ossmix $CTRL 0
       echo $VOLUME > $HOME/.volume
 else
       ossmix $CTRL $VOLUME
       > $HOME/.volume
 fi

This will restore the previous volume levels when unmuting. Issue a:

 touch $HOME/.volume

before using the first time.

You may wish to modify a different mixer control than vmix0-vol. In that case, you will need to change the value of CTRL above.