WO2001050598A2 - Audio device driver - Google Patents

Audio device driver Download PDF

Info

Publication number
WO2001050598A2
WO2001050598A2 PCT/US2001/000224 US0100224W WO0150598A2 WO 2001050598 A2 WO2001050598 A2 WO 2001050598A2 US 0100224 W US0100224 W US 0100224W WO 0150598 A2 WO0150598 A2 WO 0150598A2
Authority
WO
WIPO (PCT)
Prior art keywords
audio data
driver
sound
digitized
device driver
Prior art date
Application number
PCT/US2001/000224
Other languages
French (fr)
Other versions
WO2001050598A3 (en
Inventor
Frank A. Scarpino
Arturo H. Garcia
Scott M. Blandford
Original Assignee
True Dimensional Sound, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by True Dimensional Sound, Inc. filed Critical True Dimensional Sound, Inc.
Priority to AU26284/01A priority Critical patent/AU2628401A/en
Publication of WO2001050598A2 publication Critical patent/WO2001050598A2/en
Publication of WO2001050598A3 publication Critical patent/WO2001050598A3/en

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/10009Improvement or modification of read or write signals
    • G11B20/10046Improvement or modification of read or write signals filtering or equalising, e.g. setting the tap weights of an FIR filter
    • G11B20/10212Improvement or modification of read or write signals filtering or equalising, e.g. setting the tap weights of an FIR filter compensation for data shift, e.g. pulse-crowding effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • G06F3/162Interface to dedicated audio devices, e.g. audio drivers, interface to CODECs
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/10009Improvement or modification of read or write signals
    • G11B20/10037A/D conversion, D/A conversion, sampling, slicing and digital quantisation or adjusting parameters thereof
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/10009Improvement or modification of read or write signals
    • G11B20/10046Improvement or modification of read or write signals filtering or equalising, e.g. setting the tap weights of an FIR filter
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/10527Audio or video recording; Data buffering arrangements

Definitions

  • This application relates to an audio device driver, in particular, to an audio device driver that includes a component d ⁇ ver capable of intercepting a signal pointing to stored digitized audio information such that the digitized information is subjected to sound modification processing and/or stored in memory prior to being received by a sound playback system and, more particularly to such a driver that operates in kernel mode.
  • SUBSTITUTE SHEET (RULE26J Background of the Invention
  • Computer operating systems manage the operation of multiple application programs concurrently. Such programs typically write (issue) digitally represented sound or audio data to a sound playback system.
  • "Writing" digitized audio data to a sound playback system involves the application program storing the digitized data in computer memory that it controls as well as generating an I/O request, typically a WaveOut signal, to the sound playback system, wherein the request includes pointers to the stored digitized audio data.
  • the operating system retrieves the digitized audio data from the initial memory locations and stores the data in new memory locations it controls and changes the pointers in the I/O request to reflect the new memory locations.
  • a sound playback system is defined herein as a sound card and one or more speakers.
  • the computer operating system receives the I/O request originating from the application program and outputs a modified request in a format acceptable to the sound card, which request may point to the stored digitized audio information.
  • the sound card then retrieves the digitized audio information from memory and converts the information into an analog signal, which is used to drive the one or more speakers.
  • Digitized audio information may be read or retrieved from one or more of a plurality of audio sources, including compact disks (CDs), digital video disk (DVD) players, computer games, files (e.g., MP3 files) downloaded over the Internet, and streaming audio received over the Internet. Special considerations attach to the use of each of these audio sources.
  • Playback of music recorded on a compact disk requires a compact disk player and an application software program for causing the compact disk player to scan the compact disk and read digital information stored thereon. Digital information representing audio infonnation is then written by the application program to the sound playback system.
  • Audio information is separated from the video data and handled in a manner similar to compact disk playback.
  • Playback of sounds related to computer games requires that the user execute game application software. At various times determined by the game application software, it writes digital info ⁇ nation representing sounds to the sound playback system.
  • music files may remain in computer memory, stored on magnetic disks or stored onto compact disks. Playback of files retrieved from the Internet
  • Internet requires a special player that can locate the files from computer memory and/or magnetic disk and/or compact disk. The special player then reads the digital information representing sound information from the stored location and writes it to a sound playback system.
  • Playback of streaming audio information retrieved from the Internet requires a special player.
  • the special player must retrieve real-time audio streams of digital information from the Internet.
  • the special player must then write these streams of digital data representing audio information to a sound playback system.
  • Each distinct sound application program (e.g., CD or DVD player program, computer game program, retrieved musical file program, retrieved streaming audio program) has the capability to effect the reading or retrieving of digital information from an appropriate source (e.g., CD or DVD player, etc.) and write that digital information to a sound playback system.
  • the application programs typically operate in "user mode.”
  • a computer typically has several modes of operation relative to the notion of "privilege.” Privilege has to do with the degree of access that a program has to various functional capabilities and resources contained within a computer.
  • "User Mode” is typically a designated mode wherein the current executing program has the most limited access to computer resources and functions.
  • Typical user application programs operate in "user mode.”
  • Kernel Mode is typically a privileged mode wherein the current executing program has complete and unlimited access to all computer functional capabilities and resources. Only operating system components have access to kernel mode.
  • Shared resources are resources typically shared across a multiplicity of application programs. Typical shared resources include but are not limited to: (1) monitor, (2) disk drives, (3) sound cards, (4) printers. Therefore, when an application program "writes" to a sound playback system, the operating system intervenes, intercepting the signal pointing to the stored digital information representing the sound to be played. It also transfers the digitized audio data to new memory locations and modifies the signal so as to point to the new memory locations containing the digitized audio data. The operating system then transmits the signal to the sound playback system on behalf of the application program. This intervention prevents sounds emanating from various application programs from becoming intermixed and therefore confused during playback. This intervention also permits various application programs to use common commands with which to "write" digital sound information to the wide variety of available sound playback systems.
  • the quality of the sound produced by each of the above mentioned audio application programs can be improved by applying sound modification processing.
  • a listener's sound experience can be enhanced or otherwise altered by appropriate digital sound modification processing (e.g., equalization, volume control, 3-dimensional processing, reverberation, etc.).
  • digital sound modification processing e.g., equalization, volume control, 3-dimensional processing, reverberation, etc.
  • the motivation for such modifications may vary from application to application, and the particular modifications may vary as well. However, the requirement and desirability of modifications is common to all such applications.
  • an audio device driver including a component driver capable of intercepting a signal pointing to digitized audio information or data, wherein both the signal and the audio information originate at an application program, such that the stored digitized audio information can be modified and/or stored elsewhere before being provided to a sound playback system.
  • the digitized audio information or data being pointed to is stored.
  • the intercepting component driver may include software for modifying the stored digitized data via 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control and/or software for storing the digitized data elsewhere.
  • the intercepting component driver may transfer the signal to a separate software module which is capable of modifying the stored digitized data via 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control, and/or software for storing the digitized audio data elsewhere.
  • the signal pointing to the audio data is received by a functional component driver, which provides the signal to a sound card in a format acceptable to the sound card. The sound card then retrieves the audio data from memory and converts the data into an analog signal, which is used to drive one or more speakers.
  • the intercepting component driver comprises an executable program stored in computer memory.
  • the executable program is in a logical data flow path between one or more application programs and one or more sound playback systems, i.e., the intercepting component driver could be incorporated into two or more device drivers associated with a like number of sound cards.
  • the intercepting driver executes in kernel mode to attain access to shared resources, e.g., a sound playback system not directly accessible to application software programs.
  • the intercepting driver is a natural operating system extension since it operates in a kernel, privileged mode and therefore has access to any and all computer functions and resources, including the sound playback system.
  • Processing of digitized audio information or data is dependent upon several parameters of the data, subject to the constraint that sufficient processing time is available.
  • the parameters of primary interest include: (1) Sampling rate, (2) Bits per sample, (3) Number of channels, (4) Code format.
  • Sampling Rate The sampling rate indicates the number of bits recorded for each sample of the digital information. For example, a musical Compact Disk usually contains sampled data at 44,100 samples per second. Other sampling rates typically available are: (1) 22,050 samples per second, (2) 11,025 samples per second, (3) 48,000 sample per second. Many other sampling rates exist. Processing of the digital information is dependent upon the sampling rate. The intercepting component driver deduces the number of samples per second and processes the information in accordance with the number of samples per second contain within the digitized information.
  • bits per sample indicate the accuracy of the samples and the dynamic range available. For example, compact disk music is sampled at a resolution of 16 bits per sample. Furthermore, the compact disk music represents digital sound information in a two's complement — +32,767 to -32,678 — so that there is a total range of 65,535 or about 96 dB of range. Processing of the digital sound information is dependent upon the number of bits per sample. Therefore, the intercepting component driver must deduce the number of bits per sample in the represented digital information and process the information accordingly. Some data is recorded at 8 bits per sample. The intercepting driver must extract and process the eight bits per sample data differently than the sixteen bits per sample noted above.
  • Each digital sound record contains the number of channels.
  • the data could be monophonic (one channel of digital sound information), stereophonic (two channels of information), quadraphonic (four channels of information).
  • the information may be in any number of channels.
  • the digital sound data is
  • SUBSTITUTE SHEET located in a memory buffer in sequential locations. Data from the various channels is typically interleaved in successive locations in the sound buffer. Since each channel of information is processed independently, the intercepting component driver must deduce the number of channels represented by the digital sound information. Each distinct channel is then processed independently.
  • the digital sound information may be recorded in several code formats.
  • compact disk music information is typically recorded in two's complement format.
  • This so-called 16-bit pulse code modulation (PCM) format is a usual but not necessarily invariant format for 16-bit information.
  • the code format differs from the 16 bit two's complement PCM format discussed above.
  • Some computer sounds are recorded in 8 bit per sample excess 128 format. In this case the data is represented as 8 bits of PCM code for each digital data sample.
  • the excess 128 format means that the data is stored as standard binary information except that the digital code for 128 ⁇ 0 represents zero. All PCM data above 128 (129 to 255) represents positive data and all PCM data below 128 (0 to 127) represents negative data.
  • the processing of sound data is dependent upon the exact code in which the data is represented. Therefore, the intercepting component driver must deduce the particular code format in which the data is represented prior to processing the sound data.
  • the driver may initiate or invoke processing software which may be incorporated into the intercepting component driver or comprise a separate software module.
  • the intercepting driver software or the software module executes a digital software modification or processing function, such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; volume control; and/or data memory storage.
  • the intercepting component driver or separate processing module stores the modified and/or stored information in a buffer and subsequently passes a signal pointing to the processed data to the next component driver in the device driver.
  • the intercepting driver software or the software module may comprise a digital filter for effecting sound enhancement processing.
  • the digital filter enhances the harmonic quality of digitized audio data, in particular audio data having a complex wave form (i.e., multiple frequency components such as, for example, music, singing, speech, animal sounds, naturally occurring sounds, equipment noises, and the like), such that the digitized audio data enhanced via the filter exhibits an improved harmonic quality compared to that of the input digitized audio data. It has been found that a similar harmonic enhancement can be obtained using the circuits disclosed in U.S. Patent No. 5,361 ,306; U.S. Patent Application Serial No.
  • a device driver is provided forming part of or an extension of an operating system.
  • the operating system is adapted to receive digitized audio data from an application program.
  • the device driver comprises: an intercepting component driver which is capable of initiating at least one of sound modification processing of the digitized audio data and storage of the digitized audio data.
  • the component driver effects sound modification processing of the digitized audio data.
  • the sound modification processing may comprise at least one of 3- dimensional processing; reverberation processing; equalization processing; sound enhancement
  • the sound modification processing may comprise sound enhancement processing using a digital filter.
  • the digital filter may comprise a series of digitized time coefficients stored in a memory. The time coefficients are mapped to a like number of frequency coefficients. The frequency coefficients are spaced at frequency intervals having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter.
  • the time coefficients are odd in number, and the number of the time coefficients may be equal to or greater than 5. It is also contemplated that the time coefficients may be even in number.
  • the time coefficients may be defined by inverse discrete Fourier transforms of the frequency coefficients.
  • a portion of the frequency coefficients having frequencies within a free band may be selected so as to achieve a generally constant oscillation frequency across a center band which is broader than the free band.
  • the frequency coefficients may be spaced at equal frequency intervals.
  • the time coefficients may be integer numbers.
  • the component driver may further initiate storage of the digitized audio data on one of a compact disk, a digital video disk, a floppy disk and computer memory.
  • the component driver may initiate storage of the digitized audio data on one of a compact disk, a digital video disk, a floppy disk and computer memory without effecting sound modification processing of the digitized audio data.
  • the intercepting component driver is capable of initiating the at least one of sound modification processing of the digitized audio data and storage of the digitized audio data in kernel mode.
  • a device driver forming part or an extension of an operating system.
  • the operating system is adapted to receive digitized audio data from an application program.
  • the device driver comprises: at least two layered component drivers including a functional component driver which manages the operation of a sound card device and an intercepting component driver positioned above the functional driver and being capable of initiating at least one of sound modification processing of the digitized audio data and storage of the digitized audio data.
  • the digitized audio data may be stored in a first portion of computer memory and the intercepting component driver may initiate the at least one of sound modification processing and storage by intercepting a signal pointing to the digitized audio data stored in the first portion of computer memory and output by the application program, retrieving the digitized data from the first portion of memory and effecting the at least one of sound modification processing of the digitized data and storage of the digitized data.
  • the intercepting component driver effects sound modification processing of the digitized data.
  • the component driver may effect the sound modification of the digitized audio data via at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
  • the intercepting component driver may effect sound enhancement processing of the digitized audio data using a digital filter.
  • the digital filter comprising a series of digitized time coefficients stored in a memory.
  • the time coefficients are mapped to a like number of frequency coefficients.
  • the frequency coefficients are spaced at frequency intervals having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter. It is also contemplated that non-linear spaced phase angles may be employed.
  • the intercepting component driver may further cause the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
  • the intercepting component driver may cause the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory without effecting sound modification processing.
  • the digitized audio data is stored in a first portion of computer memory and the intercepting component driver initiates the at least one of sound modification processing and storage by intercepting a signal pointing to the digitized audio data stored in computer memory and output by the application
  • UBSTITUTE SHEET (RULE26) program, transferring the signal to a separate software module such that the module may retrieve the digitized data from the first portion of memory and effect the at least one of sound modification processing of the digitized data and storage of the digitized data.
  • the software module effects sound modification processing of the digitized data.
  • the software module may effect the sound modification of the digitized audio data via at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
  • the software module may effect sound enhancement processing of the digitized audio data using a digital filter.
  • the digital filter comprises a series of digitized time coefficients stored in a memory. The time coefficients are mapped to a like number of frequency coefficients.
  • the frequency coefficients are spaced at frequency intervals having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter. It is also contemplated that non-linear spaced phase angles may be employed.
  • the software module may further cause the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
  • the software module causes the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory without effecting sound modification processing.
  • the intercepting component driver is capable of initiating the at least one of sound modification processing of the digitized audio data and storage of the digitized audio data in kernel mode.
  • a computer-implemented method for creating processed sound from digitized audio data.
  • the process comprises the steps of: storing the digitized audio data in memory; creating a kernel mode streaming signal pointing to the stored audio data; using the kernel mode streaming signal for kernel mode enhancement of the data, the kernel mode enhancement comprising real time inverse convolution of the audio data and a series of time coefficients derived from frequency coefficients inversely related to the response of the human ear across a range of frequencies; and using the audio data, enhanced as aforesaid, for kernel mode generation of processed sound.
  • the enhancement of the audio data may be performed by an intercepting component driver in a device driver or a separate software module.
  • a method for processing sound comprising the steps of: 1. generating a set of frequency coefficients inversely related to the responsiveness of the human ear, 2. converting the frequency coefficients to time coefficients, 3. sampling the sound to generate an endless series of raw audio data, 4. storing the raw audio data, 5. generating a series of addresses indicating the locations of the stored data, 6. reading the raw audio data from memory, 7. generating a series of processed audio data by convolving the raw audio samples against the time coefficients, and 8. using the processed audio data to drive a sound generator, such as one or more speakers.
  • the steps 4 through 7 may be performed by a digital computer operating in kernel mode.
  • Fig. 1 is a block diagram illustrating components of a conventional computer operating system having layered device drivers
  • Fig. 1A illustrates a device control block and call-down table of a prior art device driver
  • Fig. 2 illustrates a device driver constructed in accordance with the present invention along with an API and an input output system
  • Fig. 3 illustrates K-mode structures for KS-Property IRP evaluation
  • Fig. 4 illustrates K-mode structures for KS_Write_Stream IRP evaluation
  • Figs. 5-7 are illustrations of frequency response curves for a digital filter configured in accordance with first, second and third embodiments, respectively, of the present invention.
  • Fig. 8 is a block diagram of an intercepting component driver constructed in accordance with the present invention.
  • the present invention contemplates both methods and systems for dynamically extending an operating system, which uses one or more layered device drivers, each comprising a plurality of data managers or component drivers, in fulfilling I/O requests issued by an application program or software, such as an audio application program. More specifically, the present
  • UBSTrrUTE SHEET (RULE26) invention contemplates interrupting the normal sequence of processing in the operating system such that an audio I/O request, which includes pointers to stored digitally represented sound information issued by an application program to a sound playback system, can be intercepted by a component driver.
  • the component driver then initiates sound modification processing of the digitized audio data and/or storage of the digitized data elsewhere in computer memory or on a separate memory device before the data is provided to a functional or lower-most component driver.
  • the intercepting component driver may include software for effecting sound modification processing such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control.
  • the intercepting component driver may transfer the I/O request to a separate software module having the capability to effect sound modification processing such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control.
  • sound modification processing such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control.
  • the request pointing to the audio information is received by a functional component driver, which provides the request to a sound card in a format acceptable to the sound card.
  • the sound card retrieves the audio data from memory and converts the data into an analog signal, which is used to drive one or more speakers.
  • Fig. 1 is a block diagram illustrating components of a conventional operating system 201 having device drivers configured during computer start-up or restart.
  • the system 201 once configured, functions as follows.
  • An application program 200 formulates an input/output (I/O) request and passes that request to the operating system 201 through an application program interface 202.
  • the application program interface 202 provides the application program 200 with access to the operating system 201.
  • IOS input-output system
  • the input-output system 203 determines which of a plurality of device drivers, only device drivers 204 and 205 are illustrated, is identified in the request.
  • Device driver 204 comprises a plurality of component drivers 210, 211, ***, N Driver, while device driver 205 comprises a plurality of component drivers 220, 221, ***, N Driver.
  • Component drivers 210 and 220 comprise upper-most drivers, while component drivers N Drivers, also referred to herein as functional drivers, are the lowermost drivers.
  • the input-output system 13 initially invokes the upper-most layer component driver 210, passing it the request.
  • the upper-most layer driver 210 performs component driver specific functions and invokes, when appropriate, the next lower layer component driver 211, passing it the request.
  • the next lower layer component driver performs its own component driver specific functions and invokes, when appropriate, the next lower layer component driver, passing it the request, and so on.
  • the lower-most driver N Driver interacts with a device adapter, such as a device adapter for a disk drive.
  • Fig. 1 A is a block diagram illustrating conventional data structures that support the layering of component drivers in a device driver. While the data structures for each device driver are identical, those illustrated in Fig. 1A will be described as corresponding to the device driver 204.
  • the device driver 204 contains a device control block (DCB) 402, a call-down table (CDT) 403, and a plurality of component drivers 210, 211, ***, N Driver. As is illustrated in Fig. 1, device driver 204 corresponds to device 208.
  • DCB device control block
  • CDT call-down table
  • the device control block 402 contains information indicating the type of the device 208 (disk drive, etc.), and a pointer 43 A that will point to each entry 403 A, 403B, ***, 403N in the call-down table 403 so as to invoke the component driver identified by the entry.
  • the call-down table entries 403A, 403B, ***, 403N also have pointers 404A, 404B, ***, 404N, which point to the component drivers 210, 21 1, ***, N Driver of the device driver 204.
  • the call-down table 403 specifies the order in which the component drivers are executed to process the I/O request.
  • the upper-most (first) entry 403A in the call-down table 403 points to the upper-most (first) layer component driver 210.
  • the second entry 403B in the call-down table 403 points to the second layer component driver 21 1, and so on.
  • Each layer component driver invokes the next lower layer component driver.
  • the layer component drivers control the execution of the device driver 204.
  • the IOS 203 When the IOS 203 receives an I/O request, it selects the device control block 402 of the device driver 204 or 205, which is to process the I/O request. It then stores in the selected control block 402 an entry pointer 43 A to the first entry 403 A of the call-down table 403 corresponding to the selected device control block 402.
  • the IOS 13 invokes the component driver pointed to by the first entry 403A in the call-down table 403 related to the selected device control block 402, passing the component driver the selected device control block 402.
  • the component driver performs its component driver specific functions, adjusts the entry pointer 43A in the device control block 402 to point to the entry in the call-down table 403 for the next component driver so as to invoke the next lower component driver.
  • the next component driver performs its own component driver specific functions and invokes, when appropriate, the next lower layer component driver, and so on.
  • the operating system 201 invokes a driver configuration routine that is part of the IOS 13.
  • the driver configuration routine inputs (typically from a storage device) a load table (not shown) and creates and initializes a device control block and a call-down table for each device.
  • the load table contains a list of pointers to component drivers that are available to be configured into device drivers.
  • the driver configuration routine scans the load table and loads into memory each component driver in order, starting with the component driver pointed to by the last load table entry. A component driver is selected for inclusion into a device driver for a particular device by allowing the component driver itself to determine whether to be included.
  • the configuration routine invokes the component driver to determine whether it should be included in the call-down table for the device driver. If the component driver determines that it should be included, then the component driver includes itself into the call-down table for that device driver by inserting a pointer to itself in the call-down table.
  • the call-down table functions as a stack in that new entries are pushed onto the top of the call-down table and existing entries are pushed down.
  • Fig. 2 illustrates an audio device driver 300 constructed in accordance with the present invention. It forms part of a modified computer operating system.
  • An operating system capable of being modified in accordance with the present invention, may comprise a commercially available 32-bit operating system (OS) developed by Microsoft Corporation and distributed under the trademarks Windows 98, Windows NT and Windows 2000.
  • OS operating system
  • Many Windows operating systems support layered device drivers. Such layered device drivers are described, for example, in U.S. Patent Nos. 5,613,123; 5,781,797; 5,931,935, each assigned to Microsoft Corporation, the disclosures of which are hereby incorporated herein.
  • layered device drivers are described, for example, in U.S. Patent Nos. 5,613,123; 5,781,797; 5,931,935, each assigned to Microsoft Corporation, the disclosures of which are hereby incorporated herein.
  • layered device drivers are described, for example, in U.S. Patent Nos. 5,613,123; 5,781,797; 5,931,935, each assigned to Microsoft Corporation
  • SUBST ⁇ UTE SHEET designed in accordance with a Windows Driver Model (WDM) specification, created by Mircosoft Corporation. Further information regarding the WDM architecture and layered device drivers is set out in the following documents, each of which is incorporated herein by reference: Windows 2000 Driver Development Kit, Microsoft Press, 2000; Programming the Microsoft Windows Driver Model, Walter Oney, Microsoft Press, 1999; Windows NT Device Driver Development, P.G. Viscarola and W. G.
  • WDM Windows Driver Model
  • the audio device driver 300 comprises a layered device driver.
  • an audio source application program such as a media player 10 interacts with a hardware device, e.g., a compact disk player, a DVD player or like device, so as to retrieve digitized audio information or data from a memory device, e.g., a compact disk (CD), a digital video disk (DVD), and then stores the digitized audio data in memory buffers it controls in computer memory.
  • a hardware device e.g., a compact disk (CD), a digital video disk (DVD)
  • the media player 10 retrieves digitized audio information from files (e.g., MP3 files) stored in computer memory, or processes digitized audio information generated by a computer game or received over the Internet as streaming audio and subsequently stores the digitized audio data in memory buffers.
  • the digitized audio data comprises pulse code modulated (PCM) data representing sound.
  • PCM pulse code modulated
  • the media player 10 then issues an I/O request in the form of a WaveOut command or signal, which is received by an application program interface (API) 12.
  • the request contains pointers to the buffers in computer memory containing the digitized audio information.
  • the API 12 modifies the WaveOut command so that it is in a format acceptable to an input output system (IOS) 13, which receives the command.
  • IOS input output system
  • the IOS 13 forms part of the computer operating system. It determines which device driver can service the request based on the device driver identified in the WaveOut command. Assuming that the IOS 13 determines that the I/O request has identified device driver 300 corresponding to sound card 42, illustrated in Fig. 2, the IOS 13 first converts the WaveOut command into I/O request packets or IRPs, as will be described below, and passes those IRPs to the device driver 300.
  • the API 12 transfers the WaveOut command to an audio processing program 14, one of which was developed by Microsoft and is known as "winMM.DLL.”
  • the audio processing program 14 transfers the digitized audio data into other buffers in computer memory, which buffers are controlled by the operating system. It also changes the pointers in the WaveOut command to reflect the new memory locations. It then relays the WaveOut command to a WDM audio driver 18, which also operates in the user mode, and may comprise a Microsoft driver known as "WDMAUD.DRV.”
  • the driver 18 translates the WaveOut command into IOCTL messages, which are provided to a kernel mode WDM audio driver 22.
  • Audio driver 22 may be a Microsoft file termed "WDMAUD.SYS.”
  • the driver 22 converts IOCTL messages into packets of information that are formatted correctly for processing inside the kernel mode. Those packets of information are generally referred to as I/O request packets or IRPs.
  • the IRPs contain pointers to the buffers in computer memory containing the digitized audio data.
  • the IRPs are provided to system audio device 26 and kernel mixer and sample rate converter 30, before being provided to the device driver 300. Files winMM.DLL; WDMAUD.DRV; and WDMAUD.SYS are incorporated into most Windows operating systems.
  • System audio device 26 may comprise Microsoft file "SYSAUDIO.SYS,” which is also incorporated into most Windows operating systems.
  • Sample rate converter 30 may comprise Microsoft file "KMIXER.SYS,” also incorporated into most Windows operating systems, which provides system-wide audio mixing, bit-depth conversion, and sample rate conversion for PCM audio streams. All PCM data may be converted to 44.1 KHz, 16-bits samples.
  • the kernel mixer and sample rate converter 30 passes IRPs to the device driver 300. More specifically, those IRPs are received by an intercepting component driver 50 which,- in the illustrated embodiment, is the upper-most component driver in the device driver 300. It is noted that another component driver, which performs a different function from that of the component driver 50, may be positioned above component driver 50 in the call-down table for the device 42.
  • the component driver 50 when activated via a user program 55, captures IRPs (pointing to stored digitized audio data or samples) streaming through the component device 50 and sends those IRPs directly to one or more processing modules 51.
  • the one or more processing modules 51 retrieve the data from first computer memory locations, modify the digitized audio signal via one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control, and store the modified digitized audio data back in the first computer memory locations.
  • the modified digitized audio data could be stored in second computer memory locations.
  • a first software module 51 may be provided for effecting a conventional 3-dimensional processing scheme while a second module 51 , placed in series with the first module, may be provided for effecting volume control.
  • a single processing module 51 could be provided for effecting those two functions.
  • the final processing module 51 directs the IRPs pointing to the modified digitized audio data back to the component driver 50 so as to be sent by the driver 50 to the next component driver in the call-down table, which, in the illustrated embodiment, is port class component driver 34.
  • the final processing module 51 may divert the IRP's pointing to the modified data directly to the port class driver 34.
  • the component driver 50 may divert the IRPs pointing to the modified digitized audio data to a storage module 52A, i.e., a storage device driver, so that the processed data may be stored on a storage medium such as computer memory (other locations), a DVD, a CD, a floppy disk or the like.
  • the IRPs pointing to the modified and stored digitized audio data are then sent back by the storage module 52A to the component driver 50 so as to be sent by the driver 50 to the next component driver in the call-down table, which, in the illustrated embodiment, is port class component driver 34.
  • the storage module 52A may divert the IRP's pointing to the modified and stored data directly to the port class driver 34.
  • the component driver 50 may transfer the IRPs pointing to the digitized audio data directly to a storage module 52 without ever sending the IRPs to a processing module 51.
  • the IRPs pointing to the stored data are then transferred either back to the component driver 50 or directly to the port class component driver 34.
  • the port class component driver 34 comprises a kernel mode dynamic link library (DLL) that converts IRPs into streams of data compatible with Industry Standard Architecture (ISA), direct memory access (DMA) or peripheral connection interface (PCI) audio device drivers. Those streams of data are passed to an audio adapter component driver 38, comprising a
  • DLL kernel mode dynamic link library
  • SUBSTfTUTE SHEET (RULE26) functional driver, which interfaces directly with the sound card 42.
  • the driver 38 is typically provided by the hardware manufacturer and acts to convert the streams of data from the driver 34 into a format acceptable to the sound card 42.
  • the sound card 42 then retrieves the modified and/or stored digitized audio data from memory (or the audio adapter component driver 38 retrieves the modified and/or stored digitized audio data from memory and then writes the data to the sound card 42) and converts the data into an analog signal for driving one or more speakers (not shown).
  • any number of additional component drivers may be positioned directly or indirectly above or below the intercepting component driver 50.
  • the installer software for the component driver 50 adds an "UpperFilters" entry into the operating system registry. This operation is performed as follows.
  • the installation software locates all eligible audio devices (i.e., sound cards) on the system and presents a list of the audio devices to a user for selection of the device driver to receive component driver 50. To locate all eligible audio devices, the installation software executes the following steps.
  • the DeviceClasses key contains information about the device interfaces on the machine.
  • the subkeys under this key represent each instance of an interface registered for the particular class interface.
  • the device class interface we are interested in is the KSCATEGORY AUDIO interface represented by the GUID 69941D04-93EF-1 1D0- A3CC-00A0c9223196.
  • the subkey for each registered instance is checked to verify that it contains an entry for Devicelnstance, and RefCount.
  • a candidate device i.e., a sound card
  • a candidate device passes the above checks it is added to a list for user selection. The user then selects an audio device from the list of eligible candidates.
  • An "UpperFilters" entry specifying the component driver 50 is added/modified under the Devicelnstance subkey in the "ENUM" branch of the registry for the selected device.
  • a driver configuration routine scans the load table and loads into memory each component driver in order, starting with the component driver pointed to by the last load table entry.
  • a component driver is selected for inclusion into a device driver for a particular device by allowing the component driver itself to determine whether to be included.
  • the component driver 50 once it determines it should be part of the device driver 300, is appropriately placed in the call-down table for the device driver 300 by issuing the following program instructions:
  • IoAttachDeviceToDeviceStack (IN PDEVICE OBJECT SourceDevice. ⁇ N PDEVICE OBJECT TargetDevice);
  • the component driver 50 is positioned in the call-down table above the audio adapter component driver 38, all IRPs directed toward that component driver 38, and, hence, the sound card 42, first pass through the component driver 50.
  • the component driver 50 is first only interested in Device_Control IRPs; all others are passed along to the port class component driver 34 below.
  • the component driver 50 is interested in identifying two specific types: 1 ) KS_PROPERTY 2) KS WRITE STREAM.
  • the KS PROPERTY IRP precedes the KS WRITE STREAM IRP and provides such format information as a sampling rate, number of channels, etc.
  • the KS WRITE STREAM IRP provides a pointer to the buffer in computer memory which actually contains the PCM wave data or digitized audio data to be processed.
  • the determination as to the major classification of the IRP (Device_Control, Write, Close, etc.) is made by looking at the MAJORFUNCTION member of the IO STACK structure, which is part of the IRP.
  • the subtype (KS_PROPERTY, KS_WRITE_STREAM) is determined by evaluating the IOCODE member of the DeviceControl structure.
  • the DeviceControl structure is a member of the Parameters structure contained in the IO STACK.
  • the component driver 50 finds a KS_Property IRP, it examines two buffers that are associated with the IRP, see Fig. 3. The Parameters. DeviceControl. IoctlType3InputBuffer (A pointer to the buffer is contained in the subject IRP) is first cast as a KSPROPERTY structure. The component driver 50 then examines the members of this structure buffer to determine if this is the IRP of interest. The Set member of KSPROPERTY, a GUID identifying the property set, is verified to conform to STATIC KSPROPSETID Connection. Next, the ID member of KSPROPERTY is verified to conform to KSPROPERTY_CONNECTION_DATAFORMAT.
  • the component driver 50 verifies that the Flags member of KSPROPERTY conforms to KSPROPERTY TYPE SET. Assuming that the first buffer examined conforms to the format and values described above, the component driver 50 examines the second buffer pointed to by the UserBuffer field of the KS PROPERTY IRP.
  • GUID is an abbreviation for Globally Unique Identifier. These identifiers are known to be unique over all space and a very large span of time. The Open Software Foundation (OSF) formulates these identifiers. The industry standard GUIDs are stored in Microsoft header files termed "ksmedia.h” and "ks.h”.
  • the second buffer is cast as a KSDATAFORMAT_WAVEFORMATEX data structure.
  • the KSDATAFORMAT_WAVEFORMATEX structure/buffer consist of two structures: namely (1) KSDATAFORMAT and (2) WAVEFORMATEX.
  • the component driver 50 first looks at the members of the KSDATAFORMAT structure.
  • the MajorFormat member a GUID specifying the general format type, is verified to conform to
  • STATIC JCSDATAFORMAT_SUBTYPE_PCM STATIC JCSDATAFORMAT_SUBTYPE_PCM.
  • Specifier member a GUID that provides additional data format type information, is verified to conform to STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORM. If all of the members verified above are correct, the component driver 50 then extracts information from the WAVEFORMATEX structure.
  • the data to extracted from the WAVEFORMATEX structure are: (1) the number of channels (e.g., 2 for stereo, 1 for mono, etc.) (2) Sampling rate of the PCM data in samples per second, (3) the transfer rate of PCM data in bytes per second, (4) the sampling resolution in bits per sample, (5) the block alignment parameter, (6) a format tag.
  • nChannels nSamplesPerSec, nAvgBytesPerSec, wFormatTag, wBitsPersample, and nBlockAlign.
  • the component driver 50 finds a valid KS_Property IRP, it looks for a KS_WRITE_STREAM IRP referencing valid PCM wave data.
  • the User Buffer field of the IRP points to the buffer of interest. This buffer is first cast as a KSSTREAM HEADER structure, see Fig. 4. The component driver then makes some safety checks. The following fields are examined. The fields are: (1) Data, (2) FrameExtent, (3) DataUsed.
  • the Data field contains a pointer to the PCM sound data that is to be processed by the processing module(s) 51.
  • the component driver 50 now has direct access to buffer addresses for the PCM sound data destined for the sound card 42.
  • the component driver 50 passes the buffer addresses for the PCM sound data to the one or more processing modules 51.
  • the one or more processing modules 51 effect digital processing of the PCM data, i.e., 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; volume control; and/or data memory storage and then replaces the original buffer PCM data with the processed information.
  • the IRP's are then relayed back to the component driver 50 which, in turn, forwards those IRPs to the port class component driver 34.
  • the IRPs are diverted directly to the port class driver 34 by the one or more processing modules 51.
  • the driver 50 of the illustrated embodiment comprises modules: driver_wdm 50a, driver_wdmDevice 50b, KpnpLowerDevice 50c, tds_driverDevice 50d and tds DeviceConfig 50f.
  • This particular embodiment of the driver 50 is incorporated into the program listings which are incorporated herein by reference.
  • the module programs perform the following tasks: driver_wdm
  • the driver_wdm class contains DriverEntry, LoadRegistryParameters and AddDevice functions.
  • the "DriverEntry” function is called by the operating system when the component driver 50 is loaded into memory.
  • the DriverEntry function inititalizes a Device Object with pointers to various dispatch routines. This functionality is provided by the NuMega framework, noted below, and thus is not explicitly coded in a driver entry routine.
  • the DriverEntry routine also obtains the value of "BreakOnEntry" from the Parameters key section for the driver 50 by invoking the "LoadRegistryParameters" function.
  • the AddDevice function is called by the operating system whenever it enumerates a device (i.e., a sound card) related to the driver 50. This function is called when the operating system processes the "UpperFilters" registry entry for the audio device selected.
  • the function first creates a functional device object (FDO).
  • the constructor for the FDO is passed the physical device object (PDO) which represents the driver 38, and binds the newly created FDO to the PDO. This binding causes driver 50 to "see" all IRPs that are directed toward the driver 38.
  • the AddDevice function finishes by checking the status of the FDO and incrementing the unit number if FDO construction is successful.
  • KS_PROPERTY 2 KS WRITE STREAM
  • driver_wdmDevice This module contains the constructors and destructors for the driver_wdmDevice class as well as numerous dispatch routines for handling IRP flow.
  • the driver_wdmDevice class is derived from the KpnPDevice class provided by software sold by CompuWare ® NuMegaTM under the product name "DriverStudio, Version 1.0.”
  • the constructor for this class calls the base class constructor to create the FDO. It then calls "m_lower.initialize” to bind this FDO to the PDO for the audio device of interest. Since the driver 50 acts as a layered driver for the port class component driver 34 below it, it must be capable of handling any IRP's that might be directed to the port class driver 34.
  • Driver_wdmDevice contains a function entry for all possible IRP's. The majority of these IRP's are simply passed on to the driver 34 below this one since they are of no interest. This is accomplished by calling the "ForceReuseOfCurrentStackLocationlnCallDown" method on the IRP followed by calling the "PnpCall” method on the lower driver 34.
  • the IRP MJ DEVICE CONTROL IRP is the IRP of interest.
  • the handler for this type of IRP is "DeviceControl”. The evaulation of this IRP is protected by a "spinlock.” This method evaluates the IRP for the type needed to effect audio data modification processing and calls the necessary routines to perform the data modification processing.
  • the "privatelO" routine will return a complete status if it handed an IRP associated with data modification control functions, such as setting up a new configuration. In the “complete” case the "spinlock” is released and a return is made by invoking "PnPComplete” on the IRP. In all other cases “privatelO” will return an incomplete status. The DeviceControl function then releases the “spinlock” and passes the IRP on to the lower driver 34.
  • KPnpLowerDevice This is a WDM driver class provided by CompuWare ® NuMegaTM under the product name "DriverStudio, Version 1.0" and is used to represent a Physical Device Object (PDO).
  • PDO Physical Device Object
  • KPnpLowerDevice When an instance of KPnpLowerDevice is created or initialized by a component driver, it attaches a device object to the Physical Device Object (PDO). The attachment operation returns another system device object address, which points to the device object which was actually attached. This is referred to as the Top Of Stack device.
  • the Top of Stack device may be different from the PDO.
  • Device attachments form a singly linked list, so at most one component driver may attach to a second.
  • a driver's Functional Device Object normally contains a member variable of the KpnpLower device class that is initialized in the AddDevice function to form the linkage
  • tds_driverDevice is a class containing audio data modification specific functions and members.
  • the primary functions of interest are "privatelO”, "dispatchKSProperty”, dispatchKSWriteStream”, “dispatchTDSSetMode”, “dispatchTDSGetMode”, “dispatchSetFilter”, “ dispatchGetFilter”, “lock” and "release”.
  • the "dispatchKSProperty” and “dispatchKSWriteStream” functions are responsible for detecting and directing the application program supplied sound buffer to the processing module(s) 51.
  • the "dispatchSetMode” and “dispatchTDSGetMode” are routines which allow the application program to set/get audio modification processing parameters. Those parameters are mode, toggle on , toggle length, scale, and verbose level.
  • the "dispatchSetFilter” and “dispatchGetFilter” routines allow the application program to set/get the digital filter coefficients, which are discussed below.
  • the "lock” and “release” routines are used to set and release a "spinlock". IRPs that are intercepted by tds_driverDevice have their associated PCM data passed by reference to processing module(s) 51.
  • This class represents an enhancement configuration. It contains member variables and accessory functions for configuration name, configuration description, toggle parameters, mode, scale factor, and filter tap settings.
  • the one or more processing modules 51 may effect 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control. Activation of the one or more processing modules 51 is effected using the user program 55.
  • This program operates in user mode and preferably includes a graphical user interface.
  • the user interface sends control instructions to the driver 50. Such instructions may specify whether digitized audio data modification should occur and, if so, specify a desired type of digitized audio data modification; and whether digitized audio data should be stored elsewhere in computer memory or on a separate memory device and, if so, if storage should occur before or after audio data modification.
  • An example user interface is:
  • the User interface program "opens" a channel to the driver using a CreateFile() system call. Specifically it may be in the form
  • the processing module 51 comprises a digital filter, such as the one described in copending Patent Application, U.S. Serial No. 09/431 ,371, entitled “Digital Filter,” filed on November 1, 1999 or in PCT Patent Application, Serial No. PCT/US00/21912, entitled “Digital Filter,” filed on August 10, 2000, the disclosures of which are incorporated herein by reference.
  • the digital filter effects sound enhancement of the PCM sound data. More specifically, the enhancement involves increasing the amplitude of the sound at frequencies where the response of the human ear has been found to drop off.
  • Media player 10 supplies input digitized sound samples or audio data (i.e., PCM sound data) at a rate which depends upon the nature of the media involved.
  • PCM sound data i.e., PCM sound data
  • a typical sampling frequency is 44,100 Hz.
  • Some audio CD's are now produced using other sampling rates.
  • Digital video disks are produced at sampling rates of 64,000 Hz.
  • the telephone industry samples at a rate of 8,000 Hz.
  • the invention described herein is applicable to any sampling rate.
  • the processing module 51 outputs processed digitized audio data at a frequency equal to the rate at which input digitized audio data is supplied by media player 10.
  • the filter comprises an a ⁇ ay of storage locations within a random access memory.
  • a series of N time response values, A 0 through A N _ ⁇ , are tabulated in a written program for downloading into random access memory storage locations. These response values, hereinafter referred to as time coefficients, are established by a technique described below.
  • Each digitized sound sample (comprising PCM sound data) is designated X(n) at the time of sampling and is stored temporarily in a designated random access memory location.
  • the sound samples are later shifted successively through a series of N-l other storage locations for generation of time shifted samples X(n-l) through X(n-[N-1]).
  • Storage locations may be thought of as being equivalent to stages of a shift register.
  • the processing module 51 may not have sufficient memory for this purpose, and therefore the processing module 51 may cause the sound samples to be shifted through a designated portion of the random access memory.
  • the processing module 51 multiplies each A n by a corresponding X(n). The A n X(n) products then are summed. It will be appreciated that the processing module 51 performs N shift operations, N multiplications and N summations, or the equivalent thereof, for each sound sample supplied by the media player 10. IRPs pointing to the calculated sums generated at a rate of 44,100 HZ are supplied to the port class driver 34.
  • the driver 34 provides streams of data having pointers to the processed data to an audio adapter component driver 38, comprising a functional driver, which interfaces directly with the sound card 42.
  • the driver 38 converts the streams of data from the driver 34 into a signal having a format acceptable to the sound card 42.
  • the sound card then retrieves the modified and/or stored digitized audio data from memory and converts the data into an analog signal for driving one or more speakers (not shown).
  • the processing module 51 convolves N time response coefficients A 0 - A N _ ⁇ against the entire series of sound samples. Mathematically speaking, the module 51 repeatedly solves the following equation:
  • X(n) is the most recent sample received
  • X(n-l) through X(n-[N-1]) co ⁇ espond to N-l samples received prior to sample X(n);
  • n is the running index of the time coefficients being computed;
  • N is equal to the number of terms in the equation to the right side of the equal sign; and wherein calculated values of Y define the driving signal.
  • the value of N is at least 5, preferably 7, more preferably 9, and most preferably 11. It is also contemplated that the value of N may comprise an odd integer greater than 11. It is further contemplated that the value of N may comprise an even integer greater than or equal to 6, such as 8, 10 or 12. However, it is preferred that N comprise an odd integer.
  • the convolution process is carried out in real time using appropriate time response coefficients. These time response coefficients are calculated off-line and are mapped to a like number of frequency coefficients established as discussed below. That procedure generates N frequency coefficients H O -H N - I , each having a frequency and an amplitude, which are mapped into N time response coefficients A 0 -A N _ ⁇ by use of the discrete inverse Fourier transformation:
  • N may have a value of 19, which would call for 19 time response coefficients, all derived from a set of 19 frequency coefficients, regularly spaced at intervals F s in accordance with the time-frequency uncertainty principle, a relationship stated in the following equation:
  • the A n and the H k are all complex numbers, having a magnitude and a phase.
  • the H have a phase angle of 0, and
  • the A n have a phase angle of either 0 or II. Values of II (i.e., 3.14159) are accommodated in the filter design by assigning a negative value to the amplitude of the time coefficient.
  • the 19 frequency domain points define a frequency response curve 58 extending from 0 Hz to 41,778 Hz as illustrated in Fig. 5. They include a base point 60, principal points 61 - 69 and minor points 71 - 79. The specified numeric amplitudes of the various frequency domain points 60-69 and 71-79 do not have units. The specified amplitudes of these points are all relative to one another.
  • Frequency domain points 60 - 69 and 71 - 79 are set at regular intervals of 2321 Hz with mirror points 71 - 79 having amplitudes equal to principal points 61 - 69 respectively. It will be observed that the principal points and the mirror points are mi ⁇ ored about a mid frequency of 22,050 Hz, half the 44,100 Hz sampling frequency. This produces a periodic response at the sampling frequency. That periodicity effectively extends the frequency response curve 58 to 44,100 Hz and sets a virtual point (not illustrated) at 44,100 Hz having a magnitude equal to that of base point 60. This virtual frequency domain point is mapped to a virtual time response point (also not illustrated) equal to, and synchronous with, A 0 . Since 19 is an odd number there is no frequency domain point at the mi ⁇ oring mid frequency.
  • the entire information content of the original audio signal can be processed by low pass filtering at 22,050 Hz, followed by sampling and recording at 44,100 Hz. CDs and other digital recordings are usually prepared in this fashion. That gives two points per cycle of the highest frequency present.
  • Frequency response points were selected in the range from 20 Hz to 20,000 Hz having amplitudes bearing a roughly inverse relationship to the sensitivity of the human ear over that same range. This flattens out the perceived response of the filter to the regenerated sound.
  • the frequency response was relatively decreased at points 68 and 62 to compensate for regions of increased ear sensitivity near 4642 Hz and 18,568 Hz respectively, and it was relatively increased at point 63 to compensate for reduced ear sensitivity in the region around 16,247 Hz.
  • frequency response coefficients 62-69 having frequencies between a reference frequency of 4642 Hz and a high end frequency of 20,000 Hz increase in amplitude as per increasing frequencies from the reference frequency up to a significant amplitude peak at a peak high frequency of 16,247 Hz and decrease in amplitude as per increasing frequencies down to a significant amplitude trough at a trough high frequency of 18,568 Hz.
  • the amplification of the frequency response coefficient at the peak high frequency is about 2.1 times the amplification of the frequency response coefficient at the reference frequency.
  • the frequency response coefficient 69 which is positioned between the reference frequency and a low end frequency of 20 Hz has an amplitude which is slightly greater than that of the frequency response coefficient 68 located at the reference frequency.
  • the required filter response is undefined outside the range of human hearing. That includes the region below about 20 Hz, a free band region between 20,000 Hz and 24,100 Hz, and an end region between 24,100 Hz and 44,100 Hz.
  • the periodic nature of the filtering process requires some definition for all frequencies between zero and the sampling frequency. Therefore, frequency response points or taps were selected at amplitudes which would tend to lend smoothness to the response function in the undefined regions.
  • point 60 having a frequency of 0 Hz was selected so as to have an amplitude of 2.5, which is equal to the amplitude for point 69, which has a frequency of 2321 Hz.
  • the amplitudes of points 61 and 71 which fall within the free band region, were selected so as to achieve a generally constant oscillation frequency across a center band extending from about 1 1,605 Hz to about 32,494 Hz, i.e., the portions of the curve defined between points 65,62; 62,72; and 72,75 have approximately the same width.
  • Points 72-79 are mirror images of points 62-69.
  • a frequency response curve according to the present invention can be affected by manipulating various frequency response points or taps. Also included are some of the characteristics that can occur when manipulating specific taps located in each region of the frequency response curve noted.
  • manipulation of one or more of the taps at frequencies lower than the reference frequency can affect the low frequency response or base region of the frequency response curve (e.g., about 0 Hz to about 2004 Hz).
  • the base of the resulting sound can be made to sound more boomy and thick (i.e., the base sound is over emphasized and it loses some of its detail and clarity).
  • Raising the amplitude of one or more of the base region taps also seems to affect the high frequency response or treble region (above the reference frequency) so that the treble portion sounds thicker and not quite as brilliant (i.e., it loses detail and clarity). That is, affecting the base region in this manner can suppress the treble region in a manner similar to the high frequency masking effect caused by using noise suppression technology.
  • the amplitude of one or more of the taps in the base region are lowered, the base of the resulting sound can be made to sound much thinner, which can result in the treble region sounding brighter or brittle (i.e., more apparent or over emphasized), depending upon how the taps are adjusted.
  • manipulation of one or more of the taps within the range of the reference frequency can affect the reference frequency response of
  • SUBSTITUTE SHEET (FIULE26) the frequency response curve. Raising the amplitude of one or more of the taps in this region can produce sound appearing to have more air and greater separation between the sound sources, e.g., instruments (i.e., different sound sources are more easily distinguished). This greater separation can make the overall sound appear more like it was live and not recorded. Lowering the amplitude of one or more of the taps in this region can make the resulting signal sound dull and lifeless.
  • Manipulation of one or more of the taps at frequencies higher than the reference frequency, but within the frequency band "of interest" can affect the high frequency response or treble region of the frequency response curve (e.g., about 2004 Hz to about 20045 Hz).
  • the amplitude of the taps in the treble region By raising the amplitude of the taps in the treble region, more brilliance can be added to the resulting sound. In this way, a greater amount of detail can be offered, especially in audio application like, for example, a movie soundtrack.
  • the resulting sound can be made to sound flat and muted or muddy.
  • Manipulation of one or more of the taps out beyond the frequency band "of interest" can affect the dwell time of the signal, especially when the frequencies of the taps are at the edge or above the band of normal human hearing (e.g., about 20 Hz to about 20,000 Hz).
  • the center region of the frequency response curve of Fig. 6 contains taps 101 and 1 11. By raising the amplitude of the taps in this region, the dwell time can be reduced and the resulting enhancement can sound more like a mere amplitude shift, rather than overall harmonic enhancement. Increasing the amplitude of these taps can also increase the rate of clipping or overdriving of a signal.
  • the dwell time can be increased and the overall enhancement and stability of the audio signal improved, with a reduction in the risk of the signal being clipped.
  • the dwell time can be dramatically affected by changes in the amplitude of the center region taps, regardless of the number of the center region taps.
  • the rate of transition between the frequency band of interest and the center region can be controlled by adjusting the amplitude of one or more of the center region taps.
  • Dwell time is defined here as the time interval over which the impulse response of the filter has significant amplitude. For a filter with a fixed number of taps (i.e., a finite impulse response filter), the actual time duration of the impulse response cannot be modified.
  • a digital filter in accordance with a second embodiment of the present invention was created as follows. A set of first frequency response coefficients separated at uniformly spaced frequency intervals were selected. The first frequency response coefficients had zero phase angles. In the illustrated embodiment, the frequency response coefficients set out in Table 1 above were used as the first frequency response coefficients. By the use of discrete inverse Fourier transformation, the plurality of first frequency response coefficients were mapped into co ⁇ esponding first time response coefficients, which are also set out in Table 1.
  • the number of time coefficients should be minimized. So as to achieve that end, a pair of the first time response coefficients having equal magnitudes and being positioned adjacent to one another in Table 1 were removed. The discarded pair of time coefficients each had a magnitude of .0714. The remaining time coefficients defined second time coefficients.
  • the one first time response coefficient not having a zero frequency and not having a mate of equal magnitude is also discarded.
  • a second frequency response curve was then generated using the second frequency response coefficients.
  • the first and second frequency response curves were compared to determine if the second frequency response curve was substantially different from the first frequency response curve. If not, then another pair of time response coefficients, i.e., a pair of the second time response coefficients, having equal magnitudes and being positioned adjacent to one another were removed. This process of removing and assessing continued until a pair of discarded time response coefficients caused a significant change in the perceived enhancement caused by the frequency response of the digital filter.
  • a significant change in the perceived enhancement caused by the frequency response of the digital filter co ⁇ esponds to a substantial difference between an initial and a subsequent frequency response curve. When a significant change occurred, this last pair of discarded time response coefficients were added back to the time response coefficients. These remaining time response coefficients defined final time response coefficients.
  • the time response coefficients comprise integer numbers.
  • they were multiplied by an integer conversion number sufficiently large to permit any remaining fractional portion to be discarded without losing substantial final time response coefficient accuracy.
  • a substantial loss in final time response coefficient accuracy occurs when the resulting frequency response of the digital filter produces an enhancement perceptibly different from the desired enhancement.
  • the integer conversion number be selected as a power of two so that shifting may be used in place of division when subsequent renormalization occurs for calculated values of Y.
  • the final time coefficients (set out in brackets in Table 2 below) were multiplied by 2 1 (8192). Any remaining fractional portions of the converted time coefficients were discarded.
  • the integer final time coefficients are set out in Table 2 below. They may be tabulated in a written program for downloading into random access memory storage locations. This filter has 11 time response coefficients.
  • the microprocessor must renormalize those values. This involves dividing each value of Y by the integer conversion number. Alternatively, if the integer conversion number is selected as a power of two, the microprocessor can effect renormalization by right shifting an appropriate number of bit positions, 13 in the illustrated embodiment.
  • Curve 80 has a base point 100. It also has principal points 101 - 105, which are mi ⁇ ored by points 111- 115.
  • frequency response coefficients 102-105 having frequencies between a reference frequency of 4009 Hz and a high end frequency of 20,000 Hz increase in amplitude as per increasing frequencies from the reference frequency toward the high end.
  • a filter in accordance with a third embodiment of the present invention was created using the same design procedures undertaken to construct the filter of the second embodiment.
  • SUBSTITUTE SHEET (RUIE26) filter's final frequency and time response coefficients are set out in Table 3 below.
  • the final time response coefficients both before and after being multiplied by an integer conversion number equal to 8192 are set out in Table 3.
  • a frequency response curve 90 plotted using the final frequency response coefficients is shown in Fig. 7.
  • the curve has a base point 120, principal points 121-125 and minor points 131-135.
  • frequency response coefficients 122-125 having frequencies between a reference frequency of 4009 Hz and a high end frequency of 20,000 Hz increase in amplitude as per increasing frequencies from the reference frequency toward the high end.
  • the procedure may be extended to other values of N.
  • Filters constructed in accordance with the present invention may have a reference frequency which falls within the range of from about 501 Hz to about 8018 Hz; a peak high frequency which falls within the range of from about 1002 Hz to about 20045 Hz; a trough high frequency which can fall at any frequency after the peak high frequency; and a peak low frequency which falls within the range of from about 0 Hz to about 2004 Hz.
  • the amplification of the frequency response coefficient at the peak high frequency may be about 1.3 times to about 6.0 times the amplification of the frequency response coefficient at the reference frequency.
  • the amplification of the frequency response coefficient at the peak low frequency may be about 1.1 times to about 3.0 times the amplification of the frequency response coefficient at the reference frequency.
  • two or more of the filters described herein may be stored in a single processing module 51 or separately in two or more processing modules 51. Hence, a user may select a desired one of a plurality of filters for use in enhancing digitized audio data via the user program 55.
  • designer software may be used in conjunction with the driver 50 and the processing module(s) 51 so as to permit a designer to develop a new filter for inco ⁇ oration into the driver 50, an existing a processing module 51 or a new processing module 51.
  • the software comprises a graphical interface having a set of controls representing frequency sample points in the audio frequency range (i.e., 20 Hz - 20 kHz). The software allows the designer to set the frequency sample points as desired to obtain a given frequency compensation or response curve.
  • the software calculates the temporal sample points that correspond to the time coefficients required for the real-time linear filtering of digitized audio data and places those temporal coefficients into either the driver 50 or a processing module 51 by communicating with the driver 50 or the processing module 51 through IOCTL calls.
  • the software further functions to give a designer-defined name to the new filter and communicate same to the user program 55.
  • the new filter then becomes available to a user via the user program 55.

