17
OSS (Open Sound System) Tutorial 簡簡 OSS 簡簡 OSS 是 Unix 是是(是是 Unix 是是) 是是是 ,。 OSS 是 是 Linux kernel 是 OSS 是 API 是是是 <soundcard.h>是 簡簡簡簡簡簡簡簡 Mixer : Device File on Linux/dev/mixer Codec (ADC/DAC): 是是(是是是是是是是是是是)是是是是是(是是是是是是是是是是)是 Device File on Linux/dev/dsp Sound Card OSS Driver Programs API

OSS Tutorial

  • Upload
    filicio

  • View
    213

  • Download
    1

Embed Size (px)

DESCRIPTION

Tutorial drive som

Citation preview

OSS (Open Sound System) Tutorial

OSS (Open Sound System) Tutorial

OSS

OSSUnix(Unix)OSSLinux kernel

OSSAPI

Mixer :

Device File on Linux/dev/mixer

Codec (ADC/DAC): ()()

Device File on Linux/dev/dsp

1. include OSS API

2. open a device file, get the file descriptor

3. use ioctl function to control the device property

4. read from device, write to device or do nothing5. close the device file

#include #include

#include

#include

int main() {

int mixer_fd;

if ((mixer_fd = open(/dev/mixer,O_RDONLY,0)) == -1) {

perror(mixer);

exit(1);

}int vol = 0x3f3f;

ioctl(mixer_fd, MIXER_WRITE(SOUND_MIXER_VOLUME),&vol);close(mixer_fd);

return 0;}

Mixer Programming

Mixer Programming

Mixer Channelsmixer channelmixerchannelOSSOSS APIMacro

Channel MacrosMarcoDescription

SOUND_MIXER_VOLUME

SOUND_MIXER_TREBLEchannel

SOUND_MIXER_BASSchannel

SOUND_MIXER_PCM(/dev/dsp)

SOUND_MIXER_MIC

SOUND_MIXER_CDCD

SOUND_MIXER_LINEplayer

SOUND_MIXER_NRDEVICES : soundcard.hchannel

0 100

int vol;

ioctl(mixer_fd, MIXER_READ(channel_macro) , &vol);

int vol = 0x5f5f;

ioctl(mixer_fd, MIXER_WRITE(channel_macro) , &vol);

channel_macroMixer Channel Macro

Undefined

16 bits 8 bits 8 bits

=

Ex. int vol = 0x 5f5f

Ex. int vol = 0x 5f;

MixerMacroDescription

SOUND_MIXER_READ_DEVMASKMixer Channels

SOUND_MIXER_READ_RECMASKMixer Channels

SOUND_MIXER_READ_STEREODEVSMixer Channels

:

int mask;

ioctl(mixer_fd, SOUND_MIXER_READ_xxxx, &mask);

OSSMixer Channelsmasknbit1nChannelenable

Channel:

if (mask & (1