1.\" 2.\" Copyright (c) 2009-2011 Joel Dahl <joel@FreeBSD.org> 3.\" All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with or without 6.\" modification, are permitted provided that the following conditions 7.\" are met: 8.\" 1. Redistributions of source code must retain the above copyright 9.\" notice, this list of conditions and the following disclaimer. 10.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" notice, this list of conditions and the following disclaimer in the 12.\" documentation and/or other materials provided with the distribution. 13.\" 14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24.\" SUCH DAMAGE. 25.\" 26.\" $FreeBSD$ 27.\" 28.Dd December 26, 2020 29.Dt SOUND 4 30.Os 31.Sh NAME 32.Nm sound , 33.Nm pcm , 34.Nm snd 35.Nd 36.Fx 37PCM audio device infrastructure 38.Sh SYNOPSIS 39To compile this driver into the kernel, place the following line in your 40kernel configuration file: 41.Bd -ragged -offset indent 42.Cd "device sound" 43.Ed 44.Sh DESCRIPTION 45The 46.Nm 47driver is the main component of the 48.Fx 49sound system. 50It works in conjunction with a bridge device driver on supported devices 51and provides PCM audio record and playback once it attaches. 52Each bridge device driver supports a specific set of audio chipsets and 53needs to be enabled together with the 54.Nm 55driver. 56PCI and ISA PnP audio devices identify themselves so users are usually not 57required to add anything to 58.Pa /boot/device.hints . 59.Pp 60Some of the main features of the 61.Nm 62driver are: multichannel audio, per-application 63volume control, dynamic mixing through virtual sound channels, true full 64duplex operation, bit perfect audio, rate conversion and low latency 65modes. 66.Pp 67The 68.Nm 69driver is enabled by default, along with several bridge device drivers. 70Those not enabled by default can be loaded during runtime with 71.Xr kldload 8 72or during boot via 73.Xr loader.conf 5 . 74The following bridge device drivers are available: 75.Pp 76.Bl -bullet -compact 77.It 78.Xr snd_ad1816 4 79.It 80.Xr snd_ai2s 4 (enabled by default on powerpc) 81.It 82.Xr snd_als4000 4 83.It 84.Xr snd_atiixp 4 85.It 86.Xr snd_cmi 4 (enabled by default on amd64, i386) 87.It 88.Xr snd_cs4281 4 89.It 90.Xr snd_csa 4 (enabled by default on amd64, i386) 91.It 92.Xr snd_davbus 4 (enabled by default on powerpc) 93.It 94.Xr snd_ds1 4 95.It 96.Xr snd_emu10k1 4 97.It 98.Xr snd_emu10kx 4 (enabled by default on amd64, i386) 99.It 100.Xr snd_envy24 4 101.It 102.Xr snd_envy24ht 4 103.It 104.Xr snd_es137x 4 (enabled by default on amd64, i386) 105.It 106.Xr snd_ess 4 107.It 108.Xr snd_fm801 4 109.It 110.Xr snd_gusc 4 111.It 112.Xr snd_hda 4 (enabled by default on amd64, i386) 113.It 114.Xr snd_hdspe 4 115.It 116.Xr snd_ich 4 (enabled by default on amd64, i386) 117.It 118.Xr snd_maestro 4 119.It 120.Xr snd_maestro3 4 121.It 122.Xr snd_mss 4 123.It 124.Xr snd_neomagic 4 125.It 126snd_sb16 127.It 128snd_sb8 129.It 130.Xr snd_sbc 4 131.It 132.Xr snd_solo 4 133.It 134.Xr snd_spicds 4 135.It 136.Xr snd_uaudio 4 (enabled by default on amd64, i386, powerpc) 137.It 138.Xr snd_via8233 4 (enabled by default on amd64, i386) 139.It 140.Xr snd_via82c686 4 141.It 142.Xr snd_vibes 4 143.El 144.Pp 145Refer to the manual page for each bridge device driver for driver specific 146settings and information. 147.Ss Legacy Hardware 148For old legacy 149.Tn ISA 150cards, the driver looks for 151.Tn MSS 152cards at addresses 153.Dv 0x530 154and 155.Dv 0x604 . 156These values can be overridden in 157.Pa /boot/device.hints . 158Non-PnP sound cards require the following lines in 159.Xr device.hints 5 : 160.Bd -literal -offset indent 161hint.pcm.0.at="isa" 162hint.pcm.0.irq="5" 163hint.pcm.0.drq="1" 164hint.pcm.0.flags="0x0" 165.Ed 166.Pp 167Apart from the usual parameters, the flags field is used to specify 168the secondary 169.Tn DMA 170channel (generally used for capture in full duplex cards). 171Flags are set to 0 for cards not using a secondary 172.Tn DMA 173channel, or to 0x10 + C to specify channel C. 174.Ss Boot Variables 175In general, the module 176.Pa snd_foo 177corresponds to 178.Cd "device snd_foo" 179and can be 180loaded by the boot 181.Xr loader 8 182via 183.Xr loader.conf 5 184or from the command line using the 185.Xr kldload 8 186utility. 187Options which can be specified in 188.Pa /boot/loader.conf 189include: 190.Bl -tag -width ".Va snd_driver_load" -offset indent 191.It Va snd_driver_load 192.Pq Dq Li NO 193If set to 194.Dq Li YES , 195this option loads all available drivers. 196.It Va snd_hda_load 197.Pq Dq Li NO 198If set to 199.Dq Li YES , 200only the Intel High Definition Audio bridge device driver and dependent 201modules will be loaded. 202.It Va snd_foo_load 203.Pq Dq Li NO 204If set to 205.Dq Li YES , 206load driver for card/chipset foo. 207.El 208.Pp 209To define default values for the different mixer channels, 210set the channel to the preferred value using hints, e.g.: 211.Va hint.pcm.0.line Ns = Ns Qq Li 0 . 212This will mute the input channel per default. 213.Ss Multichannel Audio 214Multichannel audio, popularly referred to as 215.Dq surround sound 216is supported and enabled by default. 217The FreeBSD multichannel matrix processor supports up to 18 interleaved 218channels, but the limit is currently set to 8 channels (as commonly used 219for 7.1 surround sound). 220The internal matrix mapping can handle reduction, expansion or 221re-routing of channels. 222This provides a base interface for related multichannel 223.Fn ioctl 224support. 225Multichannel audio works both with and without 226.Tn VCHANs . 227.Pp 228Most bridge device drivers are still missing multichannel matrixing 229support, but in most cases this should be trivial to implement. 230Use the 231.Va dev.pcm.%d.[play|rec].vchanformat 232.Xr sysctl 8 233to adjust the number of channels used. 234The current multichannel interleaved structure and arrangement was 235implemented by inspecting various popular UNIX applications. 236There were no single standard, so much care has been taken to try 237to satisfy each possible scenario, despite the fact that each 238application has its own conflicting standard. 239.Ss EQ 240The Parametric Software Equalizer (EQ) enables the use of 241.Dq tone 242controls (bass and treble). 243Commonly used for ear-candy or frequency compensation due to the vast 244difference in hardware quality. 245EQ is disabled by default, but can be enabled with the 246.Va hint.pcm.%d.eq 247tunable. 248.Ss VCHANs 249Each device can optionally support more playback and recording channels 250than physical hardware provides by using 251.Dq virtual channels 252or 253.Tn VCHANs . 254.Tn VCHAN 255options can be configured via the 256.Xr sysctl 8 257interface but can only be manipulated while the device is inactive. 258.Ss VPC 259FreeBSD supports independent and individual volume controls for each active 260application, without touching the master 261.Nm 262volume. 263This is sometimes referred to as Volume Per Channel (VPC). 264The 265.Tn VPC 266feature is enabled by default. 267.Ss Loader Tunables 268The following loader tunables are used to set driver configuration at the 269.Xr loader 8 270prompt before booting the kernel, or they can be stored in 271.Pa /boot/loader.conf 272in order to automatically set them before booting the kernel. 273It is also possible to use 274.Xr kenv 1 275to change these tunables before loading the 276.Nm 277driver. 278The following tunables can not be changed during runtime using 279.Xr sysctl 8 . 280.Bl -tag -width indent 281.It Va hint.pcm.%d.eq 282Set to 1 or 0 to explicitly enable (1) or disable (0) the equalizer. 283Requires a driver reload if changed. 284Enabling this will make bass and treble controls appear in mixer applications. 285This tunable is undefined by default. 286Equalizing is disabled by default. 287.It Va hint.pcm.%d.vpc 288Set to 1 or 0 to explicitly enable (1) or disable (0) the 289.Tn VPC 290feature. 291This tunable is undefined by default. 292.Tn VPC 293is however enabled by default. 294.El 295.Ss Runtime Configuration 296There are a number of 297.Xr sysctl 8 298variables available which can be modified during runtime. 299These values can also be stored in 300.Pa /etc/sysctl.conf 301in order to automatically set them during the boot process. 302.Va hw.snd.* 303are global settings and 304.Va dev.pcm.* 305are device specific. 306.Bl -tag -width indent 307.It Va hw.snd.compat_linux_mmap 308Linux 309.Xr mmap 2 310compatibility. 311The following values are supported (default is 0): 312.Bl -tag -width 2n 313.It -1 314Force disabling/denying PROT_EXEC 315.Xr mmap 2 316requests. 317.It 0 318Auto detect proc/ABI type, allow 319.Xr mmap 2 320for Linux applications, and deny for everything else. 321.It 1 322Always allow PROT_EXEC page mappings. 323.El 324.It Va hw.snd.default_auto 325Automatically assign the default sound unit. 326The following values are supported (default is 1): 327.Bl -tag -width 2n 328.It 0 329Do not assign the default sound unit automatically. 330.It 1 331Use the best available sound device based on playing and recording 332capabilities of the device. 333.It 2 334Use the most recently attached device. 335.El 336.It Va hw.snd.default_unit 337Default sound card for systems with multiple sound cards. 338When using 339.Xr devfs 5 , 340the default device for 341.Pa /dev/dsp . 342Equivalent to a symlink from 343.Pa /dev/dsp 344to 345.Pa /dev/dsp Ns Va ${hw.snd.default_unit} . 346.It Va hw.snd.feeder_eq_exact_rate 347Only certain rates are allowed for precise processing. 348The default behavior is however to allow sloppy processing for all rates, 349even the unsupported ones. 350Enable to toggle this requirement and only allow processing for supported 351rates. 352.It Va hw.snd.feeder_rate_max 353Maximum allowable sample rate. 354.It Va hw.snd.feeder_rate_min 355Minimum allowable sample rate. 356.It Va hw.snd.feeder_rate_polyphase_max 357Adjust to set the maximum number of allowed polyphase entries during the 358process of building resampling filters. 359Disabling polyphase resampling has the benefit of reducing memory usage, at 360the expense of slower and lower quality conversion. 361Only applicable when the SINC interpolator is used. 362Default value is 183040. 363Set to 0 to disable polyphase resampling. 364.It Va hw.snd.feeder_rate_quality 365Sample rate converter quality. 366Default value is 1, linear interpolation. 367Available options include: 368.Bl -tag -width 2n 369.It 0 370Zero Order Hold, ZOH. 371Very fast, but with poor quality. 372.It 1 373Linear interpolation. 374Fast, quality is subject to personal preference. 375Technically the quality is poor however, due to the lack of anti-aliasing 376filtering. 377.It 2 378Bandlimited SINC interpolator. 379Implements polyphase banking to boost the conversion speed, at the cost of 380memory usage, with multiple high quality polynomial interpolators to improve 381the conversion accuracy. 382100% fixed point, 64bit accumulator with 32bit coefficients and high precision 383sample buffering. 384Quality values are 100dB stopband, 8 taps and 85% bandwidth. 385.It 3 386Continuation of the bandlimited SINC interpolator, with 100dB stopband, 36 387taps and 90% bandwidth as quality values. 388.It 4 389Continuation of the bandlimited SINC interprolator, with 100dB stopband, 164 390taps and 97% bandwidth as quality values. 391.El 392.It Va hw.snd.feeder_rate_round 393Sample rate rounding threshold, to avoid large prime division at the 394cost of accuracy. 395All requested sample rates will be rounded to the nearest threshold value. 396Possible values range between 0 (disabled) and 500. 397Default is 25. 398.It Va hw.snd.latency 399Configure the buffering latency. 400Only affects applications that do not explicitly request 401blocksize / fragments. 402This tunable provides finer granularity than the 403.Va hw.snd.latency_profile 404tunable. 405Possible values range between 0 (lowest latency) and 10 (highest latency). 406.It Va hw.snd.latency_profile 407Define sets of buffering latency conversion tables for the 408.Va hw.snd.latency 409tunable. 410A value of 0 will use a low and aggressive latency profile which can result 411in possible underruns if the application cannot keep up with a rapid irq 412rate, especially during high workload. 413The default value is 1, which is considered a moderate/safe latency profile. 414.It Va hw.snd.maxautovchans 415Global 416.Tn VCHAN 417setting that only affects devices with at least one playback or recording channel available. 418The sound system will dynamically create up to this many 419.Tn VCHANs . 420Set to 421.Dq 0 422if no 423.Tn VCHANs 424are desired. 425Maximum value is 256. 426.It Va hw.snd.report_soft_formats 427Controls the internal format conversion if it is 428available transparently to the application software. 429When disabled or not available, the application will 430only be able to select formats the device natively supports. 431.It Va hw.snd.report_soft_matrix 432Enable seamless channel matrixing even if the hardware does not support it. 433Makes it possible to play multichannel streams even with a simple stereo 434sound card. 435.It Va hw.snd.verbose 436Level of verbosity for the 437.Pa /dev/sndstat 438device. 439Higher values include more output and the highest level, 440four, should be used when reporting problems. 441Other options include: 442.Bl -tag -width 2n 443.It 0 444Installed devices and their allocated bus resources. 445.It 1 446The number of playback, record, virtual channels, and 447flags per device. 448.It 2 449Channel information per device including the channel's 450current format, speed, and pseudo device statistics such as 451buffer overruns and buffer underruns. 452.It 3 453File names and versions of the currently loaded sound modules. 454.It 4 455Various messages intended for debugging. 456.El 457.It Va hw.snd.vpc_0db 458Default value for 459.Nm 460volume. 461Increase to give more room for attenuation control. 462Decrease for more amplification, with the possible cost of sound clipping. 463.It Va hw.snd.vpc_autoreset 464When a channel is closed the channel volume will be reset to 0db. 465This means that any changes to the volume will be lost. 466Enabling this will preserve the volume, at the cost of possible confusion 467when applications tries to re-open the same device. 468.It Va hw.snd.vpc_mixer_bypass 469The recommended way to use the 470.Tn VPC 471feature is to teach applications to use 472the correct 473.Fn ioctl : 474.Dv SNDCTL_DSP_GETPLAYVOL, SNDCTL_DSP_SETPLAYVOL, 475.Dv SNDCTL_DSP_SETRECVOL, SNDCTL_DSP_SETRECVOL. 476This is however not always possible. 477Enable this to allow applications to use their own existing mixer logic 478to control their own channel volume. 479.It Va hw.snd.vpc_reset 480Enable to restore all channel volumes back to the default value of 0db. 481.It Va dev.pcm.%d.bitperfect 482Enable or disable bitperfect mode. 483When enabled, channels will skip all dsp processing, such as channel 484matrixing, rate converting and equalizing. 485The pure 486.Nm 487stream will be fed directly to the hardware. 488If 489.Tn VCHANs 490are enabled, the bitperfect mode will use the 491.Tn VCHAN 492format/rate as the definitive format/rate target. 493The recommended way to use bitperfect mode is to disable 494.Tn VCHANs 495and enable this sysctl. 496Default is disabled. 497.It Va dev.pcm.%d.[play|rec].vchans 498The current number of 499.Tn VCHANs 500allocated per device. 501This can be set to preallocate a certain number of 502.Tn VCHANs . 503Setting this value to 504.Dq 0 505will disable 506.Tn VCHANs 507for this device. 508.It Va dev.pcm.%d.[play|rec].vchanformat 509Format for 510.Tn VCHAN 511mixing. 512All playback paths will be converted to this format before the mixing 513process begins. 514By default only 2 channels are enabled. 515Available options include: 516.Bl -tag -width 2n 517.It s16le:1.0 518Mono. 519.It s16le:2.0 520Stereo, 2 channels (left, right). 521.It s16le:2.1 5223 channels (left, right, LFE). 523.It s16le:3.0 5243 channels (left, right, rear center). 525.It s16le:4.0 526Quadraphonic, 4 channels (front/rear left and right). 527.It s16le:4.1 5285 channels (4.0 + LFE). 529.It s16le:5.0 5305 channels (4.0 + center). 531.It s16le:5.1 5326 channels (4.0 + center + LFE). 533.It s16le:6.0 5346 channels (4.0 + front/rear center). 535.It s16le:6.1 5367 channels (6.0 + LFE). 537.It s16le:7.1 5388 channels (4.0 + center + LFE + left and right side). 539.El 540.It Va dev.pcm.%d.[play|rec].vchanmode 541.Tn VCHAN 542format/rate selection. 543Available options include: 544.Bl -tag -width 2n 545.It fixed 546Channel mixing is done using fixed format/rate. 547Advanced operations such as digital passthrough will not work. 548Can be considered as a 549.Dq legacy 550mode. 551This is the default mode for hardware channels which lack support for digital 552formats. 553.It passthrough 554Channel mixing is done using fixed format/rate, but advanced operations such 555as digital passthrough also work. 556All channels will produce sound as usual until a digital format playback is 557requested. 558When this happens all other channels will be muted and the latest incoming 559digital format will be allowed to pass through undisturbed. 560Multiple concurrent digital streams are supported, but the latest stream will 561take precedence and mute all other streams. 562.It adaptive 563Works like the 564.Dq passthrough 565mode, but is a bit smarter, especially for 566multiple 567.Nm 568channels with different format/rate. 569When a new channel is about to start, the entire list of virtual channels will 570be scanned, and the channel with the best format/rate (usually the 571highest/biggest) will be selected. 572This ensures that mixing quality depends on the best channel. 573The downside is that the hardware DMA mode needs to be restarted, which may 574cause annoying pops or clicks. 575.El 576.It Va dev.pcm.%d.[play|rec].vchanrate 577Sample rate speed for 578.Tn VCHAN 579mixing. 580All playback paths will be converted to this sample rate before the mixing 581process begins. 582.It Va dev.pcm.%d.polling 583Experimental polling mode support where the driver operates by querying the 584device state on each tick using a 585.Xr callout 9 586mechanism. 587Disabled by default and currently only available for a few device drivers. 588.El 589.Ss Recording Channels 590On devices that have more than one recording source (ie: mic and line), 591there is a corresponding 592.Pa /dev/dsp%d.r%d 593device. 594The 595.Xr mixer 8 596utility can be used to start and stop recording from an specific device. 597.Ss Statistics 598Channel statistics are only kept while the device is open. 599So with situations involving overruns and underruns, consider the output 600while the errant application is open and running. 601.Ss IOCTL Support 602The driver supports most of the 603.Tn OSS 604.Fn ioctl 605functions, and most applications work unmodified. 606A few differences exist, while memory mapped playback is 607supported natively and in 608.Tn Linux 609emulation, memory mapped recording is 610not due to 611.Tn VM 612system design. 613As a consequence, some applications may need to be recompiled 614with a slightly modified audio module. 615See 616.In sys/soundcard.h 617for a complete list of the supported 618.Fn ioctl 619functions. 620.Sh FILES 621The 622.Nm 623drivers may create the following 624device nodes: 625.Pp 626.Bl -tag -width ".Pa /dev/audio%d.%d" -compact 627.It Pa /dev/audio%d.%d 628Sparc-compatible audio device. 629.It Pa /dev/dsp%d.%d 630Digitized voice device. 631.It Pa /dev/dspW%d.%d 632Like 633.Pa /dev/dsp , 634but 16 bits per sample. 635.It Pa /dev/dsp%d.p%d 636Playback channel. 637.It Pa /dev/dsp%d.r%d 638Record channel. 639.It Pa /dev/dsp%d.vp%d 640Virtual playback channel. 641.It Pa /dev/dsp%d.vr%d 642Virtual recording channel. 643.It Pa /dev/sndstat 644Current 645.Nm 646status, including all channels and drivers. 647.El 648.Pp 649The first number in the device node 650represents the unit number of the 651.Nm 652device. 653All 654.Nm 655devices are listed 656in 657.Pa /dev/sndstat . 658Additional messages are sometimes recorded when the 659device is probed and attached, these messages can be viewed with the 660.Xr dmesg 8 661utility. 662.Pp 663The above device nodes are only created on demand through the dynamic 664.Xr devfs 5 665clone handler. 666Users are strongly discouraged to access them directly. 667For specific sound card access, please instead use 668.Pa /dev/dsp 669or 670.Pa /dev/dsp%d . 671.Sh EXAMPLES 672Use the sound metadriver to load all 673.Nm 674bridge device drivers at once 675(for example if it is unclear which the correct driver to use is): 676.Pp 677.Dl kldload snd_driver 678.Pp 679Load a specific bridge device driver, in this case the Intel 680High Definition Audio driver: 681.Pp 682.Dl kldload snd_hda 683.Pp 684Check the status of all detected 685.Nm 686devices: 687.Pp 688.Dl cat /dev/sndstat 689.Pp 690Change the default sound device, in this case to the second device. 691This is handy if there are multiple 692.Nm 693devices available: 694.Pp 695.Dl sysctl hw.snd.default_unit=1 696.Sh DIAGNOSTICS 697.Bl -diag 698.It pcm%d:play:%d:dsp%d.p%d: play interrupt timeout, channel dead 699The hardware does not generate interrupts to serve incoming (play) 700or outgoing (record) data. 701.It unsupported subdevice XX 702A device node is not created properly. 703.El 704.Sh SEE ALSO 705.Xr snd_ad1816 4 , 706.Xr snd_ai2s 4 , 707.Xr snd_als4000 4 , 708.Xr snd_atiixp 4 , 709.Xr snd_cmi 4 , 710.Xr snd_cs4281 4 , 711.Xr snd_csa 4 , 712.Xr snd_davbus 4 , 713.Xr snd_ds1 4 , 714.Xr snd_emu10k1 4 , 715.Xr snd_emu10kx 4 , 716.Xr snd_envy24 4 , 717.Xr snd_envy24ht 4 , 718.Xr snd_es137x 4 , 719.Xr snd_ess 4 , 720.Xr snd_fm801 4 , 721.Xr snd_gusc 4 , 722.Xr snd_hda 4 , 723.Xr snd_hdspe 4 , 724.Xr snd_ich 4 , 725.Xr snd_maestro 4 , 726.Xr snd_maestro3 4 , 727.Xr snd_mss 4 , 728.Xr snd_neomagic 4 , 729.Xr snd_sbc 4 , 730.Xr snd_solo 4 , 731.Xr snd_spicds 4 , 732.Xr snd_t4dwave 4 , 733.Xr snd_uaudio 4 , 734.Xr snd_via8233 4 , 735.Xr snd_via82c686 4 , 736.Xr snd_vibes 4 , 737.Xr devfs 5 , 738.Xr device.hints 5 , 739.Xr loader.conf 5 , 740.Xr dmesg 8 , 741.Xr kldload 8 , 742.Xr mixer 8 , 743.Xr sysctl 8 744.Rs 745.%T "Cookbook formulae for audio EQ biquad filter coefficients (Audio-EQ-Cookbook.txt), by Robert Bristow-Johnson" 746.%U "https://www.musicdsp.org/en/latest/Filters/197-rbj-audio-eq-cookbook.html" 747.Re 748.Rs 749.%T "Julius O'Smith's Digital Audio Resampling" 750.%U "http://ccrma.stanford.edu/~jos/resample/" 751.Re 752.Rs 753.%T "Polynomial Interpolators for High-Quality Resampling of Oversampled Audio, by Olli Niemitalo" 754.%U "http://yehar.com/blog/wp-content/uploads/2009/08/deip.pdf" 755.Re 756.Rs 757.%T "The OSS API" 758.%U "http://www.opensound.com/pguide/oss.pdf" 759.Re 760.Sh HISTORY 761The 762.Nm 763device driver first appeared in 764.Fx 2.2.6 765as 766.Nm pcm , 767written by 768.An Luigi Rizzo . 769It was later 770rewritten in 771.Fx 4.0 772by 773.An Cameron Grant . 774The API evolved from the VOXWARE 775standard which later became OSS standard. 776.Sh AUTHORS 777.An -nosplit 778.An Luigi Rizzo Aq Mt luigi@iet.unipi.it 779initially wrote the 780.Nm pcm 781device driver and this manual page. 782.An Cameron Grant Aq Mt gandalf@vilnya.demon.co.uk 783later revised the device driver for 784.Fx 4.0 . 785.An Seigo Tanimura Aq Mt tanimura@r.dl.itc.u-tokyo.ac.jp 786revised this manual page. 787It was then rewritten for 788.Fx 5.2 . 789.Sh BUGS 790Some features of your sound card (e.g., global volume control) might not 791be supported on all devices. 792