Abstract

A device driver for a computer operating system. The operating system is adapted to receive digitized audio data from a media source. The device driver comprises an intercepting component driver which is capable of initiating at least one of sound modification processing of the digitized data and storage of the digitized data.

Description

AUDIO DEVICE DRIVER
Authorization under 37 CFR Sec. 1.71(e)
A portion of the disclosure of this patent document contains material which is subject to
(copyright) protection. The (copyright) owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark
Office patent files or records, but otherwise reserves all (copyright) rights whatsoever.
Cross-Reference to Related Application This application claims the priority of Provisional Application U.S. Serial No. 60/174,397, filed January 5, 2000, the disclosure of which is incorporated herein by reference.
Reference to Computer Program Listing Appendix Being submitted concurrently with the filing of this application are two compact disks, each containing the following computer program listings; all listings set out below and contained on each disk are incorporated herein by reference:
TDS Kernel Mode Code Listings Windows 2000
SUBSTTTUTE SHEET (RULE26)
Figure imgf000003_0001
Figure imgf000004_0001
Ndme-g..-. aSizej'J_ype ci] khid cpp 7KB C++ Source file 1 25/001:50 AM [hj k id.h 8KB C Header file 1/25/001.50 AM ci] k idaux.cpp 8KB C++ Source file 1/25/001:50 AM hi kicount.h 2KB C Header file 1/25/00150 AM hj kimgsect 3KB C Header file 1/25/001:50 AM ιθtj kintrupt.cpp 8KB C++ Source file 1/25/001:50 AM [h"| kmtrupt.h 8KB C Header file 1/25/001:50 AM [h"j kiocpatm.h 4KB C Header file 1/25/00 V50 AM |ct| kirp cpp 6KB C++ Source file 1/25/001:50 AM P] kirp. 18KB C Header file 1/25/001:50 AM Q klist cpp 18KB C++ Source file 1/25/001:50 AM [El klist h 21KB C Header file 1/25/001.50 AM [cfj klower cpp 10KB C++ Source file 1/25/00150 AM I i klower.h 10KB C Header file 1/25/00150 AM ft] kmemory. 7KB C Header file 1/25/00150 AM £g kmutex cpp 5KB C++ Source file 1/25/00150 AM jhl kmutex h 4KB C Header file 1/25/001:50 AM (et] kpcicfg.cpp 10KB C++ Source file 1/25/001.50 AM _h] kpcicfg.h 9KB C Header file 1/25/00 V50 AM cj] kpnpdev cpp G8KB C++ Source file 1/25/001.50 AM [hj kpnpdev h 18KB C Header file 1/25/00150 AM c kpnplow.cpp 5KB C++ Source file 1/25/001:50 AM h kpnplow. 7KB C Header file 1/25/001:50 AM h] kpownot.h 3KB C Header file 1/25/00150 AM Q kquery.cpp 10KB C++ Source file 1/25/001:50 AM hi kquery.h 5KB C Header file 1/25/001-50 AM (C kregkey cpp 23KB C++ Source file 1/25/001:50 AM i kregkey h 9KB C Header file 1/25/001:50 AM jci) kresreq cpp 31KB C++ Source file 1/25/001:50 AM 0 kresreq. 8KB C Header file 1/25/001:50 AM 0 ks5920 h 17KB C Header file 1/25/001:50 AM
Figure imgf000006_0001
igjfgraffi'gif^igfflf^
Figure imgf000007_0001
Figure imgf000008_0001
End Windows 2000'
Figure imgf000009_0001
Figure imgf000010_0001
(Si^igifgiiif f i ^
Figure imgf000011_0001
Figure imgf000012_0001
Figure imgf000013_0001
Figure imgf000014_0001
|ftj vxdntlib h 1KB C Header file 1/25/00150AM |h| wdm 1 KB C Header file 1/25/00150AM
Field of the Invention This application relates to an audio device driver, in particular, to an audio device driver that includes a component dπver capable of intercepting a signal pointing to stored digitized audio information such that the digitized information is subjected to sound modification processing and/or stored in memory prior to being received by a sound playback system and, more particularly to such a driver that operates in kernel mode.
-13-
SUBSTITUTE SHEET (RULE26J Background of the Invention Computer operating systems manage the operation of multiple application programs concurrently. Such programs typically write (issue) digitally represented sound or audio data to a sound playback system. "Writing" digitized audio data to a sound playback system involves the application program storing the digitized data in computer memory that it controls as well as generating an I/O request, typically a WaveOut signal, to the sound playback system, wherein the request includes pointers to the stored digitized audio data. The operating system retrieves the digitized audio data from the initial memory locations and stores the data in new memory locations it controls and changes the pointers in the I/O request to reflect the new memory locations. A sound playback system is defined herein as a sound card and one or more speakers. The computer operating system receives the I/O request originating from the application program and outputs a modified request in a format acceptable to the sound card, which request may point to the stored digitized audio information. The sound card then retrieves the digitized audio information from memory and converts the information into an analog signal, which is used to drive the one or more speakers. Digitized audio information may be read or retrieved from one or more of a plurality of audio sources, including compact disks (CDs), digital video disk (DVD) players, computer games, files (e.g., MP3 files) downloaded over the Internet, and streaming audio received over the Internet. Special considerations attach to the use of each of these audio sources.
Compact Disk Playback
Playback of music recorded on a compact disk requires a compact disk player and an application software program for causing the compact disk player to scan the compact disk and read digital information stored thereon. Digital information representing audio infonnation is then written by the application program to the sound playback system.
DVD Playback
Requires a DVD player and an application software program for causing the DVD player to read digital information representing both audio and video information. Audio information is separated from the video data and handled in a manner similar to compact disk playback.
Computer Game Playback
Playback of sounds related to computer games requires that the user execute game application software. At various times determined by the game application software, it writes digital infoπnation representing sounds to the sound playback system.
Musical Files Retrieved from the Internet
Once music files have been retrieved from the Internet, they may remain in computer memory, stored on magnetic disks or stored onto compact disks. Playback of files retrieved from the
Internet requires a special player that can locate the files from computer memory and/or magnetic disk and/or compact disk. The special player then reads the digital information representing sound information from the stored location and writes it to a sound playback system.
Streaming Audio Retrieved from the Internet
Playback of streaming audio information retrieved from the Internet requires a special player. The special player must retrieve real-time audio streams of digital information from the Internet. The special player must then write these streams of digital data representing audio information to a sound playback system.
Each distinct sound application program (e.g., CD or DVD player program, computer game program, retrieved musical file program, retrieved streaming audio program) has the capability to effect the reading or retrieving of digital information from an appropriate source (e.g., CD or DVD player, etc.) and write that digital information to a sound playback system. The application programs typically operate in "user mode." A computer typically has several modes of operation relative to the notion of "privilege." Privilege has to do with the degree of access that a program has to various functional capabilities and resources contained within a computer. "User Mode" is typically a designated mode wherein the current executing program has the most limited access to computer resources and functions. Typical user application programs operate in "user mode." In contrast, "Kernel Mode" is typically a privileged mode wherein the current executing program has complete and unlimited access to all computer functional capabilities and resources. Only operating system components have access to kernel mode.
In a typical modern computer, because more than one user application program may be executing concurrently, user programs are not permitted direct access to shared resources, including but not limited to sound playback systems. Shared resources are resources typically shared across a multiplicity of application programs. Typical shared resources include but are not limited to: (1) monitor, (2) disk drives, (3) sound cards, (4) printers. Therefore, when an application program "writes" to a sound playback system, the operating system intervenes, intercepting the signal pointing to the stored digital information representing the sound to be played. It also transfers the digitized audio data to new memory locations and modifies the signal so as to point to the new memory locations containing the digitized audio data. The operating system then transmits the signal to the sound playback system on behalf of the application program. This intervention prevents sounds emanating from various application programs from becoming intermixed and therefore confused during playback. This intervention also permits various application programs to use common commands with which to "write" digital sound information to the wide variety of available sound playback systems.
The quality of the sound produced by each of the above mentioned audio application programs can be improved by applying sound modification processing. In each case, a listener's sound experience can be enhanced or otherwise altered by appropriate digital sound modification processing (e.g., equalization, volume control, 3-dimensional processing, reverberation, etc.). The motivation for such modifications may vary from application to application, and the particular modifications may vary as well. However, the requirement and desirability of modifications is common to all such applications.
Previously, some sound cards have been provided with equalization hardware so as to effect a type of sound modification. However, the sophistication level of the sound processing hardware provided on sound cards is typically kept low. This is because sound processing hardware capable of effecting higher levels of equalization is costly and consumes valuable sound card real estate. Some application software programs are provided with sound
-16- modification processing capabilities. However, the manner of sound modification processing and its effectiveness varies from software package to software package. Hence, consistent modification of the digital audio information written by a plurality of application software packages typically cannot be achieved. Accordingly, there is a need for a system which is capable of capturing more, and up to all, digital audio data written to a sound playback system by a number of application programs such that the data can be modified in the same or a consistent manner prior to the data reaching the sound playback system.
Summary of Invention
In accordance with the present invention, an audio device driver is provided including a component driver capable of intercepting a signal pointing to digitized audio information or data, wherein both the signal and the audio information originate at an application program, such that the stored digitized audio information can be modified and/or stored elsewhere before being provided to a sound playback system. Preferably, the digitized audio information or data being pointed to is stored. The intercepting component driver may include software for modifying the stored digitized data via 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control and/or software for storing the digitized data elsewhere. Alternatively, the intercepting component driver may transfer the signal to a separate software module which is capable of modifying the stored digitized data via 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control, and/or software for storing the digitized audio data elsewhere. After the digitized audio data is modified and/or stored, the signal pointing to the audio data is received by a functional component driver, which provides the signal to a sound card in a format acceptable to the sound card. The sound card then retrieves the audio data from memory and converts the data into an analog signal, which is used to drive one or more speakers.
The intercepting component driver comprises an executable program stored in computer memory. The executable program is in a logical data flow path between one or more application programs and one or more sound playback systems, i.e., the intercepting component driver could be incorporated into two or more device drivers associated with a like number of sound cards. The intercepting driver executes in kernel mode to attain access to shared resources, e.g., a sound playback system not directly accessible to application software programs. As such, the intercepting driver is a natural operating system extension since it operates in a kernel, privileged mode and therefore has access to any and all computer functions and resources, including the sound playback system.
Processing of digitized audio information or data is dependent upon several parameters of the data, subject to the constraint that sufficient processing time is available. The parameters of primary interest include: (1) Sampling rate, (2) Bits per sample, (3) Number of channels, (4) Code format.
Sampling Rate: The sampling rate indicates the number of bits recorded for each sample of the digital information. For example, a musical Compact Disk usually contains sampled data at 44,100 samples per second. Other sampling rates typically available are: (1) 22,050 samples per second, (2) 11,025 samples per second, (3) 48,000 sample per second. Many other sampling rates exist. Processing of the digital information is dependent upon the sampling rate. The intercepting component driver deduces the number of samples per second and processes the information in accordance with the number of samples per second contain within the digitized information.
Bits per sample: The bits per sample indicate the accuracy of the samples and the dynamic range available. For example, compact disk music is sampled at a resolution of 16 bits per sample. Furthermore, the compact disk music represents digital sound information in a two's complement — +32,767 to -32,678 — so that there is a total range of 65,535 or about 96 dB of range. Processing of the digital sound information is dependent upon the number of bits per sample. Therefore, the intercepting component driver must deduce the number of bits per sample in the represented digital information and process the information accordingly. Some data is recorded at 8 bits per sample. The intercepting driver must extract and process the eight bits per sample data differently than the sixteen bits per sample noted above.
Number of Channels: Each digital sound record contains the number of channels. The data could be monophonic (one channel of digital sound information), stereophonic (two channels of information), quadraphonic (four channels of information). The information may be in any number of channels. Typically, the digital sound data is
-18-
SUBSTITUTE SHEET (FM.E26) located in a memory buffer in sequential locations. Data from the various channels is typically interleaved in successive locations in the sound buffer. Since each channel of information is processed independently, the intercepting component driver must deduce the number of channels represented by the digital sound information. Each distinct channel is then processed independently.
Code Format: The digital sound information may be recorded in several code formats. For example, as discussed above, compact disk music information is typically recorded in two's complement format. This means that, in the case of compact disk music, the positive data is represented as pure binary numbers (0 through 32,767) and negative numbers are represented as two's complement numbers (-32,768 through -1). This so-called 16-bit pulse code modulation (PCM) format is a usual but not necessarily invariant format for 16-bit information. In some cases, the code format differs from the 16 bit two's complement PCM format discussed above. Some computer sounds are recorded in 8 bit per sample excess 128 format. In this case the data is represented as 8 bits of PCM code for each digital data sample. The excess 128 format means that the data is stored as standard binary information except that the digital code for 128ι0 represents zero. All PCM data above 128 (129 to 255) represents positive data and all PCM data below 128 (0 to 127) represents negative data. The processing of sound data is dependent upon the exact code in which the data is represented. Therefore, the intercepting component driver must deduce the particular code format in which the data is represented prior to processing the sound data.
Once the intercepting component driver has deduced all of the parametric information, set out above, the driver may initiate or invoke processing software which may be incorporated into the intercepting component driver or comprise a separate software module. The intercepting driver software or the software module executes a digital software modification or processing function, such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; volume control; and/or data memory storage. The intercepting component driver or separate processing module stores the modified and/or stored information in a buffer and subsequently passes a signal pointing to the processed data to the next component driver in the device driver.
The intercepting driver software or the software module may comprise a digital filter for effecting sound enhancement processing. The digital filter enhances the harmonic quality of digitized audio data, in particular audio data having a complex wave form (i.e., multiple frequency components such as, for example, music, singing, speech, animal sounds, naturally occurring sounds, equipment noises, and the like), such that the digitized audio data enhanced via the filter exhibits an improved harmonic quality compared to that of the input digitized audio data. It has been found that a similar harmonic enhancement can be obtained using the circuits disclosed in U.S. Patent No. 5,361 ,306; U.S. Patent Application Serial No. 08/472,876, having a filing date of June 7, 1995 and entitled APPARATUS AND METHOD OF ENHANCING ELECTRONIC AUDIO SIGNALS; U.S. Patent Application Serial No. 08/700,728, having a filing date of August 13, 1996 and entitled APPARATUS AND METHODS FOR THE HARMONIC ENHANCEMENT OF ELECTRONIC AUDIO SIGNALS;U.S. Patent Application Serial No. 08/909,807, having a filing date of August 12, 1997 and entitled APPARATUS AND METHODS FOR THE HARMONIC ENHANCEMENT OF ELECTRONIC AUDIO SIGNALS; U.S. Patent Application Serial No. 08/989,373, having a filing date of December 12, 1997 and entitled APPARATUS AND METHODS FOR ENHANCING ELECTRONIC AUDIO SIGNALS; U.S. Patent Application Serial No. 09/431,371, having a filing date of November 1, 1999 and entitled DIGITAL FILTER; and PCT Patent Application, Serial No. PCT/US00/33197, entitled "Apparatus and Methods for Enhancing Electronic Audio Signals," filed on December 1, 2000, the disclosures of which are incorporated herein by reference.
In accordance with a first aspect of the present invention, a device driver is provided forming part of or an extension of an operating system. The operating system is adapted to receive digitized audio data from an application program. The device driver comprises: an intercepting component driver which is capable of initiating at least one of sound modification processing of the digitized audio data and storage of the digitized audio data.
In one embodiment, the component driver effects sound modification processing of the digitized audio data. The sound modification processing may comprise at least one of 3- dimensional processing; reverberation processing; equalization processing; sound enhancement
-20-
SUBSTfTUTE SHEET (RULE26) processing; and volume control.
The sound modification processing may comprise sound enhancement processing using a digital filter. The digital filter may comprise a series of digitized time coefficients stored in a memory. The time coefficients are mapped to a like number of frequency coefficients. The frequency coefficients are spaced at frequency intervals having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter.
The time coefficients are odd in number, and the number of the time coefficients may be equal to or greater than 5. It is also contemplated that the time coefficients may be even in number.
The time coefficients may be defined by inverse discrete Fourier transforms of the frequency coefficients.
A portion of the frequency coefficients having frequencies within a free band may be selected so as to achieve a generally constant oscillation frequency across a center band which is broader than the free band.
The frequency coefficients may be spaced at equal frequency intervals.
The time coefficients may be integer numbers.
In addition to effecting sound modification processing, the component driver may further initiate storage of the digitized audio data on one of a compact disk, a digital video disk, a floppy disk and computer memory.
Alternatively, the component driver may initiate storage of the digitized audio data on one of a compact disk, a digital video disk, a floppy disk and computer memory without effecting sound modification processing of the digitized audio data.
The intercepting component driver is capable of initiating the at least one of sound modification processing of the digitized audio data and storage of the digitized audio data in kernel mode.
In accordance with a second aspect of the present invention, a device driver is provided forming part or an extension of an operating system. The operating system is adapted to receive digitized audio data from an application program. The device driver comprises: at least two layered component drivers including a functional component driver which manages the operation of a sound card device and an intercepting component driver positioned above the functional driver and being capable of initiating at least one of sound modification processing of the digitized audio data and storage of the digitized audio data.
The digitized audio data may be stored in a first portion of computer memory and the intercepting component driver may initiate the at least one of sound modification processing and storage by intercepting a signal pointing to the digitized audio data stored in the first portion of computer memory and output by the application program, retrieving the digitized data from the first portion of memory and effecting the at least one of sound modification processing of the digitized data and storage of the digitized data.
In one embodiment, the intercepting component driver effects sound modification processing of the digitized data. The component driver may effect the sound modification of the digitized audio data via at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
The intercepting component driver may effect sound enhancement processing of the digitized audio data using a digital filter. The digital filter comprising a series of digitized time coefficients stored in a memory. The time coefficients are mapped to a like number of frequency coefficients. The frequency coefficients are spaced at frequency intervals having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter. It is also contemplated that non-linear spaced phase angles may be employed.
In addition to effecting sound modification processing, the intercepting component driver may further cause the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
In another embodiment, the intercepting component driver may cause the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory without effecting sound modification processing.
In accordance with a further embodiment of the present invention, the digitized audio data is stored in a first portion of computer memory and the intercepting component driver initiates the at least one of sound modification processing and storage by intercepting a signal pointing to the digitized audio data stored in computer memory and output by the application
-22-
UBSTITUTE SHEET (RULE26) program, transferring the signal to a separate software module such that the module may retrieve the digitized data from the first portion of memory and effect the at least one of sound modification processing of the digitized data and storage of the digitized data.
In one embodiment, the software module effects sound modification processing of the digitized data. The software module may effect the sound modification of the digitized audio data via at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
The software module may effect sound enhancement processing of the digitized audio data using a digital filter. The digital filter comprises a series of digitized time coefficients stored in a memory. The time coefficients are mapped to a like number of frequency coefficients. The frequency coefficients are spaced at frequency intervals having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter. It is also contemplated that non-linear spaced phase angles may be employed.
The software module may further cause the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
In another embodiment, the software module causes the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory without effecting sound modification processing.
The intercepting component driver is capable of initiating the at least one of sound modification processing of the digitized audio data and storage of the digitized audio data in kernel mode.
In accordance with a third aspect of the present invention, a computer-implemented method is provided for creating processed sound from digitized audio data. The process comprises the steps of: storing the digitized audio data in memory; creating a kernel mode streaming signal pointing to the stored audio data; using the kernel mode streaming signal for kernel mode enhancement of the data, the kernel mode enhancement comprising real time inverse convolution of the audio data and a series of time coefficients derived from frequency coefficients inversely related to the response of the human ear across a range of frequencies; and using the audio data, enhanced as aforesaid, for kernel mode generation of processed sound. The enhancement of the audio data may be performed by an intercepting component driver in a device driver or a separate software module.
In accordance with a fourth aspect of the present invention, a method is provided for processing sound comprising the steps of: 1. generating a set of frequency coefficients inversely related to the responsiveness of the human ear, 2. converting the frequency coefficients to time coefficients, 3. sampling the sound to generate an endless series of raw audio data, 4. storing the raw audio data, 5. generating a series of addresses indicating the locations of the stored data, 6. reading the raw audio data from memory, 7. generating a series of processed audio data by convolving the raw audio samples against the time coefficients, and 8. using the processed audio data to drive a sound generator, such as one or more speakers.
The steps 4 through 7 may be performed by a digital computer operating in kernel mode.
Brief Description of the Drawings
Fig. 1 is a block diagram illustrating components of a conventional computer operating system having layered device drivers;
Fig. 1A illustrates a device control block and call-down table of a prior art device driver;
Fig. 2 illustrates a device driver constructed in accordance with the present invention along with an API and an input output system;
Fig. 3 illustrates K-mode structures for KS-Property IRP evaluation;
Fig. 4 illustrates K-mode structures for KS_Write_Stream IRP evaluation;
Figs. 5-7 are illustrations of frequency response curves for a digital filter configured in accordance with first, second and third embodiments, respectively, of the present invention; and
Fig. 8 is a block diagram of an intercepting component driver constructed in accordance with the present invention.
Description of the Preferred Embodiments The present invention contemplates both methods and systems for dynamically extending an operating system, which uses one or more layered device drivers, each comprising a plurality of data managers or component drivers, in fulfilling I/O requests issued by an application program or software, such as an audio application program. More specifically, the present
-24-
UBSTrrUTE SHEET (RULE26) invention contemplates interrupting the normal sequence of processing in the operating system such that an audio I/O request, which includes pointers to stored digitally represented sound information issued by an application program to a sound playback system, can be intercepted by a component driver. The component driver then initiates sound modification processing of the digitized audio data and/or storage of the digitized data elsewhere in computer memory or on a separate memory device before the data is provided to a functional or lower-most component driver. The intercepting component driver may include software for effecting sound modification processing such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control. Alternatively, the intercepting component driver may transfer the I/O request to a separate software module having the capability to effect sound modification processing such as 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control. After the digitized audio information is modified and/or stored, the request pointing to the audio information is received by a functional component driver, which provides the request to a sound card in a format acceptable to the sound card. The sound card then retrieves the audio data from memory and converts the data into an analog signal, which is used to drive one or more speakers.
Fig. 1 is a block diagram illustrating components of a conventional operating system 201 having device drivers configured during computer start-up or restart. The system 201, once configured, functions as follows. An application program 200 formulates an input/output (I/O) request and passes that request to the operating system 201 through an application program interface 202. The application program interface 202 provides the application program 200 with access to the operating system 201. When the application program interface 202 receives the I/O request, it invokes an input-output system (IOS) 203, passing it the request. The input-output system 203 determines which of a plurality of device drivers, only device drivers 204 and 205 are illustrated, is identified in the request. Device driver 204 comprises a plurality of component drivers 210, 211, ***, N Driver, while device driver 205 comprises a plurality of component drivers 220, 221, ***, N Driver. Component drivers 210 and 220 comprise upper-most drivers, while component drivers N Drivers, also referred to herein as functional drivers, are the lowermost drivers.
-25-
SUBSTπUTE SHEET (RULE26) Assuming device driver 204 is the driver identified in the request, the input-output system 13 initially invokes the upper-most layer component driver 210, passing it the request. The upper-most layer driver 210 performs component driver specific functions and invokes, when appropriate, the next lower layer component driver 211, passing it the request. The next lower layer component driver performs its own component driver specific functions and invokes, when appropriate, the next lower layer component driver, passing it the request, and so on. Finally, the lower-most driver N Driver interacts with a device adapter, such as a device adapter for a disk drive.
Fig. 1 A is a block diagram illustrating conventional data structures that support the layering of component drivers in a device driver. While the data structures for each device driver are identical, those illustrated in Fig. 1A will be described as corresponding to the device driver 204. The device driver 204 contains a device control block (DCB) 402, a call-down table (CDT) 403, and a plurality of component drivers 210, 211, ***, N Driver. As is illustrated in Fig. 1, device driver 204 corresponds to device 208. The device control block 402 contains information indicating the type of the device 208 (disk drive, etc.), and a pointer 43 A that will point to each entry 403 A, 403B, ***, 403N in the call-down table 403 so as to invoke the component driver identified by the entry. The call-down table entries 403A, 403B, ***, 403N also have pointers 404A, 404B, ***, 404N, which point to the component drivers 210, 21 1, ***, N Driver of the device driver 204. The call-down table 403 specifies the order in which the component drivers are executed to process the I/O request. The upper-most (first) entry 403A in the call-down table 403 points to the upper-most (first) layer component driver 210. The second entry 403B in the call-down table 403 points to the second layer component driver 21 1, and so on. Each layer component driver invokes the next lower layer component driver. Thus, once the IOS 13 invokes the upper-most layer component driver 210, the layer component drivers control the execution of the device driver 204.
When the IOS 203 receives an I/O request, it selects the device control block 402 of the device driver 204 or 205, which is to process the I/O request. It then stores in the selected control block 402 an entry pointer 43 A to the first entry 403 A of the call-down table 403 corresponding to the selected device control block 402. The IOS 13 invokes the component driver pointed to by the first entry 403A in the call-down table 403 related to the selected device control block 402, passing the component driver the selected device control block 402. Generally, the component driver performs its component driver specific functions, adjusts the entry pointer 43A in the device control block 402 to point to the entry in the call-down table 403 for the next component driver so as to invoke the next lower component driver. The next component driver performs its own component driver specific functions and invokes, when appropriate, the next lower layer component driver, and so on.
At computer startup or restart, the operating system 201 invokes a driver configuration routine that is part of the IOS 13. The driver configuration routine inputs (typically from a storage device) a load table (not shown) and creates and initializes a device control block and a call-down table for each device. The load table contains a list of pointers to component drivers that are available to be configured into device drivers. The driver configuration routine scans the load table and loads into memory each component driver in order, starting with the component driver pointed to by the last load table entry. A component driver is selected for inclusion into a device driver for a particular device by allowing the component driver itself to determine whether to be included. Once a component driver is loaded, the configuration routine invokes the component driver to determine whether it should be included in the call-down table for the device driver. If the component driver determines that it should be included, then the component driver includes itself into the call-down table for that device driver by inserting a pointer to itself in the call-down table. The call-down table functions as a stack in that new entries are pushed onto the top of the call-down table and existing entries are pushed down. When multiple device drivers are to be configured, the configuration routine invokes each component driver once for each device driver, in the fashion described above.
Fig. 2 illustrates an audio device driver 300 constructed in accordance with the present invention. It forms part of a modified computer operating system. An operating system, capable of being modified in accordance with the present invention, may comprise a commercially available 32-bit operating system (OS) developed by Microsoft Corporation and distributed under the trademarks Windows 98, Windows NT and Windows 2000. Many Windows operating systems support layered device drivers. Such layered device drivers are described, for example, in U.S. Patent Nos. 5,613,123; 5,781,797; 5,931,935, each assigned to Microsoft Corporation, the disclosures of which are hereby incorporated herein. Typically, layered device drivers are
-27-
SUBSTπUTE SHEET (RULE26) designed in accordance with a Windows Driver Model (WDM) specification, created by Mircosoft Corporation. Further information regarding the WDM architecture and layered device drivers is set out in the following documents, each of which is incorporated herein by reference: Windows 2000 Driver Development Kit, Microsoft Press, 2000; Programming the Microsoft Windows Driver Model, Walter Oney, Microsoft Press, 1999; Windows NT Device Driver Development, P.G. Viscarola and W. G. Mason, Macmillan Technical Publishing, 1999; Writing Windows WDM Device Drivers, Chris Cant, R&D Books, 1999; Windows 98 Developer's Handbook, ben Ezzell with Jim Blaney, Sybex, Inc., 1998; The Windows Device Driver Book, Art Baker, Prentice Hall, PTR, 1997; and Windows NT File System Internals, A Developer's Guide, O'Reilly & Associates, 1997. The audio device driver 300 comprises a layered device driver.
Referring again to Fig. 2, an audio source application program, such as a media player 10, interacts with a hardware device, e.g., a compact disk player, a DVD player or like device, so as to retrieve digitized audio information or data from a memory device, e.g., a compact disk (CD), a digital video disk (DVD), and then stores the digitized audio data in memory buffers it controls in computer memory. Alternatively, the media player 10 retrieves digitized audio information from files (e.g., MP3 files) stored in computer memory, or processes digitized audio information generated by a computer game or received over the Internet as streaming audio and subsequently stores the digitized audio data in memory buffers. The digitized audio data comprises pulse code modulated (PCM) data representing sound. The media player 10 then issues an I/O request in the form of a WaveOut command or signal, which is received by an application program interface (API) 12. The request contains pointers to the buffers in computer memory containing the digitized audio information. The API 12, in turn, modifies the WaveOut command so that it is in a format acceptable to an input output system (IOS) 13, which receives the command.
The IOS 13 forms part of the computer operating system. It determines which device driver can service the request based on the device driver identified in the WaveOut command. Assuming that the IOS 13 determines that the I/O request has identified device driver 300 corresponding to sound card 42, illustrated in Fig. 2, the IOS 13 first converts the WaveOut command into I/O request packets or IRPs, as will be described below, and passes those IRPs to the device driver 300.
After receiving the WaveOut command from the media player 10, the API 12 transfers the WaveOut command to an audio processing program 14, one of which was developed by Microsoft and is known as "winMM.DLL." The audio processing program 14 transfers the digitized audio data into other buffers in computer memory, which buffers are controlled by the operating system. It also changes the pointers in the WaveOut command to reflect the new memory locations. It then relays the WaveOut command to a WDM audio driver 18, which also operates in the user mode, and may comprise a Microsoft driver known as "WDMAUD.DRV." The driver 18 translates the WaveOut command into IOCTL messages, which are provided to a kernel mode WDM audio driver 22. Audio driver 22 may be a Microsoft file termed "WDMAUD.SYS." The driver 22 converts IOCTL messages into packets of information that are formatted correctly for processing inside the kernel mode. Those packets of information are generally referred to as I/O request packets or IRPs. The IRPs contain pointers to the buffers in computer memory containing the digitized audio data. The IRPs are provided to system audio device 26 and kernel mixer and sample rate converter 30, before being provided to the device driver 300. Files winMM.DLL; WDMAUD.DRV; and WDMAUD.SYS are incorporated into most Windows operating systems.
System audio device 26 may comprise Microsoft file "SYSAUDIO.SYS," which is also incorporated into most Windows operating systems. Sample rate converter 30 may comprise Microsoft file "KMIXER.SYS," also incorporated into most Windows operating systems, which provides system-wide audio mixing, bit-depth conversion, and sample rate conversion for PCM audio streams. All PCM data may be converted to 44.1 KHz, 16-bits samples.
As set out above, the kernel mixer and sample rate converter 30 passes IRPs to the device driver 300. More specifically, those IRPs are received by an intercepting component driver 50 which,- in the illustrated embodiment, is the upper-most component driver in the device driver 300. It is noted that another component driver, which performs a different function from that of the component driver 50, may be positioned above component driver 50 in the call-down table for the device 42.
The component driver 50, when activated via a user program 55, captures IRPs (pointing to stored digitized audio data or samples) streaming through the component device 50 and sends those IRPs directly to one or more processing modules 51. The one or more processing modules 51 retrieve the data from first computer memory locations, modify the digitized audio signal via one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control, and store the modified digitized audio data back in the first computer memory locations. Alternatively, the modified digitized audio data could be stored in second computer memory locations. For example, a first software module 51 may be provided for effecting a conventional 3-dimensional processing scheme while a second module 51 , placed in series with the first module, may be provided for effecting volume control. Alternatively, a single processing module 51 could be provided for effecting those two functions. The final processing module 51 directs the IRPs pointing to the modified digitized audio data back to the component driver 50 so as to be sent by the driver 50 to the next component driver in the call-down table, which, in the illustrated embodiment, is port class component driver 34. Alternatively, the final processing module 51 may divert the IRP's pointing to the modified data directly to the port class driver 34.
It is also contemplated that the component driver 50 may divert the IRPs pointing to the modified digitized audio data to a storage module 52A, i.e., a storage device driver, so that the processed data may be stored on a storage medium such as computer memory (other locations), a DVD, a CD, a floppy disk or the like. The IRPs pointing to the modified and stored digitized audio data are then sent back by the storage module 52A to the component driver 50 so as to be sent by the driver 50 to the next component driver in the call-down table, which, in the illustrated embodiment, is port class component driver 34. Alternatively, the storage module 52A may divert the IRP's pointing to the modified and stored data directly to the port class driver 34.
It is further contemplated that the component driver 50 may transfer the IRPs pointing to the digitized audio data directly to a storage module 52 without ever sending the IRPs to a processing module 51. The IRPs pointing to the stored data are then transferred either back to the component driver 50 or directly to the port class component driver 34.
The port class component driver 34 comprises a kernel mode dynamic link library (DLL) that converts IRPs into streams of data compatible with Industry Standard Architecture (ISA), direct memory access (DMA) or peripheral connection interface (PCI) audio device drivers. Those streams of data are passed to an audio adapter component driver 38, comprising a
-30-
SUBSTfTUTE SHEET (RULE26) functional driver, which interfaces directly with the sound card 42. The driver 38 is typically provided by the hardware manufacturer and acts to convert the streams of data from the driver 34 into a format acceptable to the sound card 42. The sound card 42 then retrieves the modified and/or stored digitized audio data from memory (or the audio adapter component driver 38 retrieves the modified and/or stored digitized audio data from memory and then writes the data to the sound card 42) and converts the data into an analog signal for driving one or more speakers (not shown).
It is contemplated that any number of additional component drivers (not shown) may be positioned directly or indirectly above or below the intercepting component driver 50.
The installer software for the component driver 50 adds an "UpperFilters" entry into the operating system registry. This operation is performed as follows.
The installation software locates all eligible audio devices (i.e., sound cards) on the system and presents a list of the audio devices to a user for selection of the device driver to receive component driver 50. To locate all eligible audio devices, the installation software executes the following steps.
1. Create a list of all subkeys under "system\CurrentControlSet\control\DeviceClasses\KSCATEGORY_AUDIO" in the registry. The DeviceClasses key contains information about the device interfaces on the machine. The subkeys under this key represent each instance of an interface registered for the particular class interface. The device class interface we are interested in is the KSCATEGORY AUDIO interface represented by the GUID 69941D04-93EF-1 1D0- A3CC-00A0c9223196.
2. The subkey for each registered instance is checked to verify that it contains an entry for Devicelnstance, and RefCount.
3. The subkey for each registered instance is checked to see that it contains a subkey named ?WAVE. (? Represents a wildcard)
4. The Devicelnstance key under "System\CurrentControlSet\Enum" (this is the registry path for win2k ..."Enum" Key may have a different path on other OS's) to make sure it contains a ClassGuid value equal to KSWAVEOUT_GUID_KEY.
If a candidate device (i.e., a sound card) passes the above checks it is added to a list for user selection. The user then selects an audio device from the list of eligible candidates. An "UpperFilters" entry specifying the component driver 50 is added/modified under the Devicelnstance subkey in the "ENUM" branch of the registry for the selected device.
The "UpperFilters" entry comprises a pointer in the operating system registry. The operating system configures a load table from the entries contained in the registry. In particular, the operating system first places all functional component drivers in the load table and then inserts all "upper filter" component drivers in the load table.
As discussed above, a driver configuration routine scans the load table and loads into memory each component driver in order, starting with the component driver pointed to by the last load table entry. A component driver is selected for inclusion into a device driver for a particular device by allowing the component driver itself to determine whether to be included. The component driver 50, once it determines it should be part of the device driver 300, is appropriately placed in the call-down table for the device driver 300 by issuing the following program instructions:
PDEVICE_OBJECT
IoAttachDeviceToDeviceStack(IN PDEVICE OBJECT SourceDevice.ϊN PDEVICE OBJECT TargetDevice);
These instructions, which are issued by any "upper filter" component driver so as to be appropriately positioned in a corresponding call-down table, are taught in a Microsoft publication entitled "Microsoft Device Driver SDK," which is part of a subscription available from Microsoft Corporation entitled "Microsoft Developer Network," (MSDN), the disclosure of which is hereby incorporated by reference.
Because the component driver 50 is positioned in the call-down table above the audio adapter component driver 38, all IRPs directed toward that component driver 38, and, hence, the sound card 42, first pass through the component driver 50. The component driver 50 is first only interested in Device_Control IRPs; all others are passed along to the port class component driver 34 below. Of the Device_Contol IRPs, the component driver 50 is interested in identifying two specific types: 1 ) KS_PROPERTY 2) KS WRITE STREAM. The KS PROPERTY IRP precedes the KS WRITE STREAM IRP and provides such format information as a sampling rate, number of channels, etc. The KS WRITE STREAM IRP provides a pointer to the buffer in computer memory which actually contains the PCM wave data or digitized audio data to be processed. The determination as to the major classification of the IRP (Device_Control, Write, Close, etc.) is made by looking at the MAJORFUNCTION member of the IO STACK structure, which is part of the IRP. Once it is determined that the IRP is a Device Control IRP, the subtype (KS_PROPERTY, KS_WRITE_STREAM) is determined by evaluating the IOCODE member of the DeviceControl structure. The DeviceControl structure is a member of the Parameters structure contained in the IO STACK.
Once the component driver 50 finds a KS_Property IRP, it examines two buffers that are associated with the IRP, see Fig. 3. The Parameters. DeviceControl. IoctlType3InputBuffer (A pointer to the buffer is contained in the subject IRP) is first cast as a KSPROPERTY structure. The component driver 50 then examines the members of this structure buffer to determine if this is the IRP of interest. The Set member of KSPROPERTY, a GUID identifying the property set, is verified to conform to STATIC KSPROPSETID Connection. Next, the ID member of KSPROPERTY is verified to conform to KSPROPERTY_CONNECTION_DATAFORMAT. Finally the component driver 50 verifies that the Flags member of KSPROPERTY conforms to KSPROPERTY TYPE SET. Assuming that the first buffer examined conforms to the format and values described above, the component driver 50 examines the second buffer pointed to by the UserBuffer field of the KS PROPERTY IRP.
A GUID is an abbreviation for Globally Unique Identifier. These identifiers are known to be unique over all space and a very large span of time. The Open Software Foundation (OSF) formulates these identifiers. The industry standard GUIDs are stored in Microsoft header files termed "ksmedia.h" and "ks.h".
The second buffer is cast as a KSDATAFORMAT_WAVEFORMATEX data structure. The KSDATAFORMAT_WAVEFORMATEX structure/buffer consist of two structures: namely (1) KSDATAFORMAT and (2) WAVEFORMATEX. The component driver 50 first looks at the members of the KSDATAFORMAT structure. The MajorFormat member, a GUID specifying the general format type, is verified to conform to
STATICJ SDATAFORMAT TYPE AUDIO. Next the SubFormat member, a GUID specifying a general sub-format, is verified to conform to:
STATIC JCSDATAFORMAT_SUBTYPE_PCM. Finally the Specifier member, a GUID that provides additional data format type information, is verified to conform to STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORM. If all of the members verified above are correct, the component driver 50 then extracts information from the WAVEFORMATEX structure. The data to extracted from the WAVEFORMATEX structure are: (1) the number of channels (e.g., 2 for stereo, 1 for mono, etc.) (2) Sampling rate of the PCM data in samples per second, (3) the transfer rate of PCM data in bytes per second, (4) the sampling resolution in bits per sample, (5) the block alignment parameter, (6) a format tag. The member fields of this structure are named as follows: nChannels, nSamplesPerSec, nAvgBytesPerSec, wFormatTag, wBitsPersample, and nBlockAlign.
This completes the first major portion of the processing of the component driver 50.
Once the component driver 50 finds a valid KS_Property IRP, it looks for a KS_WRITE_STREAM IRP referencing valid PCM wave data. The User Buffer field of the IRP points to the buffer of interest. This buffer is first cast as a KSSTREAM HEADER structure, see Fig. 4. The component driver then makes some safety checks. The following fields are examined. The fields are: (1) Data, (2) FrameExtent, (3) DataUsed. The Data field contains a pointer to the PCM sound data that is to be processed by the processing module(s) 51. The component driver 50 now has direct access to buffer addresses for the PCM sound data destined for the sound card 42. The component driver 50 passes the buffer addresses for the PCM sound data to the one or more processing modules 51. The one or more processing modules 51 effect digital processing of the PCM data, i.e., 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; volume control; and/or data memory storage and then replaces the original buffer PCM data with the processed information. The IRP's are then relayed back to the component driver 50 which, in turn, forwards those IRPs to the port class component driver 34. Alternatively, the IRPs are diverted directly to the port class driver 34 by the one or more processing modules 51.
Principal components of one embodiment of the intercepting component driver 50 constructed in accordance with the present invention are illustrated in Fig. 8. The driver 50 of the illustrated embodiment comprises modules: driver_wdm 50a, driver_wdmDevice 50b, KpnpLowerDevice 50c, tds_driverDevice 50d and tds DeviceConfig 50f. This particular embodiment of the driver 50 is incorporated into the program listings which are incorporated herein by reference. The module programs perform the following tasks: driver_wdm
The driver_wdm class contains DriverEntry, LoadRegistryParameters and AddDevice functions. The "DriverEntry" function is called by the operating system when the component driver 50 is loaded into memory. The DriverEntry function inititalizes a Device Object with pointers to various dispatch routines. This functionality is provided by the NuMega framework, noted below, and thus is not explicitly coded in a driver entry routine. The DriverEntry routine also obtains the value of "BreakOnEntry" from the Parameters key section for the driver 50 by invoking the "LoadRegistryParameters" function. In general the AddDevice function is called by the operating system whenever it enumerates a device (i.e., a sound card) related to the driver 50. This function is called when the operating system processes the "UpperFilters" registry entry for the audio device selected. The function first creates a functional device object (FDO). The constructor for the FDO is passed the physical device object (PDO) which represents the driver 38, and binds the newly created FDO to the PDO. This binding causes driver 50 to "see" all IRPs that are directed toward the driver 38. The AddDevice function finishes by checking the status of the FDO and incrementing the unit number if FDO construction is successful.
Functional Device Objects; Physical Device Objects; DriverEntry, LoadRegistryParameters and AddDevice functions; and Device_Contol IRPs, such as 1) KS_PROPERTY 2) KS WRITE STREAM are defined and discussed in the following documents: Windows 2000 Driver Development Kit, Microsoft Press, 2000; Programming the Microsoft Windows Driver Model, Walter Oney, Microsoft Press, 1999; Windows NT Device Driver Development, P.G. Viscarola and W. G. Mason, Macmillan Technical Publishing, 1999; Writing Windows WDM Device Drivers, Chris Cant, R&D Books, 1999; Windows 98 Developer's Handbook, Ben Ezzell with Jim Blaney, Sybex, Inc., 1998; The Windows Device Driver Book, Art Baker, Prentice Hall, PTR, 1997; and Windows NT File System Internals, A Developer's Guide, O'Reilly & Associates, 1997.
driver_wdmDevice This module contains the constructors and destructors for the driver_wdmDevice class as well as numerous dispatch routines for handling IRP flow. The driver_wdmDevice class is derived from the KpnPDevice class provided by software sold by CompuWare® NuMega™ under the product name "DriverStudio, Version 1.0." The constructor for this class calls the base class constructor to create the FDO. It then calls "m_lower.initialize" to bind this FDO to the PDO for the audio device of interest. Since the driver 50 acts as a layered driver for the port class component driver 34 below it, it must be capable of handling any IRP's that might be directed to the port class driver 34. Driver_wdmDevice contains a function entry for all possible IRP's. The majority of these IRP's are simply passed on to the driver 34 below this one since they are of no interest. This is accomplished by calling the "ForceReuseOfCurrentStackLocationlnCallDown" method on the IRP followed by calling the "PnpCall" method on the lower driver 34. The IRP MJ DEVICE CONTROL IRP is the IRP of interest. The handler for this type of IRP is "DeviceControl". The evaulation of this IRP is protected by a "spinlock." This method evaluates the IRP for the type needed to effect audio data modification processing and calls the necessary routines to perform the data modification processing. The "privatelO" routine will return a complete status if it handed an IRP associated with data modification control functions, such as setting up a new configuration. In the "complete" case the "spinlock" is released and a return is made by invoking "PnPComplete" on the IRP. In all other cases "privatelO" will return an incomplete status. The DeviceControl function then releases the "spinlock" and passes the IRP on to the lower driver 34.
KPnpLowerDevice This is a WDM driver class provided by CompuWare® NuMega™ under the product name "DriverStudio, Version 1.0" and is used to represent a Physical Device Object (PDO). When an instance of KPnpLowerDevice is created or initialized by a component driver, it attaches a device object to the Physical Device Object (PDO). The attachment operation returns another system device object address, which points to the device object which was actually attached. This is referred to as the Top Of Stack device. The Top of Stack device may be different from the PDO. Device attachments form a singly linked list, so at most one component driver may attach to a second. If the Top of Stack device is already attached to the PDO, then a second component driver that attempts to attach to the PDO will instead attach to the Top of Stack device. A driver's Functional Device Object (FDO) normally contains a member variable of the KpnpLower device class that is initialized in the AddDevice function to form the linkage
-36-
SUBST1TUTE SHEET (RULE26) between the driver's FDO and the PDO.
tds_driverDevice tds_DriverDevice is a class containing audio data modification specific functions and members. The primary functions of interest are "privatelO", "dispatchKSProperty", dispatchKSWriteStream", "dispatchTDSSetMode", "dispatchTDSGetMode", "dispatchSetFilter", " dispatchGetFilter", "lock" and "release".
The "privatelO" function vectors processing to routines based on the loctlCode contained in the IRP. The "dispatchKSProperty" and "dispatchKSWriteStream" functions are responsible for detecting and directing the application program supplied sound buffer to the processing module(s) 51. The "dispatchSetMode" and "dispatchTDSGetMode" are routines which allow the application program to set/get audio modification processing parameters. Those parameters are mode, toggle on , toggle length, scale, and verbose level. The "dispatchSetFilter" and "dispatchGetFilter" routines allow the application program to set/get the digital filter coefficients, which are discussed below. The "lock" and "release" routines are used to set and release a "spinlock". IRPs that are intercepted by tds_driverDevice have their associated PCM data passed by reference to processing module(s) 51.
tds DeviceConfig
This class represents an enhancement configuration. It contains member variables and accessory functions for configuration name, configuration description, toggle parameters, mode, scale factor, and filter tap settings.
As noted above, the one or more processing modules 51 may effect 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and/or volume control. Activation of the one or more processing modules 51 is effected using the user program 55. This program operates in user mode and preferably includes a graphical user interface. In response to commands input by a user via a keyboard, mouse or other input device, the user interface sends control instructions to the driver 50. Such instructions may specify whether digitized audio data modification should occur and, if so, specify a desired type of digitized audio data modification; and whether digitized audio data should be stored elsewhere in computer memory or on a separate memory device and, if so, if storage should occur before or after audio data modification.
An example user interface is:
1) The User interface program "opens" a channel to the driver using a CreateFile() system call. Specifically it may be in the form
Filehandle =CreateFile(device-name,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN EXISTING,
FILE ATTRIBUTE NORMAL,
NULL
);
2) Then the user interface examines the returned handle with If(Filehandle != INVALID_HANDLE_VALUE)
{
//Successful opening of driver
//now talk to driver using IOCTL commands
} else
{
//Failure to open driver // Handle the failure
}
In the illustrated embodiment, the processing module 51 comprises a digital filter, such as the one described in copending Patent Application, U.S. Serial No. 09/431 ,371, entitled "Digital Filter," filed on November 1, 1999 or in PCT Patent Application, Serial No. PCT/US00/21912, entitled "Digital Filter," filed on August 10, 2000, the disclosures of which are incorporated herein by reference. The digital filter effects sound enhancement of the PCM sound data. More specifically, the enhancement involves increasing the amplitude of the sound at frequencies where the response of the human ear has been found to drop off.
Media player 10 supplies input digitized sound samples or audio data (i.e., PCM sound data) at a rate which depends upon the nature of the media involved. For a CD, a typical sampling frequency is 44,100 Hz. Many other sampling rates exist. For example, sampling rates of 22,050 Hz and 11 ,025 Hz are used in many PC applications. Some audio CD's are now produced using other sampling rates. Digital video disks are produced at sampling rates of 64,000 Hz. The telephone industry samples at a rate of 8,000 Hz. The invention described herein is applicable to any sampling rate. The processing module 51 outputs processed digitized audio data at a frequency equal to the rate at which input digitized audio data is supplied by media player 10.
The filter comprises an aπay of storage locations within a random access memory. A series of N time response values, A0 through AN_ι, are tabulated in a written program for downloading into random access memory storage locations. These response values, hereinafter referred to as time coefficients, are established by a technique described below.
Each digitized sound sample (comprising PCM sound data) is designated X(n) at the time of sampling and is stored temporarily in a designated random access memory location. The sound samples are later shifted successively through a series of N-l other storage locations for generation of time shifted samples X(n-l) through X(n-[N-1]). Storage locations, may be thought of as being equivalent to stages of a shift register. However, the processing module 51 may not have sufficient memory for this purpose, and therefore the processing module 51 may cause the sound samples to be shifted through a designated portion of the random access memory.
The processing module 51 multiplies each An by a corresponding X(n). The AnX(n) products then are summed. It will be appreciated that the processing module 51 performs N shift operations, N multiplications and N summations, or the equivalent thereof, for each sound sample supplied by the media player 10. IRPs pointing to the calculated sums generated at a rate of 44,100 HZ are supplied to the port class driver 34. In response, the driver 34 provides streams of data having pointers to the processed data to an audio adapter component driver 38, comprising a functional driver, which interfaces directly with the sound card 42. The driver 38 converts the streams of data from the driver 34 into a signal having a format acceptable to the sound card 42. The sound card then retrieves the modified and/or stored digitized audio data from memory and converts the data into an analog signal for driving one or more speakers (not shown).
The processing module 51 convolves N time response coefficients A0 - AN_ι against the entire series of sound samples. Mathematically speaking, the module 51 repeatedly solves the following equation:
-39-
UBSnTUTE SHEET (RULE26) Y(n) = A0X(n) + A,X(n-l) + ... + AN_!X(n-[N-l]) where A0 through AN_I are the stored time coefficients;
X(n) is the most recent sample received;
X(n-l) through X(n-[N-1]) coπespond to N-l samples received prior to sample X(n); n is the running index of the time coefficients being computed;
N is equal to the number of terms in the equation to the right side of the equal sign; and wherein calculated values of Y define the driving signal.
When sampling at 44,100 Hz, all calculations implied by the above equation must be completed within a sampling interval, Δ, of 22.68 microseconds. Actually much less time is available, because the operating system requires time for performing its normal housekeeping functions and running any other applications which simultaneously may be open. Consequently it is necessary to find a series of discrete values for the time response function which are few in number, yet able to produce the high quality sound reproduction desired. In accordance with a prefeπed embodiment of this invention it has been found that digital music of the desired quality may be generated for an odd value of N (the number of time response coefficients) as low as 7. A noticeable degree of enhancement of digital music has even been accomplished with a value of N as low as 5. Accordingly, it has been found that the value of N is at least 5, preferably 7, more preferably 9, and most preferably 11. It is also contemplated that the value of N may comprise an odd integer greater than 11. It is further contemplated that the value of N may comprise an even integer greater than or equal to 6, such as 8, 10 or 12. However, it is preferred that N comprise an odd integer.
As described above, the convolution process is carried out in real time using appropriate time response coefficients. These time response coefficients are calculated off-line and are mapped to a like number of frequency coefficients established as discussed below. That procedure generates N frequency coefficients HO-HN-I, each having a frequency and an amplitude, which are mapped into N time response coefficients A0-AN_ι by use of the discrete inverse Fourier transformation:
Figure imgf000042_0001
By way of example, N may have a value of 19, which would call for 19 time response coefficients, all derived from a set of 19 frequency coefficients, regularly spaced at intervals Fs in accordance with the time-frequency uncertainty principle, a relationship stated in the following equation:
1
F .
Δ N
Thus for Δ = 1 / 44,100 and N = 19, Fs = 2321 Hz. The results are set forth in TABLE I below.
Table I
Freq. ~ Hz Amp of Freq Coeff Amp of Time Coeff Phase Angle of Time Coeff
0 2.5 3.0295 0
2321 2.5 0.4046 II
4642 2.15 0.01
6963 2.4 0.1905 0
9284 2.6 0.0237 IT
11605 2.9 0.0694 π
13926 3.78 0.2137 0
16247 4.6 0.2074 π
18568 2.6 0.1175 0
20889 4 0.0714 II
23210 4 0.0714 π
25531 2.6 0.1175 0
27852 4.6 0.2074 π
30173 3.78 0.2137 0
32494 2.9 0.0694 II 34815 2.6 0.0237 π
37136 2.4 0.1905 0
39457 2.15 0.01 π
41778 2.5 0.4046 π
In general the An and the Hk are all complex numbers, having a magnitude and a phase. However, in the practice of an embodiment of this invention the H have a phase angle of 0, and
the An have a phase angle of either 0 or II. Values of II (i.e., 3.14159) are accommodated in the filter design by assigning a negative value to the amplitude of the time coefficient. The 19 frequency domain points define a frequency response curve 58 extending from 0 Hz to 41,778 Hz as illustrated in Fig. 5. They include a base point 60, principal points 61 - 69 and minor points 71 - 79. The specified numeric amplitudes of the various frequency domain points 60-69 and 71-79 do not have units. The specified amplitudes of these points are all relative to one another. Frequency domain points 60 - 69 and 71 - 79 are set at regular intervals of 2321 Hz with mirror points 71 - 79 having amplitudes equal to principal points 61 - 69 respectively. It will be observed that the principal points and the mirror points are miπored about a mid frequency of 22,050 Hz, half the 44,100 Hz sampling frequency. This produces a periodic response at the sampling frequency. That periodicity effectively extends the frequency response curve 58 to 44,100 Hz and sets a virtual point (not illustrated) at 44,100 Hz having a magnitude equal to that of base point 60. This virtual frequency domain point is mapped to a virtual time response point (also not illustrated) equal to, and synchronous with, A0. Since 19 is an odd number there is no frequency domain point at the miπoring mid frequency.
Since the human ear does not typically respond to frequencies in excess of about 20,000 Hz, the entire information content of the original audio signal can be processed by low pass filtering at 22,050 Hz, followed by sampling and recording at 44,100 Hz. CDs and other digital recordings are usually prepared in this fashion. That gives two points per cycle of the highest frequency present.
Frequency response points were selected in the range from 20 Hz to 20,000 Hz having amplitudes bearing a roughly inverse relationship to the sensitivity of the human ear over that same range. This flattens out the perceived response of the filter to the regenerated sound. In particular the frequency response was relatively decreased at points 68 and 62 to compensate for regions of increased ear sensitivity near 4642 Hz and 18,568 Hz respectively, and it was relatively increased at point 63 to compensate for reduced ear sensitivity in the region around 16,247 Hz. Thus, as is apparent from Fig. 5, frequency response coefficients 62-69 having frequencies between a reference frequency of 4642 Hz and a high end frequency of 20,000 Hz increase in amplitude as per increasing frequencies from the reference frequency up to a significant amplitude peak at a peak high frequency of 16,247 Hz and decrease in amplitude as per increasing frequencies down to a significant amplitude trough at a trough high frequency of 18,568 Hz. The amplification of the frequency response coefficient at the peak high frequency is about 2.1 times the amplification of the frequency response coefficient at the reference frequency. The frequency response coefficient 69 which is positioned between the reference frequency and a low end frequency of 20 Hz has an amplitude which is slightly greater than that of the frequency response coefficient 68 located at the reference frequency.
The required filter response is undefined outside the range of human hearing. That includes the region below about 20 Hz, a free band region between 20,000 Hz and 24,100 Hz, and an end region between 24,100 Hz and 44,100 Hz. However, the periodic nature of the filtering process requires some definition for all frequencies between zero and the sampling frequency. Therefore, frequency response points or taps were selected at amplitudes which would tend to lend smoothness to the response function in the undefined regions. Hence, point 60 having a frequency of 0 Hz was selected so as to have an amplitude of 2.5, which is equal to the amplitude for point 69, which has a frequency of 2321 Hz. The amplitudes of points 61 and 71, which fall within the free band region, were selected so as to achieve a generally constant oscillation frequency across a center band extending from about 1 1,605 Hz to about 32,494 Hz, i.e., the portions of the curve defined between points 65,62; 62,72; and 72,75 have approximately the same width. Points 72-79 are mirror images of points 62-69. By selecting the amplitudes of points 60, 61 and 71-79 in the manner discussed above, the number of time coefficients having significant or large magnitudes were reduced. In order to reduce processing time during filtering, the number of time coefficients incorporated into the filter must be minimized. By minimizing the number of time coefficients having significant magnitudes, remaining time coefficients having insignificant magnitudes may be discarded resulting in fewer time coefficients required to achieve a desired frequency response for the filter.
The above described digital filter design procedure was found to produce time response coefficients which, when convolved with typical stored music, rendered output sound of remarkably high quality. It was found that background sound which is ordinarily suppressed during storage, was substantially restored upon playback. Moreover, 19 coefficients did not overwhelm the computer. Having achieved those results, filters having lower values of N were then designed.
The following is a general summary of how a frequency response curve according to the present invention can be affected by manipulating various frequency response points or taps. Also included are some of the characteristics that can occur when manipulating specific taps located in each region of the frequency response curve noted. In general, manipulation of one or more of the taps at frequencies lower than the reference frequency can affect the low frequency response or base region of the frequency response curve (e.g., about 0 Hz to about 2004 Hz). By raising the amplitude of one or more of the taps in the base region, the base of the resulting sound can be made to sound more boomy and thick (i.e., the base sound is over emphasized and it loses some of its detail and clarity). Raising the amplitude of one or more of the base region taps also seems to affect the high frequency response or treble region (above the reference frequency) so that the treble portion sounds thicker and not quite as brilliant (i.e., it loses detail and clarity). That is, affecting the base region in this manner can suppress the treble region in a manner similar to the high frequency masking effect caused by using noise suppression technology. When the amplitude of one or more of the taps in the base region are lowered, the base of the resulting sound can be made to sound much thinner, which can result in the treble region sounding brighter or brittle (i.e., more apparent or over emphasized), depending upon how the taps are adjusted.
In general, manipulation of one or more of the taps within the range of the reference frequency (e.g., about 501 Hz to about 8018 Hz) can affect the reference frequency response of
-45-
SUBSTITUTE SHEET (FIULE26) the frequency response curve. Raising the amplitude of one or more of the taps in this region can produce sound appearing to have more air and greater separation between the sound sources, e.g., instruments (i.e., different sound sources are more easily distinguished). This greater separation can make the overall sound appear more like it was live and not recorded. Lowering the amplitude of one or more of the taps in this region can make the resulting signal sound dull and lifeless.
Manipulation of one or more of the taps at frequencies higher than the reference frequency, but within the frequency band "of interest", can affect the high frequency response or treble region of the frequency response curve (e.g., about 2004 Hz to about 20045 Hz). By raising the amplitude of the taps in the treble region, more brilliance can be added to the resulting sound. In this way, a greater amount of detail can be offered, especially in audio application like, for example, a movie soundtrack. By lowering the amplitude of the taps in the treble region, the resulting sound can be made to sound flat and muted or muddy.
Manipulation of one or more of the taps out beyond the frequency band "of interest" (i.e., the center region where the curve is folded upon itself) can affect the dwell time of the signal, especially when the frequencies of the taps are at the edge or above the band of normal human hearing (e.g., about 20 Hz to about 20,000 Hz). For example, the center region of the frequency response curve of Fig. 6 contains taps 101 and 1 11. By raising the amplitude of the taps in this region, the dwell time can be reduced and the resulting enhancement can sound more like a mere amplitude shift, rather than overall harmonic enhancement. Increasing the amplitude of these taps can also increase the rate of clipping or overdriving of a signal. In addition, by lowering the amplitude of the taps in this region, the dwell time can be increased and the overall enhancement and stability of the audio signal improved, with a reduction in the risk of the signal being clipped. The dwell time can be dramatically affected by changes in the amplitude of the center region taps, regardless of the number of the center region taps. The rate of transition between the frequency band of interest and the center region can be controlled by adjusting the amplitude of one or more of the center region taps. Surprisingly, it has been found that the cutoff characteristic between the frequency band of interest and the center region (i.e., the sharpness with which the band edge is formed) can be used to control the dwell time and, consequently, the enhancement imparted to the digital audio signal. As the dwell time increases, certain frequencies exhibit an increase in loudness (as sounds are stretched in time they appear to be louder). This increase in "dwell time" is responsible for unmasking previously masked tones and leads to a preferred enhancement. Dwell time is defined here as the time interval over which the impulse response of the filter has significant amplitude. For a filter with a fixed number of taps (i.e., a finite impulse response filter), the actual time duration of the impulse response cannot be modified.
A digital filter in accordance with a second embodiment of the present invention was created as follows. A set of first frequency response coefficients separated at uniformly spaced frequency intervals were selected. The first frequency response coefficients had zero phase angles. In the illustrated embodiment, the frequency response coefficients set out in Table 1 above were used as the first frequency response coefficients. By the use of discrete inverse Fourier transformation, the plurality of first frequency response coefficients were mapped into coπesponding first time response coefficients, which are also set out in Table 1.
As noted above, in order to reduce processing time during filtering, the number of time coefficients should be minimized. So as to achieve that end, a pair of the first time response coefficients having equal magnitudes and being positioned adjacent to one another in Table 1 were removed. The discarded pair of time coefficients each had a magnitude of .0714. The remaining time coefficients defined second time coefficients.
If an even number of first time response coefficients are provided, the one first time response coefficient not having a zero frequency and not having a mate of equal magnitude is also discarded.
The effect of removing the pair of time coefficients on the frequency response of the digital filter was then assessed. This involved generating a first frequency response curve from the first frequency response coefficients. The second time response coefficients were mapped into coπesponding second frequency response coefficients by use of the discrete Fourier transformation:
Figure imgf000048_0001
A second frequency response curve was then generated using the second frequency response coefficients. The first and second frequency response curves were compared to determine if the second frequency response curve was substantially different from the first frequency response curve. If not, then another pair of time response coefficients, i.e., a pair of the second time response coefficients, having equal magnitudes and being positioned adjacent to one another were removed. This process of removing and assessing continued until a pair of discarded time response coefficients caused a significant change in the perceived enhancement caused by the frequency response of the digital filter. A significant change in the perceived enhancement caused by the frequency response of the digital filter coπesponds to a substantial difference between an initial and a subsequent frequency response curve. When a significant change occurred, this last pair of discarded time response coefficients were added back to the time response coefficients. These remaining time response coefficients defined final time response coefficients.
In order to reduce processing time, it is preferred that the time response coefficients comprise integer numbers. In order to convert the final time response coefficients into integers, they were multiplied by an integer conversion number sufficiently large to permit any remaining fractional portion to be discarded without losing substantial final time response coefficient accuracy. A substantial loss in final time response coefficient accuracy occurs when the resulting frequency response of the digital filter produces an enhancement perceptibly different from the desired enhancement. It is also prefeπed that the integer conversion number be selected as a power of two so that shifting may be used in place of division when subsequent renormalization occurs for calculated values of Y. In the illustrated embodiment, the final time coefficients (set out in brackets in Table 2 below) were multiplied by 21 (8192). Any remaining fractional portions of the converted time coefficients were discarded. The integer final time coefficients are set out in Table 2 below. They may be tabulated in a written program for downloading into random access memory storage locations. This filter has 11 time response coefficients.
Prior to the microprocessor supplying the calculated values of Y to the audio adapter
-48-
SUBSTUUTE SHEET (RULE26) component driver 38, the microprocessor must renormalize those values. This involves dividing each value of Y by the integer conversion number. Alternatively, if the integer conversion number is selected as a power of two, the microprocessor can effect renormalization by right shifting an appropriate number of bit positions, 13 in the illustrated embodiment.
A frequency response curve 80 plotted from the final frequency response coefficients, set out in Table 2, is shown in Fig. 6. Curve 80 has a base point 100. It also has principal points 101 - 105, which are miπored by points 111- 115. As is apparent from Fig. 6, frequency response coefficients 102-105 having frequencies between a reference frequency of 4009 Hz and a high end frequency of 20,000 Hz increase in amplitude as per increasing frequencies from the reference frequency toward the high end.
TABLE 2
Freq. ~ Hz Amp of Freq Coeff Amp of Time Coeff Phase of Time Coeff 00000 2.50 23,980 (2.9273) 0
04009 2.00 3,593 (.4386) π
08018 2.40 125 (0.0153) 0 12027 2.85 1226 (0.1497) 0
16036 4.00 598 (0.0731) π
20045 3.50 1089 (0.1330) 0 24054 3.50 1089 (0.1330) 0
28063 4.00 598 (0.0731) π
32072 2.85 1226 (0.1497) 0 36081 2.40 125 (0.0153) 0
40090 2.00 3,593 (0.4386) π
A filter in accordance with a third embodiment of the present invention was created using the same design procedures undertaken to construct the filter of the second embodiment. The third
-49-
SUBSTITUTE SHEET (RUIE26) filter's final frequency and time response coefficients are set out in Table 3 below. The final time response coefficients both before and after being multiplied by an integer conversion number equal to 8192 are set out in Table 3. A frequency response curve 90 plotted using the final frequency response coefficients is shown in Fig. 7. The curve has a base point 120, principal points 121-125 and minor points 131-135. As is apparent from Fig. 7, frequency response coefficients 122-125 having frequencies between a reference frequency of 4009 Hz and a high end frequency of 20,000 Hz increase in amplitude as per increasing frequencies from the reference frequency toward the high end.
TABLE 3 Freq. ~ Hz Amp of Freq Coeff Amp of Time Coeff Phase of Time Coeff 00000 2.50 24,948 (3.0455) 0
04009 1.00 5958 (0.7274) 11
08018 2.50 1634 (0.1995) π
12027 3.50 3094 (0.3777) 0
16036 5.00 237 (0.0290) π
20045 3.50 2503 (0.3056) 0
24054 3.50 2503 (0.3056) 0
28063 5.00 237 (0.0290) π
32072 3.50 3094 (0.3777) 0
36081 2.50 1634 (0.1995) π
40090 1.00 5958 (0.7274) π
-50-
SUBSΠTUTE SHEET (RULE26) The above description of the invention teaches a straight forward calculation of the sound card driving signal, Y. A more prefeπed procedure takes advantage of an observed symmetry in the time coefficients. That is, A1T1 = An where 0 < n < (N + 1) / 2 and m = N - n. In the case where N = 1 1 a simplified calculation of the sound card driving signal takes the form:
Y = A0Xo + A,(X, + X.o) + A2(X2 + X9) + A3(X3 + X8) + A4(X4 + X7) + A5(X5 + X6)
This reduces the number of time consuming multiplications. The procedure may be extended to other values of N.
Filters constructed in accordance with the present invention may have a reference frequency which falls within the range of from about 501 Hz to about 8018 Hz; a peak high frequency which falls within the range of from about 1002 Hz to about 20045 Hz; a trough high frequency which can fall at any frequency after the peak high frequency; and a peak low frequency which falls within the range of from about 0 Hz to about 2004 Hz. It is further contemplated that the amplification of the frequency response coefficient at the peak high frequency may be about 1.3 times to about 6.0 times the amplification of the frequency response coefficient at the reference frequency. It is also contemplated that the amplification of the frequency response coefficient at the peak low frequency may be about 1.1 times to about 3.0 times the amplification of the frequency response coefficient at the reference frequency.
It is additionally contemplated that two or more of the filters described herein may be stored in a single processing module 51 or separately in two or more processing modules 51. Hence, a user may select a desired one of a plurality of filters for use in enhancing digitized audio data via the user program 55.
It is further contemplated that designer software may be used in conjunction with the driver 50 and the processing module(s) 51 so as to permit a designer to develop a new filter for incoφoration into the driver 50, an existing a processing module 51 or a new processing module 51. The software comprises a graphical interface having a set of controls representing frequency sample points in the audio frequency range (i.e., 20 Hz - 20 kHz). The software allows the designer to set the frequency sample points as desired to obtain a given frequency compensation or response curve. The software then calculates the temporal sample points that correspond to the time coefficients required for the real-time linear filtering of digitized audio data and places those temporal coefficients into either the driver 50 or a processing module 51 by communicating with the driver 50 or the processing module 51 through IOCTL calls. The software further functions to give a designer-defined name to the new filter and communicate same to the user program 55. The new filter then becomes available to a user via the user program 55.
What is claimed is.

Claims

Claims
1. A device driver forming part or an extension of an operating system, the operating system being adapted to receive digitized audio data from an application program, the device driver comprising: an intercepting component driver which is capable of initiating at least one of sound modification processing of the digitized audio data and storage of the digitized audio data.
2. A device driver as set forth in claim 1, wherein the component driver effects sound modification processing of the digitized audio data.
3 A device driver as set forth in claim 2, wherein the sound modification processing comprises at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
4. A device driver as set forth in claim 2, wherein the sound modification processing comprises sound enhancement processing using a digital filter, the digital filter comprising a series of digitized time coefficients stored in a memory, the time coefficients being mapped to a like number of frequency coefficients, the frequency coefficients being spaced at frequency intervals, having either zero phase angles or linearly spaced phase angles and having amplitudes which are miπored about a mid frequency to produce periodicity of a time response for the digital filter.
5. A device driver as set forth in claim 4, wherein the time coefficients are odd in number.
6. A device driver as set forth in claim 5, wherein the number of the time coefficients is equal to or greater than 5.
7. A device driver as set forth in claim 4, wherein the time coefficients are defined by inverse discrete Fourier transforms of the frequency coefficients.
8. A device driver as set forth in claim 4, wherein a portion of the frequency coefficients having frequencies within a free band are selected so as to achieve a generally constant oscillation frequency across a center band which is broader than said free band.
9. A device driver as set forth in claim 4, wherein the frequency coefficients are spaced at equal frequency intervals.
10. A device driver as set forth in claim 4, wherein the time coefficients are integer numbers.
1 1. A device driver as set out in claim 2, wherein the component driver further initiates storage of the digitized audio data on one of a compact disk, a digital video disk, a floppy disk and computer memory.
12. A device driver as set forth in claim 1, wherein the component driver initiates storage of the digitized audio data on one of a compact disk, a digital video disk, a floppy disk and computer memory.
13. A device driver as set forth in claim 1, wherein the component driver initiates the at least one of sound modification processing of the digitized audio data and storage of the digitized audio data in kernel mode.
14. A device driver forming part or an extension of an operating system, the operating system being adapted to receive digitized audio data from an application program, the device driver comprising: at least two layered component drivers including a functional component driver which manages the operation of a sound card device and an intercepting component driver positioned above the functional driver and being capable of initiating at least one of sound modification processing of the digitized audio data and storage of the digitized audio data.
15. A device driver as set forth in claim 14, wherein the digitized audio data is stored in a first portion of computer memory and the intercepting component driver initiates the at least one of sound modification processing and storage by intercepting a signal pointing to the digitized audio data stored in the first portion of computer memory and output by the application program, retrieving the digitized data from the first portion of memory and effecting the at least one of sound modification processing of the digitized data and storage of the digitized data.
16. A device driver as set forth in claim 15, wherein the intercepting component driver effects sound modification processing of the digitized data.
17. A device driver as set forth in claim 16, wherein the intercepting component driver effects the sound modification of the digitized audio data via at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
18. A device driver as set forth in claim 17, wherein the intercepting component driver effects sound enhancement processing of the digitized audio data using a digital filter, the digital filter comprising a series of digitized time coefficients stored in a memory, the time coefficients being mapped to a like number of frequency coefficients, the frequency coefficients being spaced at frequency intervals, having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter.
19. A device driver as set forth in claim 16, wherein the intercepting component driver further causes the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
20. A device driver as set forth in claim 15, wherein the intercepting component driver causes the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
21. A device driver as set forth in claim 14, wherein the digitized audio data is stored in a first portion of computer memory and the intercepting component driver initiates the at least one of sound modification processing and storage by intercepting a signal pointing to the digitized audio data stored in computer memory and output by the application program, transferring the signal to a separate software module such that the module may retrieve the digitized data from the first portion of memory and effect the at least one of sound modification processing of the digitized data and storage of the digitized data.
22. A device driver as set forth in claim 21, wherein the software module effects sound modification processing of the digitized data.
23. A device driver as set forth in claim 22, wherein the software module effects the sound modification of the digitized audio data via at least one of 3-dimensional processing; reverberation processing; equalization processing; sound enhancement processing; and volume control.
24. A device driver as set forth in claim 23, wherein the software module effects sound enhancement processing of the digitized audio data using a digital filter, the digital filter comprising a series of digitized time coefficients stored in a memory, the time coefficients being mapped to a like number of frequency coefficients, the frequency coefficients being spaced at frequency intervals, having either zero phase angles or linearly spaced phase angles and having amplitudes which are mirrored about a mid frequency to produce periodicity of a time response for the digital filter..
25. A device driver as set forth in claim 22, wherein the software module further causes the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
26. A device driver as set forth in claim 21, wherein the software module causes the digitized audio data to be stored on one of a compact disk, a digital video disk, a floppy disk and a second portion of computer memory.
27. A device driver as set forth in claim 14, wherein the component driver initiates the at least one of sound modification processing of the digitized audio data and storage of the digitized audio data in kernel mode.
28. A computer-implemented method of creating processed sound from digitized audio data, said method comprising the steps of: storing said digitized audio data in memory; creating a kernel mode streaming signal pointing to said stored audio data; using said kernel mode streaming signal for kernel mode enhancement of said data, said kernel mode enhancement comprising real time inverse convolution of said audio data and a series of time coefficients derived from frequency coefficients inversely related to the response of the human ear across a range of frequencies; and using said audio data, enhanced as aforesaid, for kernel mode generation of processed sound.
29. A method according to claim 28, wherein said enhancement of said audio data is performed by an intercepting component driver in a device driver or a separate software module.
30. A method according to claim 28, wherein the steps are preformed in a digital computer having at least a 32-bit Windows operating system.
31. A method of processing sound comprising the steps of:
1. generating a set of frequency coefficients inversely related to the responsiveness of the human ear,
2. converting said frequency coefficients to time coefficients,
3. sampling said sound to generate an endless series of raw audio data,
4. storing said raw audio data,
5. generating a series of addresses indicating the locations of the stored data,
6. reading said raw audio data,
7. generating a series of processed audio data by convolving said raw audio samples against said time coefficients, and
8. using said processed audio data to drive a sound generator.
32. A method according to claim 31 wherein said steps 4 through 7 are performed by a digital computer operating in kernel mode.
PCT/US2001/000224 2000-01-05 2001-01-04 Audio device driver WO2001050598A2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU26284/01A AU2628401A (en) 2000-01-05 2001-01-04 Audio device driver

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17439700P 2000-01-05 2000-01-05
US60/174,397 2000-01-05

Publications (2)

Publication Number Publication Date
WO2001050598A2 true WO2001050598A2 (en) 2001-07-12
WO2001050598A3 WO2001050598A3 (en) 2002-01-31

Family

ID=22636011

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2001/000224 WO2001050598A2 (en) 2000-01-05 2001-01-04 Audio device driver

Country Status (2)

Country Link
AU (1) AU2628401A (en)
WO (1) WO2001050598A2 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1591884A2 (en) 2004-04-28 2005-11-02 Sony Corporation Information processing apparatus, information processing method, and program
WO2007102805A1 (en) * 2006-03-06 2007-09-13 Razer Usa Ltd Enhanced 3d sound

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101501625B (en) * 2006-03-06 2017-08-01 雷蛇(美国)有限公司 Enhanced 3D sound

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5406634A (en) * 1993-03-16 1995-04-11 Peak Audio, Inc. Intelligent speaker unit for speaker system network
EP0817045A2 (en) * 1996-07-01 1998-01-07 Sun Microsystems, Inc. Mixing and splitting multiple independent audio data streams in kernel space
US5881317A (en) * 1996-09-30 1999-03-09 Intel Corporation Adaptive operation of audio peripherals based on the functionality of analog audio interface

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5406634A (en) * 1993-03-16 1995-04-11 Peak Audio, Inc. Intelligent speaker unit for speaker system network
EP0817045A2 (en) * 1996-07-01 1998-01-07 Sun Microsystems, Inc. Mixing and splitting multiple independent audio data streams in kernel space
US5881317A (en) * 1996-09-30 1999-03-09 Intel Corporation Adaptive operation of audio peripherals based on the functionality of analog audio interface

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1591884A2 (en) 2004-04-28 2005-11-02 Sony Corporation Information processing apparatus, information processing method, and program
EP1591884A3 (en) * 2004-04-28 2008-12-10 Sony Corporation Information processing apparatus, information processing method, and program
WO2007102805A1 (en) * 2006-03-06 2007-09-13 Razer Usa Ltd Enhanced 3d sound
US8826133B2 (en) 2006-03-06 2014-09-02 Razer (Asia-Pacific) Pte. Ltd. Enhanced 3D sound
DE112006003794B4 (en) * 2006-03-06 2015-11-26 Razer (Asia-Pacific) Pte. Ltd. Improved 3D sound

Also Published As

Publication number Publication date
AU2628401A (en) 2001-07-16
WO2001050598A3 (en) 2002-01-31

Similar Documents

Publication Publication Date Title
US5668996A (en) Rendering CD redbook audio using alternative storage locations and formats
EP0685824B1 (en) Data decompression and transfer system
CN1650528B (en) Multi-channel downmixing device
JP6484605B2 (en) Automatic multi-channel music mix from multiple audio stems
US7461175B2 (en) Information processing apparatus, information processing method, and program
US6055502A (en) Adaptive audio signal compression computer system and method
JP2001022366A (en) Method and device for embedding electronic watermark in waveform data
US8639370B2 (en) Audio source system and method
JP3393740B2 (en) Surround sound system and method
US8295508B2 (en) Processing an audio signal
JP6751810B2 (en) Voice processing device and voice processing method
US7813823B2 (en) Computer audio system and method
US20070142943A1 (en) Digital security system
JPH05188947A (en) Performance information interface
WO2001050598A2 (en) Audio device driver
JP2001008299A (en) Stereo signal processing unit
US7039477B1 (en) Device and method for processing tone data by controlling sampling rate
US20040102861A1 (en) Computer system and method controlling audio signal outputs of application programs
JP3275133B2 (en) Stereo effect enhancement device with central sound image circuit
JP4019759B2 (en) Reverberation imparting method, impulse response supply control method, reverberation imparting device, impulse response correcting device, program, and recording medium recording the program
JPH0562996B2 (en)
US6184453B1 (en) Tone generator, electronic instrument, and storage medium
US8767969B1 (en) Process for removing voice from stereo recordings
WO2021059718A1 (en) Signal processing device, signal processing method, and program
Chang Upgrade of sonar analysis software for TIAPS data

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A2

Designated state(s): AE AL AM AT AU AZ BA BB BG BR BY CA CH CN CR CU CZ DE DK DM EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG US UZ VN YU ZA ZW

AL Designated countries for regional patents

Kind code of ref document: A2

Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE TR BF BJ CF CG CI CM GA GN GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
DFPE Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101)
AK Designated states

Kind code of ref document: A3

Designated state(s): AE AL AM AT AU AZ BA BB BG BR BY CA CH CN CR CU CZ DE DK DM EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG US UZ VN YU ZA ZW

AL Designated countries for regional patents

Kind code of ref document: A3

Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE TR BF BJ CF CG CI CM GA GN GW ML MR NE SN TD TG

REG Reference to national code

Ref country code: DE

Ref legal event code: 8642

122 Ep: pct application non-entry in european phase
NENP Non-entry into the national phase in:

Ref country code: JP