A SYSTEM AND METHOD FOR COMPRESSION AND DECOMPRESSION OF AUDIO SIGNALS

Abstract: A speech compression/decompression system and method which do not require special hardware are described. The compression unit represents an input audio signal (19) as a collection of parameters, wherein the parameters are a remnant excitation pulse sequence (27), a set of spectral coefficients (A) and a set of pitch parameters (B & C). The decompression unit utilizes the pitch parameters and remnant excitation pulse sequence to produce a reconstructed excitation signal. The decompression unit also utilizes the spectral coefficients to filter the reconstructed excitation signal into a speech waveform. The compression unit includes a short-term predictor (22), a two-step long-term predictor (24) and a multipulse analyzer (26).

Description: A SYSTEM AND METHOD FOR COMPRESSION AND DECOMPRESSION OF AUDIO SIGNALS FIELD OF THE INVENTION The present invention relates to speech signal processing. BACKGROUND OF THE INVENTION Speech signals are complex and can be broken down into elements of the words spoken, the pitch of intonation and other elements which identify each speaker. Digitizing a speech signal without losing some of the information included therein requires a high sampling rate, typically of 8KHz. Therefore, a speech signal just a few seconds long typically comprises a large number of samples. Much effort in the prior art has been expended in trying to compress speech signals so that they can be easily transmitted and stored. The compressed signals, however, must maintain the information in the original speech signals or else their decompressed versions will be unintelligible to the body (human or computer) which hears them. Typically, the compression is done by analyzing the speech signal and only utilizing the "relevant" portions for storage or transmission. If the body is a computer which receives speech commands and must respond accordingly, the quality of . the reproduction or of the analysis must be high or else the computer will be unable to understand the command and, as a result, will respond incorrectly. As a result of the need for high quality analysis, a large number of analysis methods have been developed, none of which, by themselves, provide the ideal combination of high compression ratio and high quality reproduction. Each of these methods works on a frame of the signal, typically of 80 - 240 samples long. Some of these methods are: linear prediction analysis which produces the spectrum of the frame as linear prediction coefficients (LPC) , pitch estimation methods which determine the pitch of the speech in the frame, vector quantization methods which code a multiplicity of wave shapes and define the frame as a combination of the pre-defined wave shapes, and multi-pulse analysis which defines the frame as an empty signal having a pre¬ determined number of spikes and determines where the spikes exist and what their amplitudes are. These methods, and the many others which are also commonly utilized, are described in the book by Sadaoki Furui, Digital Speech Processing. Synthesis and Recognition. Marcel Dekker Inc. New York, New York, 1989. This book and the articles in its bibliography are incorporated herein by reference. In many of the methods, the more datapoints used to describe the frame, the better the analysis. However, the result is not very compressed. Furthermore, the analysis methods described hereinabove are computation-intensive and typically require special hardware, such as a digital signal processor (DSP) chip, in order to perform in real- or near-real-time. Such a requirement causes speech recognition systems and digital sound reproduction systems to be expensive. SUMMARY OF THE PRESENT INVENTION The present invention provides a speech compression/decompression system and method which does not require special hardware. There is therefore provided, in accordance with an embodiment of the present invention, the system includes an audio signal compression unit for representing an input audio signal as a collection of parameters and a decompression unit for utilizing the pitch parameters and remnant excitation pulse sequence to produce a reconstructed excitation signal and for utilizing the spectral coefficients to filter the reconstructed excitation signal into a speech waveform. The parameters are a remnant excitation pulse sequence, a set of spectral coefficients and a set of pitch parameters. Additionally, in accordance with the present invention, the decompression unit includes a) a first-in-first-out (FIFO) buffer in which are stored residual excitation signals, b) a selector for utilizing the pitch parameters to reconstruct the reconstructed excitation signal from portions of the stored residual excitation signals, for linearly combining the reconstructed excitation signal with a remnant excitation signal formed at least from the remnant excitation pulse sequence into a residual excitation signal and for providing the residual excitation signal to the FIFO buffer and c) a filter operating with the spectral coefficients to filter the residual excitation signal into the speech waveform. The decompression unit typically additionally includes a buffer control unit for adding the reconstructed excitation signal into the FIFO buffer. The decompression unit additionally includes a post-filter which filters the speech waveform. Moreover, in accordance with the present invention, the compression unit includes a) a short-term predictor responsive to the input audio signal for determining eight spectral coefficients and for generating a residual signal by utilizing the spectral coefficients to filter out short-term correlations in the input audio signal and b) a two-step long-term predictor, operative on the residual signal, for determining the pitch parameters, wherein the pitch parameters are formed of a rough estimate and a second-order correction, and for generating a remnant signal by utilizing the pitch parameters to filter out long-term correlations in the residual signal. The compression unit typically also includes a multi-pulse analyzer for producing the remnant excitation pulse sequence from the remnant signal. In one embodiment, the multi-pulse analyzer generates seven pulses and a gain to represent the remnant excitation pulse sequence. Moreover, in accordance with the present invention, the compression unit includes coding means for providing coded versions of the following parameters: the spectral coefficients, the rough pitch estimate, the second-order correction, a gain and the remnant excitation pulse sequence and the decompression unit comprises a decoder for decoding the coded parameters. There is also provided, in accordance with a second embodiment of the present invention, the system includes a) an audio signal compression unit coupled to an input audio signal and having an remnant excitation pulse sequence output line, a spectral coefficient output line and a pitch parameters output line and b) a decompression unit having an remnant excitation pulse sequence input line, a spectral coefficient input line, a pitch parameters input line and a speech waveform output line. Additionally, in accordance with the second embodiment, the decompression unit includes a) a first-in-first-out (FIFO) buffer in which are stored residual excitation signals, b) a selector for utilizing the pitch parameters to reconstruct the reconstructed excitation signal from portions of the stored residual excitation signals, for linearly combining the reconstructed excitation signal with a remnant excitation signal formed at least from the remnant excitation pulse sequence into a residual excitation signal and for providing the residual excitation signal to the FIFO buffer and c) a filter operating with the spectral coefficients to filter the residual excitation signal into the speech waveform. Finally, the method performs the operations of the elements of the system. BRIEF DESCRIPTION OF THE DRAWINGS AND APPENDICES The present invention will be understood and appreciated more fully from the following detailed description taken in conjunction with the drawings in which: Fig. 1 is a block diagram illustration of a system for speech compression and decompression, constructed and operative in accordance with a preferred embodiment of the present invention; Fig. 2 is a flow chart illustration of the operations of a linear predictor forming part of the system of Fig. l; Fig. 3A is a graphical illustration of an input speech signal; Fig. 3B is a graphical illustration of a speech signal after noise shaping; Fig. 3C is a graphical illustration of a speech signal after short- and long-term correlations have been removed; Fig. 3D is a graphical illustration of an excitation signal modeling the signal of Fig. 3B; Fig. 4A is a schematic illustration of a history buffer forming part of the system of Fig. 1; Fig. 4B is a flow chart illustration of the operations of a long-term pitch predictor forming part of the system of Fig. l; Fig. 5 is a flow chart illustration of the operations of a multi-pulse analyzer forming part of the system of Fig. 1; and Appendix A is source code illustrating one exemplary implementation of the system of the present invention. DETAILED DESCRIPTION OF A PREFERRED EMBODIMENT Reference is now made to Fig. 1 which illustrates, in block diagram format, the compression/decompression system of the present invention. The present invention typically comprises a compression unit 10 for compressing the speech signal and a decompression unit 12 for reconstructing the compressed signal, both units operating on a personal computer (PC) to which no special hardware is added. The compression unit 10 includes a plurality of speech analyzing units, most of which require more than a nominal execution time. The decompression unit 12, on the other hand, includes only a few speech reconstruction units, only one of which requires more than a nominal execution time. Therefore, the decompression unit 12 can operate in real-time on a PC without the addition of special hardware. The system of the present invention is useful in systems where it is desired to store a speech signal for later reconstruction. For example, it is useful in multi-media systems which augment a digitally stored block of text or an image with speech. For these systems, the time it takes to store the speech signal, while important, is not critical. However, since the speech is to be reconstructed and provided to the human ear, the reconstruction must occur in real-time. The system of the present invention is now briefly described. The compression unit 10 typically comprises a framer 20, a short-term predictor filter 22, a two-step long-term predictor 24 and a multi-pulse analyzer 26. The framer 20 breaks an input digital signal into large frames, typically of 240 samples each. The short-term predictor filter 22 determines the spectral coefficients which define the spectral envelope of each large frame and, using the spectral coefficients, creates a noise shaping filter with which to filter each frame. The resultant signal, labeled 23, is known hereinafter as a "residual" signal. The two-step long-term predictor 24 first analyses the residual signal and produces from it a rough estimate of the average pitch of the large frame. The predictor 24 then d etermines a long-term prediction which models the fine structure in the spectra of the speech in a subframe, typically of 60 samples. The resultant modelled waveform is subtracted from the signal in the subframe thereby producing a signal, labeled 27, known hereinafter as the "remnant" signal. The multi-pulse analyzer 26 characterizes the shape of the remnant signal as a sequence of pulses at a plurality of locations and of quantized amplitudes. The pulse sequence is known hereinafter as a "remnant excitation" pulse sequence. The long-term predictor 24 also computes an excitation signal 29, known hereinafter as the "residual" excitation signal, utilizing the remnant excitation pulse sequence and the long term prediction. The residual excitation signal models the residual signal. The spectral coefficients, pitch estimate, long term prediction and pulses are typically, though not necessarily, encoded by the units which produce them and the coded values are provided to the decompression unit 12. The coded values represent a reduction by a factor of 8- 10 in the size of a frame of the input speech signal, as will be detailed hereinbelow. The decompression unit 12 typically includes a decoder 30, a selector 31, a history buffer 32 and an LPC synthesis unit 34 and a post-filter 36. The decoder 30 decodes the coded values received from the compression unit 10 and provides the resultant decoded data to the relevant units 31 - 36, as explained in more detail hereinbelow. The history buffer 32 stores previous residual excitation signals up to the present moment and the selector 31 utilizes the decoded pitch estimate and long term prediction to select relevant portions of the data in the history buffer 32. The selected portions of the data are added to the decoded remnant excitation pulse sequence and the result is stored in the history buffer 32, as a new residual excitation signal. The new residual excitation signal is also provided to the LPC synthesis unit 34 which, using the decoded spectral coefficients, produces a speech waveform. The post-filter 36 then distorts the waveform, also using the decoded spectral coef f icients, to reproduce the input speech signal in a waywhich is pleasing to the human ear. It will be appreciated that the compression unit 10 produces parameters so that the decompression unit 12 can build the residual excitation signal with minimal microprocessor execution time. The operation of the compression/decompression system of the present invention will now be discussed in detail, with reference to Fig. l and to Figs. 2 - 5 which are useful in understanding the operation of the system of the present invention. Except where otherwise noted, the methods utilized are described in the book Digital Speech Processing. Synthesis and Recognition, already incorporated herein by reference. Although not illustrated, prior to operation by the system of the present invention, the speech signal is accepted and sampled, or digitized, using any suitable conventional speech digitization apparatus, such as a conventional analog-to-digital (A/D) converter. The digitized speech is partitioned into large frames by framer 20. For example, in one embodiment, every 240 digitized samples are a single large frame. Each large frame from framer 20 is sequentially passed to the short-term predictor 22. A linear prediction unit 40 in short-term predictor 22 determines the spectral envelope of the signal within each large frame. A noise shaper 42 in short-term predictor 22 utilizes the spectral coefficients determined by unit 40 for filtering the signal in the large frame thereby to uncorrelate the energy in the signal and to reduce the effect of the noise in the signal. Fig. 2 illustrates one embodiment of the process performed by the linear prediction unit 40. First, in linear predication step 50, the digital signal in the large frame is operated on to generate eight linear prediction coefficients (LPC) which represent the spectral envelope of the large frame. To do so, a Hamming window ' is first applied to each large frame, after which nine autocorrelation coefficients are computed using Ridge regression. The autocorrelation coefficients are modified by a binomial window after which they are operated on by a Schur recursion unit, producing thereby the eight linear prediction coefficients. It is noted that the prior art calculates 10 - 12 linear prediction coefficients and considers that eight coefficients do not accurately describe the spectral envelope. Therefore, the prior art, to the best knowledge of the inventor, failed to recognize that the original signal could be represented with a less accurate LPC model. In step 52 the linear prediction coefficients LPC are converted to their corresponding Parkor coefficients K. The floating point Parkor coefficients K are then quantized (step 54) into quantized Parkor coefficients Q by non-linear scalar quantizers. Since the Parkor coefficients are not equally important, they are quantized to different numbers of bits, 31 in all, as follows: The quantized Parkor coefficients Q are then transmitted to the decompression unit 12, wherein the term "transmission" herein indicates communication or storage. Since it is desired to have the compression unit 10 operate with the same coefficients as the decompression unit 12, the quantized Parkor coefficients Q are converted into LPC coefficients, in steps 56 and 58 (inverse quantization and inverse Parkor transformation) . The inverse quantization is simply a determination of the values of the quantized coefficients Q. A suitable inverse Parkor transformation is the Durbin-Levinson step-up recursion method. In step 60 a bandwidth widening is performed. The bandwidth widening slightly changes the linear prediction coefficients LPC so that the poles of the filter which they create move slightly towards the center of the complex unit circle. This smooths any sharp and unnatural peaks in the spectral envelope and gives a more realistic spectrum representation. In subframe smoothing (step 62) , a set of coefficients LPC ' are generated for each of a plurality of subframes into which each large frame is to later be partitioned, since the transition between sets of coefficients LPC for adjacent large frames may be sharp. For example, each large frame may be partitioned into four subframes of equal length. For the third and fourth subfr.ames, the coefficients LPC ' may be identical to the coefficients LPC of the large frame to which they belong. For the first and second subframes, interpolated coefficients LPC ' are generated by using a weighted average of the coefficients LPC of the current large frame and of the preceding large frame, wherein the coefficients LPC of the current large frame receive twice the weight of the coefficients LPC of the preceding large frame. The interpolated coefficients LPC ' then undergo stability testing, using a suitable method such as the inverse of the Durbin-Levinson method. It is appreciated that the stability testing method need not be the inverse of the method employed in step 58. If stability testing indicates that an individual set of coefficients LPC' are unstable, then, for that subframe, the original (i.e. not interpolated) coefficients LPC for the large frame to which the subframe belongs, are employed. The linear prediction coefficients LPC ' , which are the same as the spectral coefficients described hereinabove, are then utilized by other elements of the compression unit 10 and the decompression unit 12. The noise shaper 42 preferably takes into account characteristics of human perception of audio signals and, specifically, of human perception of speech signals. Thus, the noise shaper 42 is a filter using the coefficients LPC ' generated in step 62. In the filter, the coefficients LPC' are adjusted such that, when the output of the noise shaper 42 is perceived by a human, the noise in the input signal is maximally masked by the speech itself. For example, a suitable transfer function of a filter for this purpose is: ∑a.z '1 (1) wherein the sum is performed for i = 1 to 8, the a, are the individual coefficients LPC ' , a is a weighting factor typically of value 0.8, and z "1 is a sample in the input digital speech signal i units before the present sample. The noise shaper 42 typically filters the speech signal in accordance with the transfer function provided in equation l. The result is the residual signal 23 which is provided to the two-step long-term predictor 24 as a "target vector". Herein, a signal and the line carrying the signal are given the same reference numeral for convenience. An example of a many frame input speech signal 19 and its corresponding residual signal 23 are provided in Figs. 3A and 3B. As can be seen, the speech signal has a plurality of repetitive spikes 64. The corresponding spikes, labeled 66, in the residual signal 23 of Fig. 3B have a much lower amplitude. The spikes 64 typically are periodic and their frequency is known as the "pitch" of the speech. For the purposes of the discussion hereinbelow, the pitch is defined as the number of samples between any two spikes 64. It will be appreciated that the pitch varies slowly over time and therefore, must continually be determined. The maximum pitch value, corresponding to a low-pitched male, is typically 146 samples l ong. The minimum pitch value, corresponding to a high-pitched female, is typically 20 samples long. The two-step long-term predictor 24 (Fig. 1) typically includes a framer 70, a pitch estimator 72 and its associated first history buffer 74 for performing the first step and a second order pitch predictor (or extractor) 76 and its associated second history buffer 78 for performing the second step. As described in more detail hereinbelow, the framer 70 separates the large frame into four equal subframes, each of 60 samples long. The pitch estimator 72 roughly estimates the pitch of the large frame and encodes the value for output to the decompression unit 12. Since there is a limited range of pitch values, each rough pitch estimate value is given an index and the value of the selected index is the code value. For each subframe, the pitch predictor 76 searches in the close vicinity of the rough pitch estimate to determine lags and gains of a second-order long-term predictor. The pitch predictor 76 then produces a signal, or waveform, which best matches the target vector of the subframe. The lag or gain in the pitch value is encoded for output to the decompression unit 12 and the matched waveform is subtracted from the target vector, via a subtractor 79. The resultant remnant signal 27, from which the short- and long-term correlations have been removed, is provided to the multi-pulse analyzer 26. Specifically, the pitch estimator 72 works as follows: the first history buffer 74 is a first-in-first-out (FIFO) buffer which is as long as the maximum expected pitch length, such as 146 samples. Stored in the buffer 74 are residual signals from previous large frames. The target vector of the large frame is divided into two halves, each of which is cross-correlated with the data stored in the history buffer 74. For each half, an offset providing the largest cross-correlation result is defined as the rough pitch estimate RPITCH for that half. Any suitable correlation technique utilized for determining pitch, such as the normalized correlation method, can be utilized for the ' pitch estimator 72. The pitch estimator 72 encodes the two rough pitch estimates RPITCH as two 7 bit variables (covering the 126 possible pitch length values) and provides the RPITCH values to the pitch predictor 76. The pitch predictor 76 operates on target vectors (residual signals 23) of the length of subframes, where for the first two subframes, it utilizes the first rough pitch estimate and for the second two subframes, it utilizes the second rough pitch estimate. The second history buffer 78 is a FIFO buffer of 146 samples and has stored therein residual excitation signals from prior subframes, as described in more detail hereinbelow. The pitch predictor 76 is of second order and seeks to determine a more refined representation for the pitch than the rough pitch estimate RPITCH. To do so, it operates on a subframe and extends or shrinks the rough pitch estimate RPITCH by a few samples in each direction where, typically, the maximal shift is two samples. Thus, as shown in Fig. 4A, pitch predictor 76 retrieves a subframe starting at the sample which is RPITCH+s samples from an input end 79 of the history buffer 78, where s varies from -2 to 2. The result is a first residual excitation signal A s . Furthermore, since sampling is not exact, interpolation is performed and to that end, a second residual excitation signal B ε , of the same length as A E but shifted one sample earlier in the history buffer, is also retrieved. These operations form the first step, step 80, of the method performed by the pitch predictor 76 which is outlined in Fig. 4B. Specifically, for each of the possible shifts, s, the residual excitation signals A s and B ε are retrieved from the second history buffer 78, after which, in step 82, they are separately filtered by a noise shaping filter, using the coefficients LPC ' , to produce filtered excitation signals A' s and B' s . The pitch predictor 76 not only refines the value for the pitch, but also determines the best interpolation given predetermined interpolation coefficients c k and d k , where k varies from 0 to N, wherein N is typically 25. The coefficients c k and d k are typically empirically determined by analyzing a large sample of speech signals. Thus, in step 84, interpolated signals are generated wherein, in one embodiment, each filtered excitation signal set, A' £ and B' s , is linearly combined with each set of interpolation coefficients. In this embodiment, each interpolated signal is defined as c k A' s + d k B' s . Each interpolated signal is separately correlated (step 86) , via any suitable correlation method, with the subframe target vector and the results stored. In step 88, the interpolated signal with the highest correlation is selected. The resultant values of the shift, s, and the index k, for each subframe, are encoded (step 90) for transmission. In this embodiment, the coded signal is a 7 bit index denoting the selected one of the 25 possible combinations of c k and d k combined with the five possible sizes (-2 - +2) of the shift s. In step 92 the selected combination is reproduced; specifically a "long-term prediction" excitation signal E is produced as follows: E = c A__ + dB s (2) In step 94, the excitation signal E is filtered by a noise shaping filter using the coefficients LPC ' . The resultant vector, denoted herein the "matched vector", is subtracted by subtractor 79 from the target waveform, producing thereby the remnant signal 27, an example of which, for the residual signal 23 of Fig. 3B, is provided in Fig. 3C. It is noted that the short term and long-term correlations have now been removed from the remnant signal 23. What remains are only those elements of the signal which are not similar to anything which has existed in previous input speech frames, and so the name "remnant" signal . It is noted that for rough pitch values of less than the size of a subframe, the last RPITCH+s samples of the history buffer 78 do not produce a subframe of data. In this case, the samp l es retrieved from the history buffer are repeated as many times as is necessary to produce a subframe of data. The multi-pulse analyzer 26 determines the multi-pulse excitation signal which most closely matches the subframe length remnant signal 27. In other words, the remnant signal 27 is modeled as a sum of a plurality of impulse responses, each occurring at a different location within the subframe. Fig. 5 illustrates the operations of the multi-pulse analyzer 26. The energy of the remnant signal 27 is determined in step 100 by summing the squares of the values of each sample in the subframe. The value of the energy is a gain value which is quantized and the index of the quantized value, which in this embodiment is a four bit index, is transmitted. The gain is then utilized, in step 102, to normalize the remnant signal 27 (by dividing each sample in the subframe by the gain value) and to produce thereby a first target vector. The target vector is utilized in a number of later steps. In step 104, the coefficients LPC' are utilized to produce an impulse response signal, which is the response of the noise shaping filter formed from the coefficients LPC ' to a Dirac Delta function located at the first sample of the subframe. In accordance with the present invention, in step 106 the target vector is cross-correlated, via any suitable correlation technique, with a pulse having one of four possible amplitudes, AMP1, AMP2, AMP3 and AMP4, and located at any of the possible sample locations. In one embodiment, AMP1, AMP2, AMP3 and.AMP4 have the values +-0.25 and +-0.75. Each pulse is formed of the impulse response function shifted to a selected sample location having the selected amplitude. • • The pulse providing the best match to the target vector is selected and its amplitude and location are stored, in step 108. In step 110 a waveform of the selected pulse is produced and, in step 112, subtracted from the target vector, thereby producing a new target vector. Steps 106 - 112 are performed a plurality of times for each subframe. In one embodiment, the steps 106 - 112 are performed seven times, wherein for three repetitions, the pulses are located in the lower half of the subframe and for four of them, the pulses are in the upper half of the subframe. The resultant stored sequence of pulses of different amplitudes forms the remnant excitation pulse sequence. Finally, in step 114, the location of the pulses and their amplitudes are encoded for transmission to the decompression unit 12. In one embodiment, two bits are used to indicate the four possible amplitudes of each pulse, 18 bits are utilized to indicate the possible locations of the four pulses in the upper half of the subframe and 15 bits are utilized to indicate the possible locations of the three pulses in the lower half of the subframe. Thus, in this embodiment, 7x2 + 18 + 15 = 47 bits are utilized, per subframe, to encode the remnant excitation pulse sequence. The remnant excitation pulse sequence is formed into a remnant excitation signal by placing pulses at the selected locations, wherein each pulse is multiplied by its corresponding amplitude and the gain. The remnant excitation signal is then provided to a summer 120 (Fig. 1) , to be added to the long-term prediction excitation signal E (Fig. 4B) produced by the pitch predictor 76. The resultant residual excitation signal 29, illustrated in Fig. 3D, is placed into the beginning of the second history buffer 78, shifting the data stored therein and removing therefrom the oldest subframe. Each large frame is compressed into 277 bits as follows: 31 bits describing the quantized Parkor coefficients Q, 7x2 bits for the rough pitch, 7x4 for the shift s and index k, 4x4 for the gain and 47x4 for the remnant excitation pulse sequence. For input speech of 8bits per sample and 240 samples per large frame, the present invention represents a compression ratio of approximately 8:1. The decoder 30 (Fig. 1) of the decompression unit 12 receives the coded parameters and decodes them. For the rough and refined pitch estimates, the gain and the remnant excitation pulse sequence, this involves looking up the codes in lookup tables. The lookup tables associate the received indices with the values they code. For the Parkor coefficients Q, the decoding involves performing steps 56 - 62 (Fig. 2) of the linear prediction method, producing thereby the same spectral coefficients LPC ' which are utilized in the compression unit 10. The selector 31 of decompression unit 12 retrieves a first residual excitation signal A s from the history buffer 32 (stored therein as described hereinbelow) , starting at the sample which is the decoded RPITCH+s samples from the input end of history buffer 32. A second residual excitation signal B s , shifted one sample earlier in the history buffer, is also retrieved. The residual excitation signals A s and B s are the same as those selected in the pitch predictor 76. Utilizing the decoded ck and dk, the selector 31 produces the long-term prediction excitation signal E, as defined in equation 2 hereinabove. The new residual excitation signal 123, produced by adding, in a summer 122 (Fig. 1) , the long-term prediction excitation signal E to a remnant excitation signal, formed by placing pulses at the selected locations, wherein each pulse is multiplied by its corresponding amplitude and the gain. The residual excitation signal 123 is then filtered by the LPC synthesis filter 34 whose result is then filtered by the post- filter 36. The new residual excitation signal 123 is also placed into the beginning of the history buffer 32, shifting the data stored therein and removing therefrom the oldest subframe. The transfer function for the LPC synthesis filter 34 (3) The transfer function for the post filter 36 is: 1 + Σa ; G i z "i (l - K τ ) (4) where the a A are the coefficients LPC', G is typically 0.55, ϋ. is typically 0.55 and K x is the first Parkor coefficient. The result is a reconstructed signal which approximates the input audio signal and which is produced within real-time. Appendix A, which forms part of the present application, is an exemplary assembly language implementation of the compression/decompression system of the present invention. It operates on a personal computer having an 80386 microprocessor manufactured by Intel Corporation of the USA. The system can also run on personal computers having more powerful microprocessors . It will be appreciated by persons skilled in the art that the present invention is not limited to what has been particularly shown and described hereinabove. Rather the scope of the present invention is defined by the claims which follow: APPENDIX A MASM6=TRUE DEBUG=NO PROFILE=NO NAME = tsd EXT = dll OPTZ = -W4 -Alfw -G2s -GD -Fa -FPa DEFZ = -DWINlβ -DWIN31 -DSTRICT -D WINDLL •IF "$(PROFILE) " == "NO" OBJ1 = codecini.obj encoder.obj dec fix.obj .ELSE OBJ1 = codecini.obj encoder.obj dec_fix.obj debug.obj !ENDIF 0BJ2 = Ipc.obj prg.obj exc.obj filt_sx.obj filt2_sx.obj filt3_sx.obj fndmp_ OBJS __ $(OBJl) $(0BJ2) LIBS = mdllcew libw mmsystem !IF ("$(DEBUG) n == "NO") && ("$ (PROFILE) " == "NO") DEF = $(DEFZ) IELSEIF n $ (PROFILE) " == "NO" DEF -= -DDEBUG $(DEFZ) .ELSE DEF = -DDEBUG -DPROFILE $(DEFZ) JENDIF !IF ("$ (DEBUG)" == "NO") ASOPT = /Fl /Sa CCOPT = /Oxwt RCOPT LNOPT .ELSE ASOPT .= -Zi /Fl /Sa CCOPT = -Zid /Oxwt RCOPT LNOPT = /CO/LI JENDIF !IF n $(MASM6)" == "TRUE" # masm 6.x AS 4= ml -DMASM6 -I. /Zm /c $(DEF) -Cx $ (ASOPT) 'ELSE AS = masm $ (DEF) -Mx $ (ASOPT) JENDIF CC = cl $(DEF) -c $(OPTZ) -Zpe $ (CCOPT) RC = re $(DEF) -v $ (RCOPT) LN __ link /NOPACKC/NOE/NOD/A:16/MAP $ (LNOPT) .asm.obj $(AS) $* ; .c.obj $ (CC) $*.C # # RULES # all: $(NAME) .${EXT) Smapsym /n $ (NAME) .map copy $(NAME) .$ (EXT) d:\bin copy $(NAME) .sym d:\bin copy $ (NAME) .$ (EXT) f:\bin copy $(NAME) .sym f:\bin $(NAME) .$(EXT) $(OBJS) tsd.def $ (NAME) .res $ (LN) ®« $(0BJ1)+ $(0BJ2) $(NAME) .$(EXT) $(NAME) .map, $(LIBS) , tsd.def << $(RC) -t -31 $(®B).res $(®B).$(EXT) $(NAME).res: tsd.rc ${RC) -r -z -Fo $ 1) .res tsd.rc # # SEGMENTATION # SEGC = $(CC) -NT TSEG $*.c !IF "$(MASM6)" == "TRUE" # masm 6.x SEGA = $(AS) -DSEGNAME=TSEG -Ta $*.asm .ELSE # masm- 5.x SEGA = $(AS) -DSEGNAME=TSEG $* ; 1ENDIF fndmp_sx.obj $ (SEGA:TSEG=_TEXT) cnst_exc.obj $ (SEGA:TSEG=_TEXT) dot_prod.obj $ (SEGA:TSEG=_TEXT) $(NAME) .obj $ (SEGC:TSEG=CODEC TEXT) # DEPENDENCIES # codecini.obj : codecini.asm !IF "$ (PROFILE) " == "NO" .ELSE debug.obj : debug.c •ENDIF dec_fix.obj : dec_fix.asm encoder.obj : encoder.asm prg.obj : prg.asm exc.obj : exc.asm lpc.obj : lpc.asm filt_sx.obj : filt_sx.asm filt2_sx.obj filt2_sx.asm filt3_sx.obj filt3_sx.asm fndmp_sx.obj fndmp~sx.asm cns _exc.obj cns _exc.asm dot_prod.obj dot_prod.asm $(NAME) .obj:. $ (NAME) .c $ (NAME) .h codec.h debug.h # # MISC. STUFF # clean: del $(NAME) .$(EXT) del *.cod del * .err del *.res del *.obj del *.map del *.sym del *.lst LIBRARY TSD DESCRIPTION 'DSP Group TrueSpeech(TM) CODEC Library' EXETYPE WINDOWS PROTMODE CODE MOVEABLE DISCARDABLE LOADONCALL DATA SINGLE MOVEABLE PRELOAD SEGMENTS INIT_TEXT MOVEABLE DISCARDABLE LOADONCALL _TEXT MOVEABLE DISCARDABLE LOADONCALL CODEC TEXT MOVEABLE DISCARDABLE LOADONCALL EXPORTS WEP TrueSpeech_Version ®10 TrueSpeech_Init ®11 TrueSpeech_Term ®12 TrueSpeec _Encod ®13 TrueSpeech_Decod ®14 TrueSpeech_Reset ®15 HEAPSIZE 8000 #include <windows.h> #include <ver. > #define OFFICIAL 0 #define FINAL 0 #define MMVERSION 1 #define MMREVISION 0 #define MMRELEASE 7 #if defined(DEBUG_RETAIL) #define VERSIONSTR "TrueSpeech(TM) Retail Debug Version 1.00.0 #elif defined(DEBUG) #define VERSIONSTR "TrueSpeech(TM) Internal Debug Version 1.00 #else #define VERSIONSTR "1.00\0" #endif // // // // #define VERSIONCOMPANYNAME "DSP Group, lnc.\0" #define VERSIONPRODUCTNAME "TrueSpeech Software CODEC\0" tdefine VERSIONCOPYRIGHT "Copyright * 1993 DSP Group, lnc.\0" #define VERSIONTRADEMARKS "TrueSpeech is a trademark of \nDSP Group, * Version flags */ #ifndef OFFICIAL #def ' ine VER_PRIVATEBUILD VS_FF_PRIVATEBUILD #else #define VER_PRIVATEBUILD 0 #endif #ifndef FINAL #define VER_PRERELEASE VS FF PRERELEASE #else #define VER_PRERELEASE #endif #if defined(DEBUG_RETAIL) #define VER_DEBUG VS _FF_DEBUG #elif defined(DEBUG) #define VER_DEBUG VS_FF_DEBUG #else #define VER_DEBUG 0 #endif #define VERSIONFLAGS (VER_PRIVATEBUILD | VER_PRERELEASE | VER_DEBUG) #define VERSIONFILEFLAGSMASK 0x0030003FL ii- TS // // // II- #ifdef TRUESPEECH_DECODE_ONLY #define VERSIONNAME "TSD???.DLL\0" #define VERSIONDESCRIPTION "DSP Group TrueSpeech(TM) Audio Decoder\0" #else #define VERSIONNAME "TSD.DLL\0" #define VERSIONDESCRIPTION "DSP Group TrueSpeech(TM) Audio CODEC\0" #endif #define VERSIONTYPE VFT_DLL #define VERSIONSUBTYPE VFT2 UNKNOWN ti¬ ll II II II II- VS_VERSION_INFO VERSIONINFO FILEVERSION MMVERSION, MMREVISION, 0 , MMRELEASE PRODUCTVERSION MMVERSION, MMREVISION, 0 , MMRELEASE FILEFLAGSMASK VERSIONFILEFLAGSMASK FILEFLAGS VERSIONFLAGS FILEOS VOS_DOS_WINDOWS16 FILETYPE VERSIONTYPE FILESUBTYPE VERSIONSUBTYPE BEGIN BLOCK "StringFilelnfo " BEGIN BLOCK " 040904E4 " BEGIN VALUE "CompanyNa e " , VERSIONCOMPANYNAME VALUE "FileDescription" , VERSIONDESCRIPTION VALUE "FileVersion" , VERSIONSTR VALUE " IntemalName" , VERSIONNAME VALUE "Legal Copyright " , VERSIONCOPYRIGHT VALUE "OriginalFilename " , VERSIONNAME VALUE "ProductName " , VERSIONPRODUCTNAME VALUE "Product Version" , VERSIONSTR VALUE "LegalTrademarks " , VERSIONTRADEMARKS END END BLOCK "VarFilelnfo " BEGIN // // the following line should be extended for localized versions // VALUE "Translation", 0x409, 1252 END END TITLE encoder.c .286p INCLUDELIB LLIBCA ' INCLUDELIB OLDNAMES. IB _TEXT SEGMENT WORD PUBLIC CODE' _TEXT ENDS _DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS CONST SEGMENT WORD PUBLIC 'CONST' CONST ENDS BSS SEGMENT WORD PUBLIC 'BSS' ~BSS ENDS DGROUP GROUP CONST, _BSS, DATA ASSUME DS: DGROUP ASSUME SS: NOTHING EXTRN _Pitch_Predictor:FAR EXTRN _Find_MpEx:FAR EXTRN _Construct_Excitation_l:FAR EXTRN _ABSDIFF_Dot_Prod:FAR EXTRN _Comp_Corr:FAR EXTRN _Solve_Shur:FAR EXTRN _Quantize_Parkors:FAR EXTRN _Decode_Parkors:FAR EXTRN _Parkors_To_Lpc:FAR EXTRN _Compute_Frame_Lpc:FAR EXTRN aFlmul:FAR _BSS SEGMENT $S3286_?SyntDelay®?l??Syntesize®®9®9 DW 08H DUP (?) _BSS ENDS ΓEXT SEGMENT ASSUME CS: _TEXT PUBLIC TRUESPEECH_ENCOD TRUESPEECH ENCOD PROC FAR SJCC727 : les . bx, DWORD PTR [bp-8] push ds lea di.WORD PTR [bx+3042] lea si,WORD PTR [bp-52] mov ax,ss mov ds,ax ASSUME DS: NOTHING mov cx,8 rep movsw pop ds ASSUME DS: DGROUP les bx, DWORD PTR [bp-8] mov al , BYTE PTR es : [bx+3166] les bx, DWORD PTR [bp-18] xor al , BYTE PTR es : [bx] and a , 1 sub dx, dx xor WORD PTR es : [bx] , ax xor WORD PTR es : [bx+2] , dx mov ax, WORD PTR es : [bx] les bx, DWORD PTR [bp-8 ] mov cx,WORD PTR es : [bx+3106] add cx, cx xor al , cl and ax, 62 les bx, DWORD PTR [fcp-18] xor WORD PTR es : [bx] , ax xor WORD PTR es : [bx+2 ] , dx mov ax, es les si,DWORD PTR [bp-8] mov dx,es mov cx,WORD PTR es: [si+3108] mov es,ax shl cx,6 xor cx, W0RD PTR es : [bx] and cx, 1984 sub di , di xor WORD PTR es : [bx] , cx xor WORD PTR es : [bx+2] , di mov cx, WORD PTR es : [bx] mov es , dx mov di.WORD PTR es:[si+3110] shl di,11 mov ax,di xor ch,ah and cx,30720 sub ax,ax mov bx,es les di,DWORD PTR [bp-18] xor WORD PTR es: [di] ,cx xor WORD PTR es: [di+2] ,ax mov cx,es mov es,bx mov ax,WORD PTR es:[si+3112] cwd shr dx,l rcr ax,l rcr dx,1 • xchg dx,ax and ax,-32768 mov es,c xor ax,WORD PTR es:[di] xor dx,WORD PTR es: [di+2] and ax, -32768 and dx,7 xor WORD PTR es : [di] , ax xor WORD PTR es : [di+2] , dx les bx, DWORD PTR [bp-8] mov si , cx mov ax,WORD PTR es:[bx+3114] cwd shl ax,3 mov cx,ax sub dx,dx mov ax,es mov es,si xor dx,W0RD PTR es:[di] xor cx,WORD PTR es:[di+2] mov WORD PTR [bp-862],dx mov WORD PTR [bp-860],cx mov es,ax mov ax, WORD PTR es : [bx+3120] and cx,120 sub dx,dx mov es,si xor WORD PTR es: [di] ,dx xor WORD PTR es : [di+2] ,cx mov cx,WORD PTR es:[di+2] mov es,WORD PTR [bp-6] mov dx,ax mov ax, WORD PTR es: [bx+3116] mov WORD PTR [bp-876] ,dx cwd shl ax, 7 xor cx,ax and cx,896 sub ax, ax mov es,si xor WORD PTR es: [di] ,ax xor WORD PTR es : [di+2] , cx mov ax, WORD PTR es: [di+2] mov es,WORD PTR [bp-6] mov cx,ax mov ax, WORD PTR es: [bx+3118] cwd shl ax, 10 xor cx,ax and cx,7168 sub ax, ax mov es,si xor WORD PTR es: [di] ,ax xor WORD PTR es: [di+2] , cx mov ax, WORD PTR [bp-876] cwd shl ax,13 mov dx,ax sub cx.cx mov bx,cx mov si,ax xor cx,WORD PTR es: [di] xor dx,WORD PTR es: [di+2] and dh,31 xor bx,cx xor si,dx mov WORD PTR es: [di] ,bx mov WORD PTR es: [di+2] ,si mov al,BYTE PTR es: [di+4] les bx, DWORD PTR [bp-8] mov cx,ax mov ax,WORD PTR es: [bx+3122] xor cl,BYTE PTR es: [bx+3126] and cx,127 sub dx,dx les bx, DWORD PTR [bp-18] xor WORD PTR es: [bx+4] ,cx xor WORD PTR es: [bx+6] ,dx mov cx,es les si, DWORD PTR [bp-8] mov di,es mov dx,WORD PTR es:[si+3128] mov es,cx shl dx,7 xor dx,WORD PTR es: [bx+4] and dx,1625δ sub cx,cx xor WORD PTR es: [bx+4] ,dx xor WORD PTR es: [bx+6] ,cx mov WORD PTR [bp-880],bx mov WORD PTR [bp-878] ,es mov es,di mov cx,ax mov ax, WORD PTR es: [si+3132] cwd shl ax, 5 mov dx,ax mov ax, WORD PTR es: [si+3130] mov bx,dx cwd shr dx,l rcr ax,i rcr dx,l rcr ax,l rcr dx,l xchg dx,ax and ax, -16384 mov WORD PTR [bp-882] ,bx les bx, DWORD PTR [bp-880] xor ax, WORD PTR es: [bx+4] xor dx,WORD PTR es: [bx+6] and ax, -16384 and dx,31 xor WORD PTR es: [bx+4] ,ax xor WORD PTR es: [bx+6] ,dx mov ax, WORD PTR es: [bx+6] xor ax, WORD PTR [bp-882] and ax, 4064 sub dx,dx xor WORD PTR es: [bx+4] ,dx xor WORD PTR es: [bx+6] ,ax mov ax,cx and ax, 240 sar ax, 4 cwd shl ax, 12 mov si, ax sub dx,dx mov WORD PTR [bp-886] ,dx mov WORD PTR [bp-884] ,ax xor dx,WORD PTR es: [bx+4] xor si, WORD PTR es: [bx+6] and si, 4095 xor dx,WORD PTR [bp-886] xor si , ax mov WORD PTR es : [bx+4 ] , dx mov WORD PTR es: [bx+6] ,si les bx, DWORD PTR [bp-8] mov ax, WORD PTR es : [bx+3124] les bx, DWORD PTR [bp-880] mov si,es mov dx,WORD PTR es: [bx+8] les di, DWORD PTR [bp-8] xor dx,WORD PTR es: [di+3158] and dh,63 sub di,di xor ax, ax cwd TRUESPEECH_ENCOD ENDP PUBLIC _Read_Frame _Read_Frame PROC FAR enter 1 ,0 push di push si mov bx,l $13135: cmp di,8192 jle $13136 mc bx $13136: $L3333 $F3138 $F3141: mov es,WORD PTR [bp-2] mov ax, WORD PTR es: [bx] mov es,WORD PTR [bp-12] mov WORD PTR es: [di] ,ax mov es,WORD PTR [bp-8] mov si,cx add cx, 2 mov ax, ORD PTR es: [si] mov es,WORD PTR [bp-2] mov si,bx lea di,WORD PTR [bp-102] les bx, DWORD PTR [bp+14] mov WORD PTR [bp-2] ,4 $F3168: mov cx,8 $F3171: _ιne $F3171 $F3174: $F3177: mov dx,WORD PTR [bp+16] mov c , ax mov WORD PTR [bp-22],dx lea bx,WORD PTR [bp-102] mov WORD PTR [bp-36],4 $F3180: $F3183 $F3186: $F3189: $F3192 _Error_Weight ENDP PUBLIC _Pitch_Estimate _Pitch_Estimate PROC FAR enter 538 , 0 push di push si mov WORD PTR [bp-2],0 mov WORD PTR [bp-6],-l mov WORD PTR [bp-4],32767 mov ax,WORD PTR [bp+10] mov dx,WORD PTR [bp+12] push ds lea di,WORD PTR [bp-538] mov si,ax push ss pop es mov ds,dx ASSUME DS: NOTHING mov cx,146 rep movsw pop ds ASSUME DS: DGROUP mov WORD PTR [bp-2] ,143 $13206: cmp WORD PTR [bp-2],22 jge $13207 mov WORD PTR [bp-2],22 $13207: mov ax, WORD PTR [bp+14] mov dx,WORD PTR [bp+16] push ds lea di,WORD PTR [bp-28] mov si , ax _Subtruct_Ring ENDP c amr ~-- iLI 'ϊ - Com P u te_Impulse Resoonce . C ompute_Impulse_Responce PROc " FAR enter 34,0 push di push si mov si, WORD PTR [bp+6] $F3244 mov es,WORD PTR [bp-2] $F3247: mov ax, ORD PTR es:[di] imul WORD PTR ss: [si] add WORD PTR [bp-10] ,ax adc WORD PTR [bp-8] ,dx add si,2 add di,2 dec WORD PTR [bp-6] jne $F3247 mov ax, WORD PTR [bp-10] mov dx,WORD PTR [bp-8] add ah, 8 adc dx, 0 mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx,l rcr ax, 1 sar dx,l rcr ax, 1 sar dx,l rcr ax,l sar dx,l rcr e_X,l les bx, DWORD PTR [bp-14] mov di,7 mov WORD PTR es:[bx],ax lea bx,WORD PTR [bp-20] lea si,WORD PTR [bx-2] mov ax,WORD PTR ss:[si] mov WORD PTR ss: [bx] ,ax sub bx,2 dec di jne $F3250 mov ax, ORD PTR [bp-10] mov dx,WORD PTR [bp-8] • mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx,l rcr ax, l sar dx,l rcr ax, l sar dx, l rcr ax,l sar dx,l rcr ax, 1 mov WORD PTR [bp-34],ax mov bx,WORD PTR [bp-14] add bx,2 dec WORD PTR [bp-16] Compute_Imoulse_Responce ENDP PUBLIC _ϋpdate_Error _Update_Error PROC FAR enter 26,0 55 push di push si mov ax,WORD PTR mov [bp+6] dx,WORD PTR add [bp+8] ax,120 push ds mov si,ax mov ds,dx ASSUME DS: NOTHING les di, DWORD PTR mov tbp+6] cx,86 rep ovsw pop ds ASSUME DS: DGROUP mov ax, WORD PTR add [bp+6] ax, 172 mov WORD PTR [bp mov -18], ax WORD PTR [bp mov -16], dx ax, ORD PTR mov [bp+14] dx,WORD PTR mov fbp+16] WORD PTR [bp mov -22], ax WORD PTR [bp mov -20], dx WORD PTR [bp -24], 60 : les bx, DWORD PTR [bp-22] mov ax, ORD PTR es: [bx] shr dx,l rcr ax, l rcr dx, l rcr ax, l rcr dx, l rcr ax, l • rcr dx, l rcr ax, l rcr dx, l xchg dx, ax and ax, -4096 mov WORD PTR [bp-14],ax mov WORD PTR [bp-12],dx mov ax, WORD PTR [bp+10] mov dx, WORD PTR [bp+12] mov si, ax mov WORD PTR [bp-8],dx mov ax, WORD PTR [bp+18] mov dx,WORD PTR [bp+20] ov WORD PTR [bp-2],dx ov WORD PTR [bp-6],8 ov di , ax $F3271: mov es,WORD PTR [bp-2] mov bx,di add di,2 mov ax,WORD PTR es: [bx] mov es,WORD PTR [bp-8] mov bx,si add si, 2 imul WORD PTR es : [bx] add WORD PTR [bo-14],ax adc WORD PTR [bp-12] ,dx dec WORD PTR [bp-6] jne $F3271 mov ax, ORD PTR [bp-14] mov dx,WORD PTR [bp-12] add ah, 8 adc dx,0 . mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx,l rcr ax,l sar dx,l rcr ax,l sar dx,i rcr ax, 1 sar dx,l rcr ax, 1 les bx, DWORD PTR [bp-18] mov di,7 mov WORD ' PTR es : [bx] , ax mov ax, WORD PTR [bp+18] mov dx,WORD PTR [bp+20] add ax, 14 mov bx, ax mov WORD PTR [bp-2] ,dx mov es,WORD PTR [bp-2] 274: lea si, WORD PTR [bx-2] mov ax, WORD PTR es: [si] mov WORD PTR es : [bx] , ax sub bx, 2 dec di jne $F3274 mov ax, WORD PTR [bp-14] mo dx,WORD PTR [bp-12] mov al,ah mov ah, dl mov dl,dh add dh, dh sbb dh,dh sar dx, l rcr ax, l sar dx. J. rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 les bx, DWORD PTR [bp+18] add WORD PTR [bp-18] , 2 mov WORD PTR es : [bx] , ax add WORD PTR [bp-22] ,2 dec WORD PTR [bp-24] je $JCC4083 jmp $F3268 $JCC4083 pop SI Pop di leave ret _Update_Error ENDP " PUBLIC _Syntesize .Syntesize PROC FAR enter 20,0 push di push si mov ax, WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov WORD PTR [bp-16] ,ax mov WORD PTR [bp - 14 ] , dx mov WORD PTR [bp-18] ,60 $F3288: les bx,DWORD PTR [bp-16] mov ax,WORD PTR es: [bx] cwd ■ shr dx, 1 rcr ax, l rcr dx,l rcr ax, 1 rcr dx,l rcr ax, 1 rcr dx,l rcr ax, 1 rcr dx,l xchg dx,ax and ax, -4096 mov WORD PTR [bp-12],ax mov WORD PTR [bp-10],dx mov mov WORD PTR [bp-2] , OFFSET DGROUP :$S3286_?SyntDelay@?l??Syntesiz ax, WORD PTR [bp+10] mov dx,WORD PTR [bp+12] mov WORD PTR [bp-4],dx mov WC-u3 PTR [bp-8] ,8 mov si, ORD PTR [bp-2] mov di.ax mov $F3291: es,WORD PTR [bp-4] mov bx,di add di,2 mov ax, ORD PTR es: [bx] add si, imul WORD PTR [si-2] add WORD PTR [bp-12] , ax adc WORD PTR [bp-10],dx dec WORD PTR [bp-8] jne $F3291 mov ax, WORD PTR [bD-12] mov dx,WORD PTR [bp-10] add ah, 8 adc dx, 0 mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 mov WORD PTR [bp-12],ax mov WORD PTR [bp-10],dx les bx, DWORD PTR [bp-15] mov di,7 mov WORD PTR es : [bx] , ax mov $F3294: bx, OFFSET DGROUP: $S3286_?SyntDelay@?l??Syntesize @@ 9©9+14 mov ax, WORD PTR [bx-2] mov WORD PTR [bx],ax sub bx,2 dec di jne $F3294 cmp WORD PTR [hp-10] ,0 jl $13297 jg SL3396 cmp WORD PTR jbe [bp-12] ,32767 $13297 $L3396: les bx, DWORD PTR [bp-16] mov WORD PTR es: [bx], 32767 $13297: cmp WORD PTR [bp-10],-l jg $13298 jl $L3397 cmp WORD PTR [bp-12] , -32768 jae $13298 $L3397: les bx, DWORD PTR [bp-16] mov WORD PTR es: [bx] ,-32768 $13298: les bx, DWORD PTR [bp-16] add WORD PTR [bp-16] ,2 mov ax, WORD PTR es: [bx] mov dec WORD PTR $S3286_?SyntDelay@?l??Syntesize @@ 9 @ 9,ax WORD PTR [bp-18] je $JCC4331 jmp $F3288 $JCC4331: pop si pop di leave ret _Syntesize ENDP PUBLIC _Hamming _Hamming PROC FAR enter 10,0 push di push si mov ax, WORD PTR [bp+10] mov dx,WORD PTR [bp+12] mov di,ax mov WORD PTR [bp -8],dx mov ax, WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov si, ax mov WORD PTR [bp- -2],dx mov WORD PTR [bp- -6], 240 3306: mov es.WORD PTR [bp-8] mov bx,di add di,2 mov ax, WORD PTR es:[bχ] mov es,WORD PTR [bp-2] imul WORD PTR es : [si] add ah, 64 adc dx,0 mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx,l rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, l rcr ax, 1 sar dx,l rcr ax, 1 sar dx, 1 rcr ax,1 mov WORD PTR es: [si] ,ax add si,2 dec WORD PTR [bp-6] jne $F3306 pop si pop di leave ret nop _Hamming ENDP PUBLIC _Binom _Binom PROC FAR enter ιo,o push di push si mov ax,WORD PTR [bp + 10] mov dx,WORD PTR [bp + 12] mov di, ax mov WORD PTR [bp-8] , dx mov ax, WORD PTR [bp + 6] mov dx, WORD PTR [bp + 8] mov si,ax mov WORD PTR [bp-2] ,dx mov WORD PTR [bp-6] ,8 3316: mov es,WORD PTR [bp-8] mov bx, di add di , 2 mov ax, WORD PTR es : [bx] mov es , WORD PTR [bp-2 ] imul WORD PTR es : [si] add ah, 64 adc dx, 0 mov al , ah mov ah, dl mov dl , dh add dh,dh sbb dh,dh sar dx,l rcr ax.i sar dx,l rcr ax,ι sar dx,l rcr ax, l sar dx,l rcr ax,l sar dx,l rcr ax,l sar dx, l rcr ax, l sar dx, l rcr ax,l mov WORD PTR es: [si], ax add si , 2 dec WORD PTR [bp-6] jne $F3316 SI di TITLE lpc.c .286p INCLUDELIB LLIBCA INCLUDELIB OLDNAMES.LIB _TEXT SEGMENT WORD PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS CONST SEGMENT WORD PUBLIC 'CONST' CONST ENDS _BSS SEGMENT WORD PUBLIC 'BSS' _BSS ENDS DGROUP GROUP CONST, _BSS, DATA ASSUME DS: DGROUP ASSUME SS : NOTHING EXTRN fltused:ABS EXTRN aFeldw:FAR EXTRN aFfmuls:FAR EXTRN aFsstsp:FAR EXTRN aFfldd:FAR EXTRN aFslds:FAR EXTRN aFssts:FAR EXTRN aFdcvt:FAR EXTRN aFfabs:FAR EXTRN aFfcompp:FAR EXTRN aFsmuls:FAR EXTRN aFfsubdr:FAR EXTRN aFfldl:FAR EXTRN aFfdivr:FAR EXTRN aFfmul:FAR EXTRN aFlmul:FAR . EXTRN aFsadds:FAR EXTRN aFFalshl:FAR EXTRN aFldiv.FAR . _TEXT SEGMENT ASSUME CS : _TΞXT PUBLIC _Comp_Corr _Comp_Corr PROC FAR ,0 push s sub ax, x mov WORD PTR [bp-22],ax mov WORD PTR [bp-24],ax les si,DWORD PTR [bp+10] mov di,240 $F318: mov ax, ORD PTR es: [si] cwd $1321: $F322: mov WORD PTR [bp-24] , ax pop SI 65 mov bx,WORD PTR [bp+10] mov es,WORD PTR [bp-4] 342: mov ax, WORD PTR es: [di] mov si,bx mov WORD PTR [bp-34] [si] ,ax mov WORD PTR [bp-50] [si] ,ax _Solve_Shur ENDP PUBLIC _Quantize_Parkors _Quantize_Parkors PROC FAR enter 42,0 push di push si mov ax, WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov WORD PTR [bp-32],ax mov WORD PTR [bp-30],dX mov ax, WORD PTR [bp+10] mov dx,WORD PTR [bp+12] mov bx, ax mov WORD PTR [bp-20] ,dx mov ax, ORD PTR [bp+18] mov dx,WORD PTR [bp+20] mo WORD PTR [bp-28] ,ax mov WORD PTR [bp-26] ,dx mov ax, WORD PTR [bp+14] mov dx,WORD PTR [bp+16] mov WORD PTR [bp-18] ,ax mov WORD PTR [bp-16] ,dx mov WORD PTR [bp-34] ,8 $F367: mov WORD PTR [bp-10] ,-l mov WORD PTR [bp-8], 32767 xor ax,ax mov WORD PTR [bp-24],ax mov WORD PTR [bD-6],ax les si,DWORD PTR [bp-18] mov dx,1 mov cl,BYTE PTR es: [si] shl dx,cl mov WORD PTR [bp-38],dx cmp dx,ax jle $FB372 les di, DWORD PTR [bp-28] mov ax, WORD PTR es: [di] mov dx,WORD PTR es: [di+2] mov si, ax mov WORD PTR [bp-12],dx mov es.WORD PTR [bp-20] mov ax, WORD PTR es: [bx] cwd . mov WORD PTR [bp-42],ax mov WORD PTR [bp-40],dx mov WORD PTR [bp-22] ,bx mov bx,WORD PTR [bp-6] $F370; $L497: $L498: 71 mov WORD PTR [bp-10] ,ax mov WORD PTR [bp-8] ,dx mov WORD PTR [bp-24] , bx $FC371: _Quantize_Parkors ENDP PUBLIC _Decode_Parkors _Decode_Parkors PROC FAR enter 14 , 0 push di push si $F383 _Decode_Parkors ENDP PUBLIC _Parkors_To_Lpc _Parkors_To_Lpc PROC FAR enter 44,0 push di push si mov si, WORD PTR [bp+10] mov bx,WORD PTR [bp+6] mov ax, 8 mov es.WORD PTR [bp+12] sub ax, WORD PTR es : [si] sar ax, 3 mov es,WORD PTR [bp+8] mov WORD PTR es : [bx] , ax mov WORD PTR [bp-14] ,ax $F398: _Parkors_To_Lpc ENDP PUBLIC _Compute_Frame_Lpc _Compute_Frame_Lpc PROC FAR enter 26,0 push di push si mov WORD PTR [bp-4] ,ax mov WORD PTR [bp-2],dx mov WORD PTR [bp-14],8 ASSUME DS: NOTHING les di, DWORD PTR [bp+6] mov cx, 8 rep movsw pop ds ASSUME DS: DGROUP ASSUME DS : NOTHING mov cx, 8 rep movsw pop ds ASSUME DS : DGROUP $1427 [bp+6 ] [bx+48] mov ax,WORD PTR [bp-18] pop si pop di leave ret _Compute_Frame_Lpc ENDP _TEXT ENDS CONST SEGMENT $T518 DD 039800000r $T519 DQ 03ff0000000000000r CONST ENDS _TEXT SEGMENT ASSUME CS: _TEXT PUBLIC Check_Stab Check Stab PROC FAR enter 86,0 push di push si mov ax,WORD PTR [bp+6] [si] $FB442; mov ax, 1 pop si pop di leave ret nop Check_Stab ENDP PUBLIC _Norm _Norm PROC FAR enter 2 , 0 push di push si mov di,WORD PTR [bp+6] xor si,si $L535: $FC453: me si shl WORD PTR es: [di] ,1 rcl WORD PTR es:[di+2], 1 test WORD PTR es: [di+2] , -16384 je $FC453 $FB454: mov ax,si ret _Norm ENDP _TEXT ENDS END TITLE exec .286p INCLUDELIB LLIBCA INCLUDELIB OLDNAMES.LIB _TEXT SEGMENT WORD PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS CONST SEGMENT WORD PUBLIC 'CONST' CONST ENDS _BSS SEGMENT WORD PUBLIC 'BSS' _BSS ENDS DGROUP GROUP CONST, _BSS, DATA ASSUME DS: DGROUP ASSUME SS: NOTHING EXTRN _Compute_Maxi_Pulse_Amplitude:FAR EXTRN _Searche_Pulse_Low:FAR EXTRN aFlmul:FAR EXTRN _Searche_Pulse_High:FAR EXTRN _Norm:FAR _TEXT SEGMENT ASSUME CS: _TEXT PUBLIC _Construc _Excitation Construct Excitation PROC FAR enter 13 ,0 push di push si mov es , WORD PTR [bp-2] $F423 : $F426 _Construct_Excitation ENDP PUBLIC _Pitch_Predictor Pitch Predictor PROC FAR 12 0 rep movsw pop ds ASSUME DS: DGROUP $F476; mov es,WORD PTR [bp-2] $F479: mov ax , WORD PTR [bp-30 ] $F482 $JCC503 mov ax, WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov di , ax mov WORD PTR [bp-12] ,dx sub ax , ax mov WORD PTR [bp-28] ,ax mov WORD PTR [bp-30] ,ax mov WORD PTR [bp-2] , 60 $F485 mov es,WORD PTR [bp-12] mov bx,di add di , 2 mov ax, WORD PTR es : [bx] mov es.WORD PTR [bp-16] mov bx,si add si , 2 imul WORD PTR es : [bx] sar dx, 1 rcr ax,l sar dx,l rcr ax, 1 add WORD PTR [bp-30] ,ax adc WORD PTR [bp-28] ,dx dec WORD PTR [bp-2] jne $F485 mov ax, WORD PTR [bp-30] mov dx,WORD PTR [bp-28] mov WORD PTR [bp-196],ax mov WORD PTR [bp-194],dx mov si, WORD PTR [bp-24] mov ax, WORD PTR [-bp-22] mov WORD PTR [bp-16] ,ax mov di,si mov WORD PTR [bp-12],ax sub ax , ax mov WORD PTR [bp-28] ,ax mov WORD PTR [bp-30] ,ax mov WORD PTR [bp-2] , 60 mov WORD PTR [bp-18] ,si $F488: sar dx,l rcr ax,l sar dx,l rcr ax,l add WORD PTR [bp-30],ax adc WORD PTR [bp-28],dx dec WORD PTR [bp-2] jne $F488 mov ax, WORD PTR [bp-30] mov dx,WORD PTR [bp-28] mov WORD PTR [bD-188] ,ax mov WORD PTR [bp-186] ,dx mov WORD PTR [bD-26] , 0 lea ax, WORD PTR [bp-200] mov WORD PTR [bp-20],ax $F491: mov ax, WORD PTR [bp-24] mov dx,WORD PTR [bp-22] mov di , ax mov WORD PTR [bp-16],dx sub WORD PTR [bp-24],2 mov WORD PTR [bp-14],ax mov WORD PTR [bp-12],dx mov ax, WORD PTR [bp+26] mov dx,WORD PTR [bp+28] mov WORD PTR [bp-4] ,ax mov WORD PTR [bp-2] ,dx sub ax, ax mov WORD PTR [bp-28],ax mov WORD PTR [bp-30],ax mov WORD PTR [bp-6],29 mov WORD PTR [bp-18],di mov si, WORD PTR [bp-4] $F494: add imul sar rcr sar rcr sar rcr add ,ax adc ,dx dec jne mov ax,WORD PTR [bp-30] mov bx,WORD PTR [bp-20] mov dx,WORD PTR [bp-28] mov WORD PTR ss: [bx+16] ax mov WORD PTR ss: [bx+18] dx mov ax, WORD PTR [bD+26] mov dx,WORD PTR [bp+28] mov ai av mov WORD PTR [bp-2] ,dx mov WORD PTR [bp-6] ,29 mov di,WORD PTR [bp-18] mov WORD PTR [bp-2],ax sub ax, ax mov WORD PTR [bp-28],ax mov WORD PTR [bp-30],ax mov WORD PTR [bp-6],60 mov WORD PTR [bp-4],si $F506: mov es,WORD PTR [bp-2] mov bx, si add si, 2 mov ax, WORD PTR es : [bx] mov es.WORD PTR [bp-12] mov bx, di add di,2 imul WORD PTR es: [bx] sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 add WORD PTR [bp-30] ,ax adc WORD PTR [bp-28] ,dx dec WORD PTR [bp-6] jne $F506 mov bx.WORD PTR [bp-20] mov ax, ORD PTR [bp-30] mov dx,WORD PTR [bp-28] mov WORD PTR ss: [bx+8] ,ax mov WORD PTR ss: [bx+10] ,dx cmp WORD PTR [bp-26] ,4 je $FC492 mov ax, WORD PTR ss : [bx] mov dx,WORD PTR ss:[bx+2] mov WORD PTR ss: [bx+24] , ax mov WORD PTR ss: [bx+26] ,dx mov ax, WORD PTR ss : [bx+8] mov dx,WORD PTR ss:[bx+10] mov WORD PTR ss: [bx+32] , ax mov WORD PTR ss: [bx+34] , dx $FC492: add bx,20 mov WORD PTR [bp-20] ,bx inc WORD PTR [bp-26] cmp WORD PTR [bp-26] ,4 jg $JCC1329 jmp $F491 $JCC1329: sub a ,ax mov WORD PTR [bo- 28] ,ax mov WORD PTR [bp-3C] ,ax $F510: $L726: $L727: $1,729: $FC511: $F514: $L732: $L733: mov WORD PTR ss: [di] ,dx add si, add di , 2 dec WORD PTR [bp-2] jne $F514 lea ax, WORD PTR [bp-100] mov WORD PTR [bp-14] , ax mov WORD PTR [bD-12] ,ss mov WORD PTR [bt>-16] ,5 $F517: mov ax, WORD PTR [bp+32] mov dx,WORD PTR [bp+34] mov di , ax mov WORD PTR [bp-2] ,dx mov WORD PTR [bp-6] ,25 mov si, WORD PTR [bp-14] $F520: $L734 $1523 sub si, 10 mov si, WORD PTR [bp-32] mov di,WORD PTR [bp+40] add di , di les bx,DWORD PTR [bp+36] mov WORD PTR es: [bx+20] [di] ,si mov es,WORD PTR [bp-2] $F531: mov ax, WORD PTR es : [di] Pitch_Predictor ENDP PUBLIC _Get_Pitch _Get_Pitch PROC FAR enter 436,0 push di push si les bx,DWORD PTR [bp+18] add bx,20 mov si , WORD PTR [bp+22] add si , si mov ax, WORD PTR es : [bx] [si] mov WORD PTR [bp-436] , ax cmp ax, 127 jne $1555 xor ax, ax mov WORD PTR [bp-14] ,dx nop Get_Pitch ENDP PUBLIC _Find_MpEx _Find_MpEx PROC FAR enter 796,0 push di push si xor ax,ax mov WORD PTR [bp-36],ax mov WORD PTR [bp-34],ax mov ax,WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov di,ax mov WORD PTR [bp-2] ,dx lea bx.WORD PTR [bp-544] mov cx,60 mov es,WORD PTR [bp-2] 604; les di,DWORD PTR [bp+10] lea bx,rfORD PTR [bp-184] mov cx,30 $F607: mov ax,WORD PTR es: [di] cwd mov WORD PTR ss : [bx] , ax mov WORD PTR ss: [bx+2] , dx add di,2 add bx,4 dec cx jne $F607 lea ax, WORD PTR [bp-18] push ss push ax lea ax, WORD PTR [bp-30] push ss push ax lea ax, WORD PTR [bp-784] push ss push ax lea ax, WORD PTR [bp-184] push ss push ax lea ax, WORD PTR [bp-544] push ss push ax call FAR PTR _Compute_Maxi_Pulse_Amplitude add sp,20 lea si,WORD PTR [bp-304] mov di,60 F610: mov WORD PTR ss : [si] ,0 add si, 2 dec di jne $F610 mov ax, WORD PTR [bo-30] mov dx,WORD PTR [bp-28] sar dx,l rcr ax, 1 sar dx,l rcr ax,l sar dx,l rcr ax, 1 mov WORD PTR [bp-30] ,ax mov WORD PTR [bp-28] ,dx mov si, 15 mov WORD PTR [bp-8] ,si mov ax, WORD PTR [bp+16] mov dx,WORD PTR [bp+18] add ax, 30 mov di , ax mov WORD PTR [bp-2] ,dx mov ax, WORD PTR [bp+14] cwd $F613 mov es,WORD PTR [bp-2] mov ax, ORD PTR es: [di] imul WORD PTR [bp+14] cmp dx,WORD PTR [bD-28] jl $FC614 jg $L775 cmp ax, WORD PTR [bp-30] jbe $FC614 $L775 mov WORD PTR [bp-8] ,si $FC614 sub di,2 dec si jns $F613 mov di,WORD PTR [bp-8] mov bx,di add bx,di add bx,WORD PTR [bp+16] mov es,WORD PTR [bp+18] mov si, ORD PTR es : [bx] mov bx,WORD PTR [bp+32] add bx, bx mov es,WORD PTR [bp+30] add bx,WORD PTR [bp+28] mov WORD PTR [bp-788] ,bx mov WORD PTR [bp-786] ,es mov WORD PTR es: [bx+28] ,di mov bx,WORD PTR [bp-18] add bx, bx lea ax, ORD PTR [bp-304] add bx, ax xor di,di mov WORD PTR ss : [bx] , 1 mov bx,WORD PTR [bp-18] shl bx, 2 lea ax, WORD PTR [bp-784] add bx, ax cmp WORD PTR ss : [bx+2] ,di jge $1617 mov di , 2 $1617: mov ax, si cwd mov WORD PTR [bp-796] ,si mov WORD PTR [bp-794],dx push dx push si 1Q4 $L776: mc di $1618: $F619 : mov WORD PTR [bp-22] , ax mov WORD PTR [bp-20] , ss mov ax, WORD PTR [bo+10] mov dx,WORD PTR [bD+12] mov WORD PTR [bp-1 ] ,ax mov WORD PTR [bp-12] ,dx mov si, WORD PTR [bp-10] mov ax, WORD PTR [bp-66] [si] mov WORD PTR [bp-16] ,ax cmp WORD PTR [bp-18] ,30 jl $JCC2820 jmp $1622 $JCC2820: inc WORD PTR [bp-36] mov WORD PTR [bp-8] ,0 mov ax, WORD PTR [bp-18] add ax, 30 or ax, ax jle $FB625 lea ax, WORD PTR [bp-784] mov WORD PTR [bp-2] , ax mov ax, WORD PTR [bp-18] add ax, 30 mov WORD PTR [bp-4] ,ax mov bx,WORD PTR [bp-2] mov cx,ax $F623: sub ax , ax mov WORD PTR- ss : [bx+2] , ax mov WORD PTR ss : [bx] ,ax add bx , 4 dec cx jne $F623 $FB625: mov WORD PTR [bp-6] ,30 mov si, WORD PTR [bp-22] mov di,WORD PTR [bp-14] $F626: $1622 xnc WORD PTR [bp-34] $F630: $FB632 $F633 $1529: $1636 $1637; mov di,WORD PTR [bp-13] shl di , 2 cmp WORD PTR [bp-782] [di] ,si jge $1638 mov si, 2 $1638: $L777: $1639: $F643 sar WORD PTR [bp-24],l mov WORD PTR [bp-10],di mov WORD PTR [bp-8] ,es mov ax,WORD PTR [bp+24] mov dx,WORD PTR [bp+26] add ax,60 mov WORD PTR [bp-14],ax mov WORD PTR [bp-12],dx mov WORD PTR [bp-6],3 mov si,ax mov di,WORD PTR [bp-6] $D646: les bx, DWORD PTR [bp-10] add WORD PTR [bp-10],2 mov ax, WORD PTR es: [bx] mov WORD PTR [bp-16],ax or ax, ax jne $1649 mov es,WCRD PTR [bp-12] mov ax, ORD PTR es: [si] cwd add WORD PTR [bD-4] ,ax adc WORD PTR [bp-2] ,dx jmp SHORT $1650 nop $1649: shl WORD PTR [bp-18],2 cmp WORD PTR [bp-16],0 jge $1651 add WORD PTR [bp-18],2 $1651: mov ax, WORD PTR [bp-16] cwd xor ax,dx sub ax,dx cmp ax, WORD PTR [bp-24] jl $1652 inc WORD PTR [bp-18] $IS52: dec di add si, 60 $1650: add si, 2 mov di,4 $D653 $1656: shl WORD PTR [bp-18],2 cmp WORD PTR [bo-16],0 jge $1658 add WORD PTR [bp-18],2 $1658: mov ax,WORD PTR [bp-16] cwd xor ax,dx sub ax,dx cmD ax,WORD PTR [bp-24] jl * $1659 inc WORD .PTR [bp-18] $1659: dec di add si, 60 $1657: add si, 2 or di , di jg $DS53 mov bx,WORD PTR [bD+28] mov di,WORD PTR [bp+32] mov ax, ORD PTR [bo -18] les si, DWORD PTR [bp-788] mov WORD PTR es: [si+52],ax 113 add si,cx mov WORD PTR es: [si+36] ,ax mov WORD PTR es: [si+38] ,dx pop si pop di leave ret _Find_MpEx ENDP _TEXT ENDS END 117 DW 064fH DW Oeb7H DW 017b8H DW 021aaH DW 02d8bH DW 03ba2H DW 04df9H Parkorβ DW 0d51bH DW 0fl2eH DW 042eH DW 013C7H DW 02260H DW 0311bH DW 0 0deH DW 05385H _Parkor7 DW 0b550H DW 0C825H DW 0d980H DW 0e997H DW 0f883H DW 07S2H DW 01811H DW 02el8H _Parkor8 DW Oce OH DW 0e4f9H DW 0f6bbH DW 0646H DW 014f5H DW 023ffH DW 0356fH DW 04a8dH _Pg DD 0be968485r DD 03fa47180r DD 03fa9el2br DD 0bedab 13r DD 03fl88104r DD ObeδeOclOr DD 03eld6449r DD O3f 1O05dr DD Obe825568r DD 03f2f809dr DD 03f7f85f2r DD 03f4ce371r DD O3f885d0dr DD Obec80ee9r DD 03 88afecr DD Obdc410d5r DD Obeδcedabr DD 03f87b534r DD 03f76d62r DD 0be0fb6d7r DD 03f9ef6b8r DD Obc829c8dr DD 03flab536r DD 03e4db9elr DD 03f4f0889r DD 03de72196r DD 03e95ef60r DD 03f3743b3r DD 03edef4aOr DD 03e 9fl 7r DD 03d042b28r 118 19 122 123 125 $T3206 DQ 03fe999999999999ar ST3207 DQ O3ff0OOOOOOO00O0Or $T3208 DQ 03fal2358β75d3033r $T3209 DQ 0bfdd70a3d70a3d7lr $T3210 DQ 03fel47ael47ael48r $T3211 DD 03f800000r ST3212 DQ 04074000000000000r $T3213 DQ 03fl0624dd2fla9fcr 5T3214 DQ O4OO0OO0OO0O00O0Or $T3215 DD 046800000r $T3216 DQ 03fb999999999999ar ST3217 DQ 0402aaaaaaaaaaaabr $T 218 DQ 03fa999999999999ar $T3219 DQ OOOOOOOOOOOOOOOOOr $T3220 DQ 040d0000000000000r $T3221 DQ OcOeOOOOOOOOOOOOOr $T3222 DQ 03fel99999999999ar $T3223 DQ O3fe8OO0OOOO0OO0Or CONST ENDS _TEXT SEGMENT ASSUME CS: _TEXT PUBLIC TRϋESPEECH_INIT TRUESPEECH INIT PROC FAR mov ax,DGROUP enter 118,0 push di push si push ds mov ds,ax mov di,WORD R [bp+10] mov es,W0RD PTR [bp+12] mov ax, ORD PTR es: [di] dec ax je $SC3027 sub ax,33 je $SC3029 $L3279: xor ax,ax cwd jmp $EX3016 nop $SC3027: les bx,DWORD PTR [bp+6] cmp WORD PTR es:[bx],34 jne $L3279 mov WORD PTR [bp-2],es jmp SHORT $SB3024 $SC3029: les bx,DWORD PTR [bp+6] cmp WORD PTR es:[bx],l jne $L3279 mov ax,WORD PTR [bp+12] mov bx,di mov WORD PTR [bp-2],ax $SB3024: mov es,WORD PTR [bp-2] cmp WORD PTR es:[bx+18],l jne $L3279 cmp WORD PTR es: [bx+20],240 jne $L3279 mov WORD PTR [bp-22],ax mov WORD PTR [bp-20],dx or dx,ax je $L3279 mov si,OFFSET DGROϋP:_BitPerParkor les di,DWORD PTR [bp-22] mov cx,8 rep movsw mov dx,es ]_27 add ax,16 mov di,ax mov si,OFFSET DGROUP:_Parkorl mov cx,32 rep movsw mov bx,WORD PTR [bp-22] add bx,80 mov WORD PTR [bp-26],bx mov WORD PTR [bp-24],es push es mov di,bx mov si,OFFSET DGROUP:_Parkor2 pop es mov cx,32 rep movsw mov bx,WORD PTR [bp-22] add bx,144 mov WORD PTR [bp-30],bx mov WORD PTR [bp-28],dx push dx mov di,bx mov si,OFFSET DGROUP:_Parkor3 pop es mov cx,l6 rep movsw mov bx,WORD PTR [bp-22] add bx,176 mov WORD PTR [bp-34],bx mov WORD PTR [bp-32],dx push dx mov di,bx mov si,OFFSET DGROUP:_Parkor4 pop es mov cx,i6 rep movsw mov bx,WORD PTR [bp-22] add bx,208 mov WORD PTR [bp-38],bx mov WORD PTR [bp-36],dx push dx mov di,bx mov si,OFFSET DGROUP:_Parkor5 pop es mov cx,16 rep movsw mov bx,WORD PTR [bp-22] add bx,240 mov WORD PTR [bp-42],bx mov WORD PTR [bp-40],dx push dx mov di,bx mov si,OFFSET DGROUP:_Parkor6 pop es mov cx,8 rep movsw mov bx,WORD PTR [bp-22] add bh,l mov WORD PTR [bp-46],bx mov WORD PTR [bp-44],dx push dx mov di,bx mov si,OFFSET DGROUP:_Parkor7 pop es mov cx,8 rep movsw mov bx,WORD PTR [bp-22] add bx,272 mov WORD PTR [bp-50],bx mov WORD PTR [bp-48],dx push dx mov di,bx mov si,OFFSET DGROUP:_Parkor8 pop es mov cx,8 rep movsw les bx,DWORD PTR [bp-22] mov WORD PTR es: bx+288],ax mov WORD PTR es: bx+290],dx mov ax,WORD PTR bp-26] mov dx,WORD PTR bp-24] mov WORD PTR es: bx+292],ax mov WORD PTR es: bx+294],dx mov ax,WORD PTR bp-30] mov dx,WORD PTR bp-28] mov WORD PTR es: bx+296],ax mov WORD PTR es: bx+298],dx mov ax,WORD PTR bp-34 ] mov dx,W0RD PTR bp-32] mov WORD PTR es: bx+300] , ax mov WORD PTR es: bx+302 ] ,ic_x mov ax,WORD PTR bp-38] mov dx,WORD PTR bp-36] mov WORD PTR es: bx+304],ax mov WORD PTR es: bx+306],dx mov ax,WORD PTR bp-42 mov dx,WORD PTR bp-40] mov WORD PTR es: bx+308],ax mov WORD PTR es: bx+310],dx mov ax,WORD PTR bp-46] mov dx,W0RD PTR bp-44] mov WORD PTR es: bx+312],ax mov WORD PTR es: bx+314],dx mov ax,WORD PTR bp-50] mov dx,WORD PTR bp- 8] mov WORD PTR es: bx+316],ax mov WORD PTR es: bx+318],dx lea di,WORD PTR [bx+320] mov si,OFFSET DGROUP: PositionCodesTables mov cx,120 rep movsw mov WORD PTR [bp-10],0 mov ax,WORD PTR [bp-22] mov dx,es add ax,1040 mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],es mov si,WORD PTR [bp-10] $F3035: mov bx,OFFSET DGROUP:$T3203 call FAR PTR aFfldd lea ax,WORD PTR [si+1] mov WORD PTR [bp-52],ax lea bx,WORD PTR [bp-52] call FAR PTR aFsldw call FAR PTR aFdcvt call FAR PTR aFCIpow mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax lea ax,WORD PTR [si+1] mov si,ax cmp si,8 jl $F3035 xor si,si mov ax,WORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax,1056 mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],dx $F3038: mov bx,OFFSET DGROUP:ST3206 call FAR PTR aF ldd lea ax,WORD PTR [si+1] mov WORD PTR [bp-52],ax lea bx,WORD PTR [bp-52] call FAR PTR aFsldw call FAR PTR aFdcvt call FAR PTR aFCIpow mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax lea ax,WORD PTR [si+1] mov si,ax cmp si,8 jl $F3038 xor sι,sι mov ax,WORD PTR [bp-22] mov dx, ORD PTR [bp-20] add ax,560 mov WORD PTR [bρ-4],ax mov WORD PTR [bp-2],dx 3041: mov bx,OFFSET DGROUP:$T3207 call FAR PTR aFfldd call FAR PTR aFCIatan mov WORD PTR [bp-52],si lea bx,WORD PTR [bp-52] call FAR PTR aFsldw call FAR PTR aFdcvt call FAR PTR aFfmul mov bx,OFFSET DGROUP:$T3208 call FAR PTR aFfmuld call FAR PTR aFCIcos mov bx,OFFSET DGROUP:$T3209 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3210 call FAR PTR aFfaddd mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax inc si cmp si,240 jl $F3041 mov ax,WORD PTR $T3211 mov dx,W0RD PTR $T3211+2 mov WORD PTR [bp-8],ax mov WORD PTR [bp-6] ,dx mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfldd call FAR PTR aFCIlog - mov bx,OFFSET DGROUP:$T3207 call FAR PTR aFfldd call FAR PTR aFCIatan mov bx,OFFSET DGROUP:$T3212 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3213 call FAR PTR aFfmuld call FAR PTR aFCIcos call FAR PTR aFCIlog mov bx,OFFSET DGROUP:$T3214 call FAR PTR aFfmuld call FAR PTR aFf iv lea bx,WORD PTR [bp-14] call FAR PTR aFsstsp xor si,si mov ax, ORD PTR [bp-22] mov dx,W0RD PTR [bp-20] add ax,1072 mov WORD PTΪ bp-4] ,ax mov WORD PTR [bp-2],dx 044: lea bx,W0RD PTR [bp-14] call FAR PTR aFslds lea bx,WORD PTR [bp-56] call FAR PTR aFssts mov WORD PTR [bp-52],si lea bx,WORD PTR [bp-52] call FAR PTR aFsldw call FAR PTR aFfsub lea bx,W0RD PTR [bp-56] call FAR PTR aFslds mov bx,OFFSET DGROUP:$T3211 call FAR PTR aFfadds mov WORD PTR [bp-58],si lea bx,WORD PTR [bp-58] call FAR PTR aFsldw call FAR PTR aFfadd call FAR PTR aFfdiv lea bx,WORD PTR [bp-8] push bx call FAR PTR aFsmuls pop bx call FAR PTR aFssts call FAR PTR aFdcvt mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aF tol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax inc si cmp si,8 jl $F3044 mov ax,WORD PTR $T3215 mov dx,WORD PTR ST3215+2 mov WORD PTR [bp-8],ax mov WORD PTR [bp-6] ,dx mov bx,OFFSET DGROUP:$T3216 call FAR PTR aF ldd mov bx,OFFSET DGROUP:$T3214 call FAR PTR aF ldd call FAR PTR aFCIloglO mov bx,OFFSET DGROUP:$T3217 call FAR PTR aFfmuld call FAR PTR aFdcvt mov bx,OFFSET DGROUP:$T3218 call FAR PTR aFfmuld call FAR PTR aFCIpow lea bx,WORD PTR [bp-14] call FAR PTR aFsstsp mov WORD PTR [bp-10],15 mov ax, ORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax,1376 132 mov si,ax mov WORD PTR [bp-2],dx $F3047: lea bx,WORD PTR [bp-14] call FAR PTR aFslds lea bx,WORD PTR [bp-8] _aFsmuls _aFssts " aFdcvt mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol mov es,WORD PTR [bp-2] mov WORD PTR es:[si],ax and WORD PTR es: [si] ,32764 sub si,2 dec WORD PTR [bp-10] jns $F3047 mov si,WORD PTR [bp-22] mov es,WORD PTR [bp-20] mov WORD PTR es: [si+1338],8192 mov WORD PTR es: [si+1340],24576 mov WORD PTR es:[si+1342],-8192 mov WORD PTR es: [si+1344],-24576 mov cx,OFFSET DGROUP:_Pg lea ax,WORD PTR [si+1088] mov bx,ax mov WORD PTR [bp-14],es mov WORD PTR [bp-18],25 mov WORD PTR [bp-12],CX $F3050: mov ax,WORD PTR [bp-14] mov WORD PTR [bp-4],bx ' mov WORD PTR [bp-2],ax mov si,WORD PTR [bp-12] mov WORD PTR [bp-8],2 mov WORD PTR [bp-16],bx $F3053: mov bx,OFFSET DGROUP:$T3219 call FAR PTR aFfldd mov bx,si call FAR PTR aFfIds call FAR PTR aFdcvt lea bx,WORD PTR [bp-66] call FAR PTR aFsstd call FAR PTR aFfcompp jb $13056 lea bx,WORD PTR [bp-66] call FAR PTR aFsldd mov bx,OFFSI DGROUP:$T322θ ' call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd jmp SHORT $L3280 nop $13056: lea bx,WORD PTR [bp-66] call FAR PTR aFsldd mov bx,OFFSET DGROUP:$T3220 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfsubd $L3280: call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax add si,4 dec WORD PTR [bp-8] jne $F3053 mov WORD PTR [bp-l2],si mov bx,WORD PTR [bp-16] add bx,10 dec WORD PTR [bp-18] je $JCC1323 jmp $F3050 $JCC1323: mov si,OFFSET DGROUP:_Pg mov ax,WORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax,1092 mov bx,ax mov WORD PTR [bp-14],dx mov WORD PTR [bp-18],25 $F3058: mov ax,WORD PTR [bp-14] mov WORD PTR [bp-4],bx mov WORD PTR [bp-2],ax mov WORD PTR [bp-8],2 mov WORD PTR [bp-16],bx $F3061: mov bx,OFFSET DGROUP:$T3219 call FAR PTR aFfldd mov bx,si call FAR PTR aFfIds mov bx,si call FAR PTR aFfmuls call FAR PTR aFfchs call FAR PTR aFdcvt lea bx,WORD PTR [bp-74] call FAR PTR aFsstd . call FAR PTR aFfcomp jb $13064 lea bx,WORD t"TR [bp-74] call FAR PTR aFsldd mov bx,OFFSET DGROUP:$T3220 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd jmp SHORT $L3281 $13064: lea bx,WORD PTR [bp-74] call FAR PTR aFsldd mov bx,OFFSET DGROUP:$T3220 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 • call FAR PTR aFfsubd 5L3281: . call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax add si,4 dec WORD PTR [bp-8] jne $F3061 mov WORD PTR [bp-12],si mov bx,WORD PTR [bp-16] add bx,10 dec WORD PTR [bp-18] je $JCC1499 jmp $F3058 $JCC1499: mov ax,WORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax,1096 mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],dx mov si,OFFSET DGROUP:_Pg+4 mov WORD PTR [bp-6],25 $F3066: mov bx,OFFSET DGROUP:$T3219 call FAR PTR aFfldd lea bx,WORD PTR [si-4] call FAR PTR aFflds call FAR PTR aFdcvt mov bx,si call FAR PTR aFfmuls lea bx,WORD PTR [bp-82] call FAR PTR aFsstd mov bx,OFFSET DGROUP:$T3214 call FAR PTR aFfmuld call FAR PTR aFfcompp ja $13069 lea bx,W0RD PTR [bp-82] call FAR PTR aFsldd mov bx,OFFSET DGROUP:$T3221 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd jmp SHORT $L3282 _.-_ $13069 : lea bx,WORD PTR [bp-82 call FAR PTR aFsldd mov bx,OFFSET DGROUP:$T3221 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfsubd $L3282: call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],10 mov WORD PTR es:[bx],ax add si,8 dec WORD PTR [bp-6] jne $F3066 mov si,WORD PTR [bp-22] xor ax,ax mov es,WORD PTR [bp-20] mov cx,240 lea di,WORD PTR [si+1378] . rep stosw mov cx,240 lea di,WORD PTR [si+1858] rep stosw mov cx, 60 lea di,WORD PTR [si+2338] rep stosw lea ax,WORD PTR [si+3042] mov cx,8 mov WORD PTR [bp-4],ax mov si,ax mov di,WORD PTR [bp-22] $F3080: xor ax,ax mov WORD PTR es:[si],ax ■mov WORD PTR es: [si+16] ,ax mov WORD PTR es: [si+32] ,ax mov WORD PTR es: [si+48] ,ax add si,2 dec cx jne $F3080 lea ax,WORD PTR [di+2458] mov cx,WORD PTR [bp-20] mov bx,ax mov es,cx mov cx,l46 $F3083: xor ax,ax mov WORD PTR es:[bx],ax mov WORD PTR es: [bx+292],ax add bx,2 dec cx jne $F3083 les bx,DWORD PTR [bp-22] lea di,WORD PTR [bx+3168] mov si,OFFSET DGROUP:_DecFix_BitPerParkor mov cx,8 rep movsw mov ax, ORD PTR [bp-22] mov dx,es add ax,3184 mov di,ax mov si,OFFSET DGROUP:_DecFix_Parkorl mov cx,32 " ~ rep movsw mov bx,WORD PTR [bp-22 add bx,3248 mov WORD PTR [bp-86],bx mov WORD PTR [bp-84],es push es mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor2 pop es ~ mov cx,32 rep movsw mov bx,W0RD PTR [bp-22] add bx,3312 mov WORD PTR [bp-90],bx mov WORD PTR [bp-88],dx push dx mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor3 pop es mov cx,16 rep movsw mov bx,WORD PTR [bp-22] add bx,3344 mov ORD PTR [bp-94],bx mov WORD PTR [bp-92],dx push dx mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor4 pop es "* mov cx,16 rep movsw mov bx,WORD PTR [bp-22] add bx,3376 mov WORD PTR [bp-98],bx mov WORD PTR [bp-96],dx push dx mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor5 pop es mov cx,16 rep movsw _. -._, mov bx , WORD TR [bp-22 ] add bx , 3408 mov WORD PTR [bp-102],bx mov WORD PTR [bp-100],dx push dx mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor6 pop es mov cx,8 rep movsw mov bx,WORD PTR [bp-22] add bx,3424 mov WORD PTR [bp-106],bx mov WORD PTR [bp-104],dx push dx mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor7 pop es mov cx,8 rep movsw mov bx,WORD PTR [bp-22] add bx,3440 mov WORD PTR [bp-110],bx mov WORD PTR [bp-108],dx push dx mov di,bx mov si,OFFSET DGROUP:_DecFix_Parkor8 pop es "" mov cx,8 rep movsw les bx,DWORD PTR [bp-22] mov WORD PTR es: bx+3456],ax mov WORD PTR es: bx+3458] ,dx mov ax,WORD PTR bp-86] mov dx,WORD PTR bp-84] ov WORD PTR es: bx+3460] ,ax ov WORD PTR es: bx+3462],dx ov ax,WORD PTR bp-90] ov dx,WORD PTR bp-88] ov WORD PTR es: bx+3464],ax ov WORD PTR es: bx+3466] ,dx ov ax,WORD PTR bp-94] ov dx,WORD PTR bp-92] ov WORD PTR es: bx+3468] ,ax ov WORD PTR es: bx+3470] ,dx ov ax, ORD PTR bp-98] ov dx,WORD PTR bp-96] ov WORD PTR es: bx+3472] ,ax ov WORD PTR es: bX+3474],dX ov ax,WORD PTR bp-102] ov dx,WORD PTR bp-100] ov WORD PTR es: bx+3476] ,ax ov WORD PTR es: bx+3478] ,dx mov ax,WORD λ [bp-106] mov dx,WORD PTR [bp-104] mov WORD PTR es: [bx+3480] ,ax mov WORD PTR es: [bx+3482],dx mov ax,WORD PTR [bp-110] mov dx,WORD PTR [bp-108] mov WORD PTR es: [bx+3484] ,ax mov WORD PTR es: [bx+3486],dx lea di,WORD PTR [bx+3488] mov si,OFFSET DGROUP:_DecFix_PositionCodesTables mov cx,l20 rep movsw mov WORD PTR [bp-10],0 mov ax,WORD PTR [bp-22] mov dx,es add ax,3728 mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],es mov si,WORD PTR [bp-10] $F3086: mov bx,OFFSET DGROUP:$T3203 call FAR PTR aFfldd lea ax,WORD PTR [si+1] mov WORD PTR [bp-58],ax lea bx,WORD PTR [bp-58] call FAR PTR aFsldw call FAR PTR aFdcvt call FAR PTR aFCIpow mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol les bx,DWORD PTR [bp-4] add WORD PTR [bp-4],2 mov WORD PTR es:[bx],ax lea ax,WORD PTR [si+1] mov si, x cmp si,8 • jl $F3086 mov cx,l5 mov si,WORD PTR [bp-22] mov ax,si mov dx,WORD PTR [bp-20] add ax,4114 mov di,ax mov WORD PTR [bp-2],dx lea ax,WORD PTR [si+1376] mov WORD PTR [bp-8],ax mov WORD PTR [bp-6],dx mov WORD PTR [bp-4],di mov si,di mov bx,ax $F3089: mov es,WORD PTR [bp-6] mov ax,WORD PTR es:[bx] 139 sar ax,2 mov es,WORD PTR [bp-2] mov WORD PTR es:[si],ax mov dx,ax add ax,ax add ax,dx mov WORD PTR es: [si+2],ax mov es,WORD PTR [bp-6] mov ax,WORD PTR es:[bx] neg ax sar ax,2 mov es,WORD PTR [bp-2] mov WORD PTR es:[si+4],ax mov dx,ax add ax,ax add ax,dx mov WORD PTR es: [si+6] ,ax sub si,8 sub bx,2 dec cx jns $F3089 mov WORD PTR [bp-2] ,OFFSET DGROUP:_DecFix_Pg mov ax,WORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax, 744 mov WORD PTR [bp-6],ax mov WORD PTR [bp-4],dx mov WORD PTR [bp-8],25 mov es,dx $F3092: mov ax,WORD PTR [bp-6] mov bx,WORD PTR [bp-2] mov cx,2 mov di,ax mov si,bx rep movsw add WORD PTR [bp-2],4 add WORD PTR [bp-6],10 dec WORD PTR [bp-8] jne $F3092 mov bx,OFFSET DGROUP:_DecFix_Pg+2 mov ax,WORD PTR [bp-22] "* mov dx,WORD PTR [bp-20] add ax, 752 mov di,ax mov es,dx mov WORD PTR [bp-2],25 $F3098: mov ax,WORD PTR [bx-2] imul WORD PTR [bx] add ax,ax neg ax mov WORD PTR es:[di],ax add bx,4 add di,10 dec WORD PTR [bp-2 ] Λ Λ ΓX jne $F3098 mov WORD PTR [bp-10],0 mov ax, ORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax,4122 mov si,ax mov WORD PTR [bp-2],dx $F3101: mov bx,OFFSET DGROUP:$T3222 call FAR PTR aFfldd mov ax,WORD PTR [bp-10] inc ax mov WORD PTR [bp-58],ax mov di,ax lea bx,WORD PTR [bp-58] call FAR PTR aFsldw call FAR PTR aFdcvt lea bx,WORD PTR [bp-118] call FAR PTR aFsstd call FAR PTR aFCIpow mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol mov es,WORD PTR [bp-2] mov WORD PTR es:[si],ax mov bx,OFFSET DGROUP:$T3223 call FAR PTR aFfldd lea bx,WORD PTR [bp-118] call FAR PTR aFsldd call FAR PTR aFCIpow mov bx,OFFSET DGROUP:$T3204 call FAR PTR aFfmuld ' mov bx,OFFSET DGROUP:$T3205 call FAR PTR aFfaddd call FAR PTR aFftol mov es,WORD PTR [bp-2] mov WORD PTR es: [si+16] ,ax add si,2 • mov WORD PTR [bp-10],di cmp di,8 jge $JCC2538 jmp $F3101 $JCC2538: mov si,WORD PTR [bp-22] xor ax,ax mov es,WORD PTR [bp-20] mov cx,8 lea di,WORD PTR [si+4446] rep stosw mov cx,l46 lea di,WORD PTR [si+4154] rep stosw . . lea ax,WORD PTR [si+4462] mov bx,ax 141 mov cx,8 $F3110: xor ax,ax mov WORD PTR es:[bx],ax mov WORD PTR es: [bx+16],ax mov WORD PTR es: [bx+32],ax add bx,2 dec cx jne $F3110 mov ax,WORD PTR [bp-22] mov dx,WORD PTR [bp-20] $EX3016: pop ds pop si pop di leave ret 8 TRUESPEECH_INIT ENDP PUBLIC TRUESPEECH_VERSION TRUESPEECH VERSION PROC FAR TRUESPEECH_VERSION ENDP PUBLIC TRUESPEECH_RESET TRUESPEECH_RESET PROC FAR mov ax,DGROUP enter 4,0 push di push si push ds mov ds,ax mov bx,WORD PTR [bp+6] mov ax,WORD PTR [bp+8] mov WORD PTR [bp-4],bx mov WORD PTR [bp-2],ax mov es,ax xor ax,ax mov cx,240 142 lea di,WORD TR [bx+1378] rep stosw mov bx,WORD PTR [bp-4] mov cx,240 lea di,WORD PTR [bx+1858] rep stosw mov bx,WORD PTR [bp-4] mov cx,60 lea di,WORD PTR [bx+2338] rep stosw mov ax,WORD PTR [bp-4] add ax,3042 mov bx,ax mov cx,8 $F3128: xor ax,ax mov WORD PTR es:[bx],ax mov WORD PTR es: [bx+16],ax mov WORD PTR es: [bx+32] ,ax mov WORD PTR es: [bx+48],ax add bx,2 dec cx jne $F3128 mov ax, ORD PTR [bp-4] mov dx,WORD PTR [bp-2] add ax,2458 mov bx,ax mov es,dx mov cx,146 $F3131: xor ax, x mov WORD PTR es:[bx],ax mov WORD PTR es: [bx+292] ,ax add bx,2 dec cx jne $F3131 mov si,WORD PTR [bp-4] mov es,WORD PTR [bp-2] mov cx,8 lea di,WORD PTR [si+4446] rep stosw mov cx,146 lea di,WORD PTR [si+4154] rep stosw lea ax, ORD PTR [si+4462] mov bx,ax mov cx,8 $F3140: 143 xor ax,ax mov WORD PTR es:[bx],ax mov WORD PTR es: [bx+16] ,ax mov WORD PTR es: [bx+32] ,ax add bx,2 dec cx jne $F3140 cwd pop ds pop si pop di leave ret 4 nop TRUESPEECH_RESET ENDP PUBLIC TRUESPEECH_TERM TRUESPEECH_TERM PROC FAR mov ax,DGROUP push bp mov b ,sp push di push si push ds mov ds,ax mov si,WORD PTR [bp+6] mov ax,WORD PTR [bp+8] or ax,si je $13146 mov a , ORD PTR [bp+8] push ax mov di,ax TRUESPEECH TERM ENDP PUBLIC WEP WEP PROC FAR mov ax,DGROUP 144 push bp mov bp,sp push ds mov ds,ax mov a ,1 pop ds leave ret 2 nop WEP ENDP _TEXT ENDS END 'CODE' 'DATA' •CONST' 'BSS' DATA : ASSUME SS: NOTHING EXTRN _Construct_Excitation 1:FAR EXTRN _IIR_Filt_Stream:FAR " EXTRN _FIR_Filt_Stream:FAR EXTRN _PolePost_Filt_Stream:FAR EXTRN aFlmul:FAR _TEXT SEGMENT ASSUME CS: _TEXT PUBLIC TRUESPEECH_DECOD TRUESPEECH DECOD PROC FAR mov ax,DGROUP enter 264,0 push di push si push ds mov ds,ax mov si,WORD PTR [bp+14] mov di,WORD PTR [bp+10] lea ax,WORD PTR [si+3168] mov cx,WORD PTR [bp+16] mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],cx mov dx,WORD PTR [bp+6] mov bx,WORD PTR [bp+8] mov WORD PTR [bp-18],dx mov WORD PTR [bp-16],bx mov es,WORD PTR [bp+12] mov si,WORD PTR es:[di] mov dx,si and dx,l mov bx,ax mov es,cx mov WORD PTR es: [bx+1402],dx mov es,WORD PTR [bp+12] mov dx,W0RD PTR es:[di] mov bx,W0RD PTR es:[di+2] mov WORD PTR [bp-222],dx mov WORD PTR [bp-220],bx shr bx,1 rcr d ,1 and dx,31 mov bx,ax mov es,cx mov WORD PTR es: [bx+1342],dx mov dx,WORD PTR [bp-222] mov si,WORD PTR [bp-220] shr si,l rcr dx,l shr si,l rcr dx,l shr si,l rcr dx,l shr si,l rcr dx,l shr si,l rcr dκ.i shr si,i rcr dx,l and dx,3l mov WORD PTR es:[bx+134 ],dx mov ax,WORD PTR [bp-222] mov dx,WORD PTR [bp-220] mov al,ah mov ah.dl mov dl,dh sub dh,dh shr dx,1 rcr ax,l shr dx,i rcr ax,l shr dx,1 rcr ax,l and ax,15 mov WORD PTR es:[bx+1346] ,ax mov ax, ORD PTR [bp-222] mov dx,WORD PTR [bp-220] add ax,ax adc dκ,dx adc ax,ax xchg ax,dx and a ,15 mov WORD PTR es:[bx+1348] ,ax mov ax,WORD PTR [bp-220] shr ax,3 and ax,15 mov WORD PTR es:[bx+1350],ax mov ax,WORD J " R [bp-220] shr ax,7 and ax,7 mov WORD PTR es: [bx+1352],ax mov ax,WORD PTR [bp-220] shr ax, 10 and ax,7 mov WORD PTR es: [bx+l354],ax mov ax,WORD PTR [bp-220] shr ax,13 and ax,7 mov WORD PTR es: [bx+l356],ax mov ax,cx mov es,WORD PTR [bp+12] mov cx,W0RD PTR es:[di+4] and cx,l27 mov dx,es mov es,ax mov WORD PTR es: [bx+l362],cx mov es,dx mov cx,W0RD PTR es:[di+4] mov si,WORD PTR es: [di+6] mov WORD PTR [bp-226],cx mov WORD PTR [bp-224],si shr si, 1 rcr cx,1 shr si,i rcr cx,l shr si,l rcr cx,i shr εi,l rcr cx,l shr si,l rcr cx,l shr si,l rcr cx,l shr si,l rcr cx,l and cx,l27 mov es,ax mov WORD PTR es: [bx+1364] ,cx mov WORD PTR [bp-230],di mov WORD PTR [bp-228 ,dx mov ax,WORD PTR [bp-226] mov dx,W0RD PTR [bp-224] add ax,ax adc dx,dx adc ax,ax adc dx,dx adc ax,ax xchg ax,dx and ax,127 mov WORD PTR es: [bx+1366],ax mov ax,WORD PTR [bp-224] shr ax,5 and ax,127 mov WORD PT1 s: [bx+1368] ,ax mov ax,WORD PTR [bp-224] shr ax,12 and ax,15 shl ax,4 mov WORD PTR es: [bx+1358] ,ax mov cx,es les si,DWORD PTR [bp-230] mov dx,W0RD PTR es:[si+8] and dh,63 mov es,cx mov WORD PTR es: [bx+1394],dx mov es,WORD PTR [bp-228] mov dx,WORD PTR es:[si+8] mov di,W0RD PTR es:[si+10] mov WORD PTR [bp-234],dx mov WORD PTR [bp-232],di add dx,dx adc di,di adc dx,dx adc di,di adc dx,dx xchg dx,di and dh,63 mov es,cx mov WORD PTR es: [bx+1396],dx mov dx,WORD PTR [bp-232] shr dx,l2 and dx,l5 mov WORD PTR es:[bx+1360],dx mov es,WORD PTR [bp-228] mov di,W0RD PTR es: [si+12] and di,16383 mov es,cx mov WORD PTR es:[bx+1398],di mov es,WORD PTR [bp-228] mov di,ax mov WORD PTR [bp-236],dx mov ax,WORD PTR es: [si+12] mov dx,W0RD PTR es:[si+14] mov WORD PTR [bp-240],ax mov WORD PTR [bp-238 ,dx add ax, x adc dx,dx adc ax,ax adc dx,dx adc ax,ax xchg ax,dx and ah, 3 mov es,cx mov WORD PTR es: [bx+1400] ,ax mov ax,WORD PTR [bp-238] shr ax,12 and ax,15 shl ax,4 or ax,WORD -R [bp-236] mov WORD.PTR es:[bx+1360],ax mov es.WORD PTR [bp-228] mov ax,WORD PTR es: [si+16] and ax,15 mov es,cx mov WORD PTR es: [bx+1370] ,ax mov es,WORD PTR [bp-228] mov ax,WORD PTR es: [si+16] mov dx,WORD PTR es: [si+18] mov WORD PTR [bp-2 4],ax mov WORD PTR [bp-242],dx and al,240 and dh,l27 shr dx,1 rcr ax,l shr dx, 1 rcr ax,1 shr dx,1 rcr ax, l shr dx,l rcr ax,l mov es,cx mov WORD PTR es: [bx+1378] ,ax mov WORD PTR es:[bx+1380],dx mov ax,WORD PTR [bp-242] shr ax,15 and ax,l or di,ax mov WORD PTR es:[bx+l358],di mov es,WORD PTR [bp-228] mov -ax,WORD PTR es: [si+20] and ax,15 mov es,cx mov WORD PTR es:[bx+1372],ax mov es.WORD PTR [bp-228] mov ax, ORD PTR es: [si+20] mov dx,W0RD PTR es: [si+22] mov WORD PTR [bp-248],ax mov WORD PTR [bp-246],dx and al,240 and dh,l27 shr dx,l rcr ax,l shr dx,1 rcr ax,1 shr dx,l rcr ax,i shr dx,1 rcr ax, l mov es,cx mov WORD PTR es: [bx+1382] ,ax mov WORD PTR es:[bx+1384],dx mov ax,WORD PTR [bp-246] shr ax,15 and ax,1 add ax,ax or di,ax mov WORD PTR es: [bx+1358] ,di mov es,WORD PTR [bp-228] mov ax,WORD PTR es:[si+24] and ax,15 mov es,cx mov WORD PTR es: [bx+1374] ,ax mov es,WORD PTR [bp-228] mov ax,WORD PTR es: [si+24] mov dx,WORD PTR es: [si+26] mov WORD PTR [bp-252],ax mov WORD PTR [bp-250],dx and al,240 and dh,l27 shr dx,l rcr ax, l shr dx,l rcr ax, l shr dx, 1 rcr ax,i shr dx,l rcr ax,1 mov es,cx mov WORD PTR es: [bx+1386] ,ax mov WORD PTR es:[bx+1388],dx mov ax,WORD PTR [bp-250] shr ax,15 and ax,l shl ax,2 or di,ax mov WORD PTR es:[bx+1358],di mov es,WORD PTR [bp-228] mov ax,WORD PTR es: [si+28] and ax,15 mov es,cx mov WORD PTR es: [bx+1376],ax mov es,WORD PTR [bp-228] mov ax,WORD PTR es: [si+28] mov dx,WORD PTR es: [si+30] mov WORD PTR [bp-256],ax mov WORD PTR [bp-254],dx and al,240 and dh,127 shr dx, 1 rcr ax,1 shr dx, 1 rcr ax, 1 shr dx,l rcr ax, 1 shr dx, 1 rcr ax,i mov es,cx mov WORD PTR es: [bx+1390],ax mov WORD PTR es: [bx+1392},dx mov ax,WORD PTR [bp-254] shr ax,15 and ax,l shl ax,3 or- di,ax mov WORD PTR es: [bx+l358],di lea ax,WORD PTR [bx+560] push cx push ax lea ax, ORD PTR [bx+288] push cx push ax lea ax,WORD PTR [bx+1342] push cx push ax lea dx,WORD PTR [bp-34] push ss push dx mov si,bx mov di,es push cs call NEAR PTR Parkors_To_Lpc add sp,l6 mov WORD PTR [bp-14],ax mov es,di push WORD PTR es:[si+1402] lea ax,WORD PTR [si+1278] push di push ax lea ax,WORD PTR [bp-34] push ss push ax lea ax, ORD PTR [bp-98] push ss push ax push cs call NEAR PTR Compute_Frame_Lpc add sp,i4 ~ " mov WORD PTR [bp-10],0 lea ax,WORD PTR [bp-98] mov WORD PTR [bp-l2],ax mov ax,WORD PTR [bp+6] ■ mov dx,WORD PTR [bp+8] mov WORD PTR [bp-8],ax mov WORD PTR [bp-6],dx mov si,WORD PTR [bp-4] mov di,ax 3094: push WORD PTR [bp-10] mov ax,si mov dx,WORD PTR [bp-2] add ax , 1342 push dx push ax mov cx , si mov bx , dx add cx, 576 push dx push cx lea cx , WORD TR [si+986 ] push dx push cx mov WORD PTR [bp-260],ax mov WORD PTR [bp-258],dx lea dx,WORD PTR [bp-218] push ss push dx mov WORD PTR [bp-264],CX mov WORD PTR [bp-262],bx push cs call NEAR PTR Get_Pitch add sp , 18 les bx,DWORD PTR [bp-4] push ds lea di,WORD PTR [bx+1278] lea si,WORD PTR [bp-34] mov ax,ss TRUESPEECH DECOD ENDP Parkors_To_Lpc PROC FAR enter 56,0 push di push si mov ax,WORD PTR [bp+14] mov dx,WORD PTR [bp+16] mov di,ax mov WORD PTR [bp-4],dx mov ax,WORD PTR [bp+10] mov dx,WORD PTR [bp+12] mov cx,ax mov WORD PTR [bp-8],dx lea bx,WORD PTR [bp-32] mov WORD PTR [bp-2],8 $F3111: mov ax, ORD PTR [bp-32] neg ax sar ax,3 mov es,WORD PTR [bp+8] mov v.'ORD PTR es:[bx],ax mov WORD PTR [bp-10],l lea a ,WORD PTR [bx+2] mov WORD PTR [bp-14],ax mov WORD PTR [bp-l2],es mov WORD PTR [bp-8],2 $F3114: mov ax,WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov cx.WORD PTR [bp-10] add cx,cx push ds lea di,WORD PTR [bp-48] mov si,ax push ss pop es mov ds,dx ASSUME DS: NOTHING shr cx,l rep movsw adc cx,cx rep movsb pop ds ASSUME DS: DGROUP mov WORD PTR [bp-16],0 cmp WORD PTR [bp-10],0 jg $JCC1403 jmp $FB3119 $JCC1403: mov si, ORD PTR [bp-8] lea di,WORD PTR [bp-50][si] mov ax, ORD PTR [bp+6] mov dx,WORD PTR [bp+8]. mov si,ax mov WORD PTR [bp-2 ] , dx i f f mov ax,WORD PTR ss: [di] cwd push dx push ax push WORD PTR [bp-50] push WORD PTR [bp-52] call FAR PTR aFlmul mov es,WORD PTR [bp-2] mov cx,ax mov ax,WORD PTR es: [si] mov bx,dx cwd shr dx, 1 rcr ax, 1 rcr dx, l xchg d ,ax and ax,-32768 mov WORD PTR [bp-56],ax mov WORD PTR [bp-54],dx mov ax,cx mov dx,bx add ax,WORD PTR [bp-56] adc dx,WORD PTR [bp-54] add ah,64 adc dx,0 mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx, 1 ° rcr ax, 1 sar d , 1 rcr ax,1 sar d , 1 rcr ax,1 sar dx, 1 rcr ax, 1 sar dx, l rcr ax, 1 sar dx, 1 rcr ax, l sar dx, l rcr ax, l mov WORD PTR es:[si],ax sub di,2 add si, 2 dec WORD PTR [bp-6 ] jne $F3 117 $FB3119 : mov ax, ORD PTR [bp+18] mov dx,WORD PTR [bp+20] mov di,ax mov WORD PTR [bp-8],dx mov ax,WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov si,ax mov WORD PTR [bp-2],dx mov ORD PTR [bp-6],8 $F3120: mov es,WORD PTR [bp-8] mov bx,di add di,2 mov ax,WORD PTR es:[bx] mov es.WORD PTR [bp-2] imul WORD PTR es: [si] mov al.ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar d ,l rcr ax,i sar dx,l rcr a ,1 sar dx,l rcr ax,i sar dx,l rcr ax,l sar dx,l rcr ax,i sar dx,l rcr ax,l sar dx,l rcr ax,l mov WORD PTR es:[si],ax add si,2 dec WORD PTR [bp-6] jne SF3120 mov ax,WORD PTR [bp-32] pop si pop di leave ret nop Parkors_To_Lpc ENDP Compute_Frame_Lpc PROC FAR enter 22,0 push di push si mov WORD PTR [bp-2],10923 cmp WORD PTR [bp+18 ,0 jne $13137 mov ax,WORD PTR [bp+14] mov dx,WORD PTR [bp+16] push ds mov si,ax mov ds,dx ASSUME DS: NOTHING les di,DWORD PTR [bp+6] mov cx,8 rep movsw pop ds ASSUME DS: DGROUP mov bx,W0RD PTR [bp+6] mov ax,WORD PTR [bp+10] mov dx,WORD PTR [bp+12] push ds lea di,WORD PTR [bx+16] mov si,ax $F3139: mov ax, 10923 les bx,DWORD PTR [bp-4] imul WORD PTR es:[bx] mov cx,ax mov ax, 10923 mov es,W0RD PTR [bp-10] mov bx,dx imul WORD PTR es:[di] mov WORD PTR [bp-18],ax mov WORD PTR [bp-16],dx add ax,cx adc dx,bx mov ORD PTR [bp-22],ax mov WORD PTR [bp-20],dx add ax.cx adc dx,bx add ah, 64 adc dx,0 mov al,ah mov ah,dl mov d1,dh add dh,dh sbb dh,dh sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, l sar dx, l rcr ax,l sar dx, 1 rcr ax,l sar dx, 1 rcr ax, 1 sar rix, 1 rcr ax, l sar dx, l rcr ax, 1 . mov es,WORD PTR [bp-6] mov WORD PTR es:[si],ax mov ax,WORD PTR [bp-22] mov dx,WORD PTR [bp-20] add ax,WORD PTR [bp-18] adc dx.WORD PTR [bp-16] add ah,64 adc dx,0 mov al,ah mov ah,dl mov dl.dh add dh,dh sbb dh,dh sar dx, 1 rcr ax, 1 sar dx, 1 .-- a*.! sar dx,l rcr ax,l sar dx,l rcr ax, 1 sar dx,l rcr ax,l sar dx,l rcr ax,l sar dx, 1 rcr ax, 1 mov WORD PTR es: [si+16] ,ax add si,2 add di,2 add WORD PTR [bp-4],2 dec WORD PTR [bp-14] je SJCC1968 jmp SF3139 $JCC1968: $13138: les bx,DWORD PTR [bp+6] mov ax, ORD PTR [bp+10] mov dx,WORD PTR [bp+12] push ds lea di,WORD PTR [bx+32] mov si,ax Compute_Frame_Lpc ENDP Get_Pitch PROC FAR enter 436,0 push di push si les bx,DWORD PTR [bp+18] add bx,20 mov si,WORD PTR [bp+22] add si,si mov ax,WORD PTR es:[bx][si] mov ORD PTR [bp-436],ax cmp ax,127 jne $13161 xor ax,ax mov cx,60 mov bx,WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov di,bx mov es,dx rep stosw pop si pop di leave ret 61: mov ax, ORD PTR [bp-436] mov cx,25 cwd idiv cx imul cx,ax,-25 add cx,WORD PTR [bp-436] mov WORD PTR [bp-2],cx mov si,WORD PTR [bp+22] and si,-2 mov bx,WORD PTR [bp+18] add ax,WORD PTR es: [bx+16] [si] add ax,18 mov WORD PTR [bp-4],ax mov ax,WORD PTR [bp+10] mov dx,WORD PTR [bp+12] mov cx,l46 push ds lea di,WORD PTR [bp-434] mov si,ax push ss pop es mov ds,dx ASSUME DS: NOTHING rep movsw pop ds ASSUME DS: DGROUP lea ax,WORD PTR [bp-142] mov WORD PTR [bp-12],ax mov WORD PTR [bp-10],ss lea ax, ORD P <._.<. [bp-144] mov cx,WORD PTR [bp-4] add CΛ.CX sub ax,cx mov WORD PTR [bp-8],ax mov WORD PTR [bp-6],ss mov ax, ORD PTR [bp-2] mov cx,ax shl ax, 2 add ε:.,cx add ax, ax add ax, ORD PTR [bp+14] mov dx,WORD PTR [bp+16] mov si, ax mov WORD PTR [bp -14],dx mov ax,WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov rii,ax mov WORD PTR [bp -18],dx mov WORD PTR [bp-22] ,60 69: les bx,DWORD PTR [bp-8] add WORD PTR [bp-8],2 mov ax,WORD PTR es:[bx] mov es,WORD PTR [bp-14] mov bx,si add εi,2 imul WORD PTR es:[bx] mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],dx mov bx,si sub si, 2 mov ax,WORD PTR es:[bx] les bx,DWORD PTR [bp-8] imul WORD PTR es: [bx] add ax,WORD PTR [bp-4] adc dx,WORD PTR [bp-2] add ah, 32 adc riκ, 0 mov ?,1,ah mov ah,dl mov d1,dh add dh,dh sbb dh,dh sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, l sar dx, 1 rcr nx, 1 sar dv, I rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, l mov es,WORD PTR [bp-18] mov bx,di add di ,2 mov ORD PTR es:[bx],ax les bx,DWORD PTR [bp-12] add WORD PTR [bp-12],2 mov WORD PTR es:[bx],ax dec WORD PTR [bp-22] jne SF3169 xor ax,ax mov cx,60 mov bx.WORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov di ,bx mov es,dx rep stosw mov WORD PTR [bp-2],6 lea bx,WORD PTR [bp-22] mov di.WORD PTR [bp+18] mov cx,WORD PTR [bp+22] $F3194: mov ax.cx add ax,cx mov si,di mov es,W0RD PTR [bp+20] add si,52 add si,ax mov dx , W0RD PTR es : [si] mov s i , dx and dx , mov WORD PTR [bp-6 ] , dx sar si,2 mov d".,si mov _ • • L ,di add si,ax mov .'ORD PTR es: [si+52],dx lea si, ORD PTR [di+28] add si,ax mov si, ORD PTR es: [si] shl si,2 add si,WORD PTR [bp-6] add ci.si add si,WORD PTR [bp+10] mov es,W0RD PTR [bp+12] mov a ,WORD PTR es: [si] mov WORD PTR ss:[bx],ax sub bx,2 dec WORD PTR [bp-2] jns 573194 mov WORD PTR [bp-16],30 mov ,-,..,WORD PTR [bp+14] mov d>:,WORD PTR [bp+16] add =.:•:,60 mov '."..F.D PTR [bp-4],ax mov W ΠD PTR [bp-2],dx mov si,WORD PTR [bp+22] add bx,di mov ex, ORD PTR es: [bx+36 mov dx,W0RD PTR es: [bx+38] mov WORD PTR [bp-38],ax mov WORD PTR [bp-36],dx mov a1,ah mov επ,d1 mov d1,dh add dh,dh sbb dh,dh sar dx,l mov WORD PTR [bp-8] ,ax mov WORD PTR [bp-14],3 lea a , ORD PTR [bp-34] mov WORD PTR [bp-20],ax mov WORD PTR p-18 ] , ss mov WORD PTR [bp-6],0 mov ax, ORD PTR [bp+6] mov dx,WORD PTR [bp+8] mov WORD PTR [bp-12],ax mov WORD PTR [bp-10],dx mov bx,WORD PTR [bp-4] mov cx.WORD PTR [bp-8] mov i.WORD PTR [bp-14] $F3197: mov o>:,cx mov es.WORD PTR [bp-2] sub ax, ORD PTR es:[bx] js $13200 mov ax.cx sub ax, ORD PTR es:[bx] mov cx.ax add hκ,2 jmp S..CET $13201 nop $13200: dec di add bx,62 les si,DWORD PTR [bp-20] add WORD PTR [bp-20],2 mov εx,W0RD PTR es:[si] les si,DWORD PTR [bp-12] mov WORD PTR es:[si],ax $13201: or rii,di je $FB3199 add WORD PTR [bp-12],2 inc WORD PTR [bp-6] cmp WORD PTR [bp-6],30 ■ jl SF3197 $FB3199: mov ax, ORD PTR [bp+14] mov dx,W0RD PTR [bp+16] mov bx,ax mov WORD PTR [bp-2],dx mov cx,W0RD PTR [bp-38] and ch,127 mov di,4 mov WORD PTR [bp-6],30 mov ax, ORD PTR [bp+6] mov dx,WORD PTR [bp+8] add ax,60 mov ' r~D PT7 bp-12],ax mov ' " D PTR [bp-10],dx $F3203: mov ax,cx mov es,WORD PTR [bp-2] sub ax, ORD PTR es: [bx] js SI3206 les si,DWORD PTR [bp-20] add WORD PTR [bp-20],2 mov .-κ,WORD PTR es: [si] les -ι,DWORD PTR [bp-12] mov wor.D PTR es:[si],ax $13207: or di,di je $ΓB3205 $FB3205: mov i .WORD PTR [bp+28] mov si,WORD PTR [bp+10] mov es,WORD PTR [bp+12] mov a ,WORD PTR es: [si] cwd mov WORD PTR [bp-32 ,ax mov WORD PTR [bp-30 ,dx mov a , ORD PTR es: si+2] cwd mov WORD PTR [bp-28 ,ax mov WORD PTR [bp-26 / dx mov ax, ORD PTR es: si+4] cwd mov WORD PTR [bp-24 ,ax mov WORD PTR [bp-22 ,dx mov ax, ORD PTR es: si+6] cwd mov WORD PTR [bp-20 ,ax mov WORD PTR [bp-18 ,dx mov α>:,W0RD PTR es: si+8] cwd mov WORD PTR [bp-16 .ax mov WORD PTR [bp-14 ,dx mov ax, ORD PTR es: si+io] cwd mov WORD PTR [bp-12 ,ax mov WORD PTR [bp-10 ,dx mov ax, ORD PTR es: [si+12] cwd mov WORD PTR [bp-8],ax mov WORD PTR [bp-6],dx mov a , ORD PTR es:[si+14] cwd mov ORD PTR [bp-4],ax mov WORD PTR [bp-2],dx lea cx,WORD PTR [bp-32] push ss push cx push WORD PTR [bp+18] push WORD PTR [bp+16] push WORD PTR [bp+8] push WORD PTR [bp+6] mov WORD PTR [bp-36],si mov WORD PTR [bp-34],es call FAR PTR _IIR_Filt_Stream add sp,l2 ~~ mov es,WORD PTR [bp+30] mov a ,WORD PTR es: [di] les bx,DWORD PTR [bp-36] imul WORD PTR es:[bx] rcr ax,l mov ORD PTR [bp-32],ax mov ORD PTR [bp-30],dx mov e_?,WORD PTR [bp+30] mo a ,WORD PTR es: [di+2] mov cx,es mov es,WORD PTR [bp-34] imul WORD PTR es:[bx+2] mov al,ah mov nh,dl mov dl.dh add dh.dh sbb dh.dh sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ..: ■ :, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 sar dx, 1 rcr ax, 1 mov WORD PTR [bp-28],ax mov WORD PTR [bp-26],dX mov es , cx mov ••• cr.D PTR [bp-40],di mov b . i mov ORD PTR [bp-38],es mov ax, ORD PTR es:[bx+4] mov es,WORD PTR [bp-34] imul WORD PTR es: [si+4] mov al,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx, 1 rcr ax, l sar dx, l rcr .x,l rcr ax, 1 sar dx, 1 rcr ax,l sar dx, 1 rcr ax,l sar dx,l rcr ax,ι sar dx, l rcr ax, 1 mov WORD PTR [bp-24],ax mov WORD PTR [bp-22],dx mov ax, ORD PTR es: [bx+6] les bx,DWORD PTR [bp-36] imul WORD PTR es:[bx+6] mov «-.l,ah- mov a ,dl mov dl,dh add dh,dh sbb -.h,dh rcr ax,l sar dx,l rcr ax, l mov WORD PTR [bp-16],ax mov '"O D PTR [bp-14],dx les bx,DWORD PTR [bp-40] mov ax, ORD PTR es: [bx+10] les bx,DWORD PTR [bp-36] imul WORD PTR es:[bx+10] mov al,ah mov ah,dl mov dl,dh add d ,dh sbb nh,dh sar rix,ι rcr »x,ι rcr 'x,ι mov OPO PTR [bp-12],ax mov WORD PTR [bp-10],dx les bx,DWORD PTR [bp-40] mov ax,WORD PTfe es: [bx+12] les bx,DWORD PTR [bp-36] imul WORD PTR es:[bx+12] mov l,ah mov ah,dl mov dl,dh add dh,dh sbb dh,dh sar dx, 1 rcr e.x, 1 sar d , 1 rcr ax,l sar dx, 1 rcr ax,l sar dx, 1 rcr ax,l sar dx, 1 rcr ax, 1 sar dx, l rcr ?.;•:, 1 sar x, 1 rcr zx , l mov WORD PTR [bp-8],ax mov ORD PTR [bp-6],dx les bx,DWORD PTR [bp-40] mov ax,WORD PTR es:[bx+14] les bx,DWORD PTR [bp-36] imul WORD PTR es:[bx+14] les '.'.: , DWORD PTR [bp-36] mov ax,WORD PTR es:[bx] les bx,DWORD PTR [bp+32] imul WORD PTR es:[bx] mov al,ah mov WORD PTR [bp-32],ax mov WORD PTR [bp-30],dx les bx,DWORD PTR [bp-36] mov ax,WORD PTR es:[bx+2] les bx, DWORD PTR [bp+32] imul WORD PTR es:[bx+2] 172 rcr ax, 1 sar dx, 1 rcr a , 1 sar dx, I rcr , 1 sar x, 1 sar d.:,l rcr m.v TO D PTR [ bD-20 ] , ax mov TORD PTR [bp-18 ] , dx les bx, DWORD PTR [bp-36] mov ax,WORD PTR es:[bx+8] les bx,DWORD PTR [bp+32] imul WORD PTR es: [bx+8] mov ?).,a mov -...,dl mov c'j ,clh add ' ,- " h sbb - "' ...h sar i ■ : , I rcr <r.:,l sar dx, l rcr ε , 1 sar dx, l rcr rx,l sar dx, 1 rcr c>x,l rcr ρ.:,i sar -- • :-:, l rcr ε , l sr.r - "• •:, 1 rcr a.-:,! mov WCRD PTR [bp-16],ax mov WORD PTR [bp-14],dx push 0 push 32766 P'.sh -1 push -32766 mov ax,WORD PTR [bp+14] sar ax,2 sub ax , WORD PTR [bp+14 ] nog ax 174 TITLE prg.c .236D INCLUDELIB LLIBCA INCLUDELIB OLDNAMES.LIB _TEXT SEGMENT WORD PUBLIC 'CODE' _TEXT _DATA SEGMENT WORD PUBLIC 'DATA' _DATA E; " DS CONST S~- * :ENT WORD PUBLIC 'CONST' CONST _BSS s ■■• - •■ :ENT WORD PUBLIC 'BSS' _BSS EI-TDS DGROUP GROUP CONST, BSS, DATA ASSUME OS: DGROUP "" ~ ASSUME SS: NOTHING EXTRN ..fltused:ABS EXTRN Fssts:FAR EXTRN a~ "ssubsr:FAR EXTRN aFestsp:FAR EXTRN ' _ aFeIds:FAR EXTRN -"emuls:FAR EXTRN ' 'saddsrFAR EXTRN _«. " sstsp:FAR EXTRN aFslds:FAR EXTRN a.Fests:FAR EXTRN _ " aFfstsp:FAR EXTRN " fac:QWORD _TEXT SEGMENT ASSUM . CS: _TEXT PUBLI': _Iir_Filt Iir Filt PROC FAR enter 14,0 push si mov εx 'ORD PTR [bp+14] mov ox,WORD PTR [bp+16] mov WORD PTR [bp-14],ax mov WORD PTR [bp-12],dx mov ax,WORD PTR [bp+6] mov c::,WORD PTR [bp+8] mov si, x mov WORD PTR [bp-8],dx mov ax, ORD PTR [bp+10] mov dx,WORD PTR [bp+12] mov WORD PTR [bp-4],ax mov WORD PTR [bp-2],dx mov WORD PTR [bp-6],8 $F260: mov e3,WORD PTR [bp-8] mov b:-;,si add si, 4 call FAR PTR aFelds 176 les bx, ~ )WORL TR [bp-4] add K--.D PTR [bp-4],4 call FAR PTR aFe uls lea fc-:, WORD PTR [bp-1 ] push bx call FAR PTR aFsadds pop bx call FAR PTR aFsstsp dec WORD PTR [bp-6] jne 50 mov si,ax mov WORD PTR [bp-2],dx mov es,WORD PTR [bp-2] $F263 : lea b::,WORD PTR [si-4] mov ax, ORD PTR es:[bx] mov dx.WORD PTR es:[bx+2] mov o~ PTR es:[si],ax ιr->v V " n PTR es:[si+2],dx ε-"b = .. d r. . (.- ■ --) PTR [bp-6] j-2 i ~:. .3 l-aa b.:,WORD PTR [bp-14] en11 FAR PTR aFslds les bx,DWORD PTR [bp+6] call FAR PTR aFests ιr-?v bx , OFFSET fac cal l FAR PTR aF stsp mov a x , OFFSET fac F~ " P s - -tave ret Iir_Filt ENDP PUBLIC _Fir_Filt Fir Filt PROC FAR e"ter 13,0 '-sh si lαa bx,WORD PTR [bp+14] call FAR PTR aFslds lea bx,WORD PTR [bp-18] call FAR PTR aFssts 1-a bx.WORD PTR [bp-14] call FAR PTR aFsstsp mcv ax,WORD R [bp+6] Ji v dx.WORD PTR [bp+8] ir-v Ξ ■ . J - m~v RO PTR [bp-8],dx mcv ORD PTR [bp+10] mov d::,WORD PTR bp+12] mov WORD PTR [bp-4],ax mcv WORD PTR [bp-2],dx mcv V.' RD PTR [bp-6],8 $F277: m-v <?. ■ , vORD PTR [bp-8] ir-v !v:-. si a' " d .«?:. , . c-.ll FAR PTR aFelds 1-r. b-:,OWORD PTR [bp-4] a< " d K-JΠ PTR [bp-4],4 c-11 FAR PTR aFemuls lea bx.WORD PTR [bp-14] push bx call FAR PTR aFssubsr pe bX call FAR PTR aFsstsp d<-:c VTRD PTR [bp-6] _) ■• -. r . " -77 r-v ..:'.:> PTR [bp-6],7 ir-v ax, ORD PTR [bp+6] r-v dx,WORD PTR [bp+8] a-'d ax, 23 ιr~v si,ax 1.-.V WRD PTR [bp-2],dx mov e_?, ORD PTR [bp-2] $F280: 1-a ::,WORD PTR [si-4] ir-v a .'-ORD PTR es: [bx] ir-v dx.WORD PTR es: [bx+2] • r-v WORD PTR es: [si] ,ax ir-v W-RD PTR es:[si+2],dx s--b si, ■ d-.c WORD PTR [bp-6] . j--.e $F280 ir-v ax, ORD PTR [bp-18] r-v dx,WORD PTR [bp-16] les bx,DWORD PTR [bp+6] τ- ~ v WORD PTR es:[bx],ax V.-.V KOΓ.D PTR es:[bx+2],dx p si 1-a e r-=t r v si,WORD PTR [bp+14] ir-v ,-.χ, ORD PTR $T328 r-v x.WORD PTR $T328+2 mov WCΠD PTR [bp-16],ax m~v WORD PTR [bp-14],dx mcv TR [bp-12],0 cr $F2 c- 11 FAR PTR aFelds ' 1-s bx,DWORD PTR [bp-4] ε -d WORD PTR [bp-4],4 c- 11 FAR PTR aFemuls 1-a bx,WORD PTR [bp-16] p-sh bx c-.ll FAR PTR aFsadds r -p bx c-.ll FAR PTR aFsstsp _ " -.= WORD PTR [bp-10] j « e SF293 $FB2 "~ : r-: ax, WORD PTR [bp-16] r-v dx.WORD PTR [bp-14] ir-v WORD PTR fac,ax r v WORD PTR fac+2,dx r-v ax, OFFSET fac r~v r'x.ds P ~ P S1 1-.3V2 r. -? Dot_rrod ENDP Ff3LIC _Vec_Mult Vec r.ult PROC FAR enter 12,0 push si r-v l- :. r, ORD PTR [bp+14] cr by.,bx ] ] m-v κcr- PTR [bp-8],dx r-v < ■ ■ :-:. r. PTR [bp-6],bx $F305: l--s bx,DWORD PTR [bp-4] a-'d WORD PTR [bp-4],4 c-.ll FAR PTR aFelds me/NofSubFrames) True EQU .MODEL LARGE .386 •CODE Ids si,ExcBlk mov ebx, o Igs bx,PitchCont counter=θ; ret Cons t ruct_Excitation_l ENDP END True EQU .MODEL LARGE .386 .CODE ABSDIFF_Dot_Prod PROC FAR16 C PUBLIC USES si di ds es eax ebx edx, TempVecc:FAR PTR WORD, ErrSlk:FAR PTR WORD, MinCrt:FAR PTR DWORD, OptIndex:FAR LOCAL Local_i:WORD, Local TempVect:WORD, Local_OptIndex:WORD, Local_ErrBlk:WOR mov ea , 0 les di,Err3lk mov Local_ErrBlk,di mov Local_i,PitchMin Ids si,TempVect mov Local_TempVec ,si mov edx, 7FFFFFFh /Local MinCrt Start_ABSDIFF: mov di,Local_ErrBlk mov eb , 0 mov cx,o . EPEAT counter=o WHILE counter LT 5 mov ax,WORD PTR es : [di + 4'count—] sub ax, ORD PTR ds : [si + 4'counter] Jge @F neg ax 9@: add ebx,eax counter=coun counter=5 neg ax add ebx,eax counter=counter+l ENDM cmp ebx,edx jge End ABSDIFF add di,10*4 add si, 10*4 add cx,l .UNTIL cx>=SubFrLen/lO End_ABSDIFF: cmp ebx,edx jge @F mov edx,ebx mov cx,Local_i mov Local_OptIndex,cx mov si, ocal_TempVect sub si,2 mov Local_TempVect, si mov cx,Local_i add cx, 1 mov Local_i,cx cmp cx.WORD PTR PitchMax jle Start_ABSDIFF Ids si,MinCrt mov DWORD PTR ds: [si] ,edv ids si,Op Index mov cx,Local_θDtIndex mov WORD PTR ds: [si] , cx ret ABSDIFF_Dot_Prod ENDP END ame/NofSubFrames) True EQU .MODEL LARGE .386 .CODE FIR Filt Stream PR D _ a:FAR -pτR WORD. "*' * " ~~' Ids si,Delay les di, Coeff mov ecx, o lgs cx.Data counter=0; WHILE counter LT SubFrLen ovsx ebx,WORD sal PTR gs: [ecx+2'counter] ebx,12 movsx eax, WORD PTR ds : [si+2* ( (0+counter) imul MOD 8 ) ] eax, DWORD PTR es : [di + 4*7] sub eb ,eax movsx eax, ORD PTR ds: [si+2* ( (1 + counter ) imul MOD 8 ) ] eax,DWORD PTR es.- [di + 4*6] sub ebx,eax movsx eax,WORD PTR ds: [si+2* ( (2 + counter ) imul MOD 8)] eax,DWORD PTR es:[di+4*5] sub eb ,eax movsx eax,WORD PTR ds: [si+2* { (3 + counter ) imul MOD 8)] eax,DWORD PTR es:[di+4*4] sub eb ,eax movsx eax, ORD PTR ds: [si+2* ( (4 + counter ) imul MOD 8)] eax,DWORD PTR es:[di+4*3] sub ebx,eax- movsx eax,WORD PTR ds: [si+2*'( (5+counter ) imul MOD 8)] eax,DWORD PTR es:[di+4*2] sub ebx,eax movsx eax,WORD PTR ds imul [si+2*( (6+counter) MOD 8)] eax,DWORD PTR es [di+4*l] sub eb ,eax movsx ea ,WORD PTR ds imul [si+2*( (7+counter) MOD 8)] eax,DWORD PTR es sub [di+4*0] ebx,eax mov ax,WORD PTR gs: [ecx+2*counter] mov WORD PTR ds: [si+2* ( (0+counter) sar ebx, 12 MOD 8)], ax mov WORD PTR gs: [ecx+2 'counter] ,bx counter=counter+l ENDM pop WORD PTR ds: [si+2*0] pop WORD PTR ds: [si + 2*l] pop WORD PTR ds: [si+2*2] pop WORD PTR ds: [si+2*3] pop WORD PTR ds: [si+2*4] pop WORD PTR ds: [si+2*5] pop WORD PTR ds: [si+2*6] pop WORD PTR ds: [si+2*7] ret FIR_Filt_Stream ENDP END Frame EQU 240 NofSubFrames EQU 4 SubFrLen EQU (Frame/NofSubFrames) ImpRespLen EQU 30 BitPerGain EQU 4 NumOfPulses EQU 7 PitchMax EQU 146 PitchMin EQU 20 LpcOrder EQU 8 True EQU 1 .MODEL LARGE .386 ■CODE PolePost_Filt_Stream PROC FAR16 C PUBLIC USES si di eax ebx ecx edx ds es gs, Data:FAR PTR WORD, Delay:FAR PTR WORD, Coeff:FAR PTR DWORD, PrCoef:DWORD, Low Ids si,Delay les di,Coeff; mov ecx, 0 lgs cx,Data counter=0; WHILE counter LT SubFrLen movsx ebx,WORD PTR gs: [ecx+2*counter] sal ebx, 12 ;ErrBlk[i] << 12 movsx eax,WORD PTR ds : [si+2*( (0+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*7] add ebx, eax movsx eax,WORD PTR ds: [si+2* ( (1+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*6] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (2+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*5] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (3+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*4] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (4+counter) MOD 8)] . imul eax,DWORD PTR es:[di+4*3] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (5+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*2] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (6+counter) MOD 8)] imul eax,DWORD PTR es.-[di+4*l] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (7+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*0] add ebx,eax mov eax,ebx ,-acc += 0x800L add ebx,DWORD PTR 8OOH sar ebx,12 mov WORD PTR ds: [si+2* ( (0+counter) MOD 8)] ,bx ;save delay[0] for the ne cmp ebx,DWORD PTR Upper_Limit j1 OF mov WORD PTR ds : [si+2* ( (0+counter) MOD 8)],32766 ; @@: ; cmp ebx,DWORD PTR Low_Lin.it ; jg @F mov WORD PTR ds: [si+2* ( (0+counter) MOD 8)], -32766 @@: ; mov ebx,eax restore ace ;acc += (PrCoef * (long) PfPoleDelay[1] ) >> 4 / movsx eax,WORD PTR ds: [si+2* ( (6+counter) MOD 8)]; load delay[1] imul eax,DWORD PTR PrCoef /multiply by PrCoef sar eax,4 ; add ebx,eax ■ ; ace -= ace >> 3 mov eax,ebx sar eax, 3 sub ebx,eax ;acc += 0x800L add ebx,DWORD PTR 8OOH ;ErrBlk[i] = (short) ( ace >> 12 ) and limit sar ebx, 12 ;acc >> 12 mov WORD PTR gs: [ecx+2*counter] ,bx :save ErrBl fi] cmp ebx,DWORD PTR Upper_Limit jl @F mov WORD PTR gs: [ecx+2*counter] , 32766 cmp ebx,DWORD PTR Low Limit , jg @F mov WORD PTR gs: [ecx+2'counter] , -32766 ret PolePost_Filt_Stream ENDP END Frame EQU 240 NofSubFrames EQU 4 SubFrLen EQU (Frame/NofSubFrames) ImpRespLen EQU 30 BitPerGain EQU 4 ■ NumOfPulses EQU 7 PitchMax EQU 146 PitchMin EQU 20 LpcOrder EQU 8 True EQU 1 .MODEL LARGE .386 .CODE IIR_Filt_Stream PROC FAR16 C PUBLIC USES si di eax ebx ecx edx ds es gs. Data.-FAR PTR WORD, Delay:FAR PTR WORD, Coeff:FAR PTR DWORD Ids si,Delay les di,Coeff; mov ecx,0 lgs cx,Data counter=0/ WHILE counter LT SubFrLen movsx ebx,WORD PTR gs: [ecx+2*counter] sal ebx,12 ,-ΞrrBlk[i] << 12 movsx eax,WORD .PTR ds: [si+2* ( (0+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*7] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (1+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*6] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (2+cσunter) MOD 8)] imul eax,DWORD PTR es:[di+4*5] add ebx,eax movsx eax,WORD PTR ds: [si+2*( (3+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*4] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (4+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*3] add eb ,eax movsx eax,WORD PTR ds: [si+2* ( (5+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*2] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (6+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*l] add ebx,eax movsx eax,WORD PTR ds: [si+2* ( (7+counter) MOD 8)] imul eax,DWORD PTR es:[di+4*0] add ebx,eax /ace += 0x800L add ebx,DWORD PTR 8OOH /ErrBlk[i] = (short) ( ace >> 12 ) and limit sar ebx,12 /ace » 12 mov WORD PTR ds: [si+2* ( (0+counter) MOD 8)],bx mov WORD PTR gs: [ecx+2*counter] ,bx cmp ebx,DWORD PTR 32766 j1 @F mov WORD PTR ds: [si+2* ( (0+counter) MOD 8)], 32766 mov WORD PTR gs: [ecx+2'counter] ,32766 ; cmp ebx,DWORD PTR -32766 jg ®F mov WORD PTR ds: [si+2* ( (0+counter) MOD 8) ] , -32766 mov WORD PTR gs: [ecx+2*counter] , -32766 END Frame EQU 240 NofSubFrames EQU 4 SubFrLen EQU (Frame/NofSubFrames) ImpRespLen EQU SubFrLen/2 BitPerGain EQU 4 NumOfPulses EQU 7 PitchMax EQU 146 PitchMin EQU 20 LpcOrder EQU 8 True EQU 1 .MODEL LARGE .386 .CODE Compute_Maxi_Pulse_A_πplitude PROC FAR16 C PUBLIC USES esi edi eax ebx ecx edx ErrBl)c:FAR PTR DWORD, ImpResprFAR PTR DWORD, CrossCorr:FAR PTR DWORD, Nmax:FAR LOCAL Local_MaxAmpInd:WORD, Local_Abs_Nmax:DWORD, Local_CrossCorr:DWORD, Local mov esi,0 Ids si,ErrBIk mov edi,0 les di,I__pResp mov eax,0 lgs ax,CrossCorr mov DWORD PTR Local_CrossCorr,eax mov DWORD PTR Local_Abs_Nmax,0 mov ecx, 0 .REPEAT mov ebx,DWORD PTR ds: [esi+ecx*4] sal ebx,12 couπter*0 WHILE counter LT ImpRespLen-1 mov eax,DWORD PTR ds: [esi+ecx*4+counter*4+4] imul eax,DWORD PTR es: [edi+counter*4+4] add ebx,eax counter=counter+l ENDM mov eax,Local_CrossCorr mov DWORD PTR gs: [eax+ecx*4] ,ebx ;To compare with Nmax we need to make abs(CrossCorr[j]) ;Still we have the flags according to the last addition jge §F neg ebx §6: cmp DWORD PTR Local_Abs_Nma ,ebx jg βP mov DWORD PTR Local_Abs_Nma ,ebx mov WORD PTR Local MaxAmpInd,cx @@: add cx,l .UNTIL ( cx >= SubFrLen/2 ) counter_l=ImpRespLen WHILE counter_l GT 0 / First load of ErrBlkfi] is equal to ErrBlk*ImpResp[θ] since ImpResp[0]=l ;Shift left by 12 is equal Q12 mov ebx,DWORD PTR ds: [esi+ecx*4] sal ebx,12 counter*=0 WHILE counter LT counter 1-1 mov eax,DWORD PTR ds:[esT+ecx*4+counter*4+4] imul eax,DWORD PTR es:[edi+counter*4+4] add ebx,eax counter=counter+l ENDM mov eax,Local__CrossCorr mov DWORD PTR~gs: [eax+ecx*4],ebx 7 o compare with Nmax we need to make abs(CrossCorr[j]) /Still we have the flags according to the last addition jge @F neg ebx §@: cmp DWORD PTR Local_Abs_Nmax,ebx jg 6F mov DWORD PTR Local_Abs_Nmax,ebx mov WORD PTR Local MaxAmpInd,cx θβr add cx,l counter_l=counter_l-l ENDM ' ds si,Nmax mov eax,DWORD PTR Local_Abs_Nmax mov DWORD PTR ds:[si],eax Ids si,MaxAmpInd mov ax, ORD PTR Local_MaxAmpInd mov WORD PTR dsr[si],ax ret Compute_Maxi_Pulse_Amplitude ENDP Searche_Pulse_Low PROC FAR16 C PUBLIC USES esi edi eax ebx ecx edx ds es gs, ErrBlkrFAR PTR DWORD, ImpResprFAR PTR DWORD, CrossCorr:FAR PTR DWORD, OccPos: LOCAL Local_MaxAmpInd:WORD, Local_Abs_Nmax:DWORD, Local_CrossCorr:DWORD, Loca mov esi,0 Ids si,ErrBlk mov edi,0 les di,ImpResp mov eax,0 ;Initialize Nmax lgs ax, max mov ebx,DWORD PTR gs:[eax] mov DWORD PTR Local_Abs_Nmax,ebx ;Initialize MaxAmpInd lgs ax,MaxAmpInd mov bx,WORD PTR gs:[eax] mov WORD PTR Local_MaxAmpInd,bx lgs ax,CrossCorr mov DWORD PTR Local_CrossCorr,eax lgs ax,OccPos mov DWORD PTR Local_OccPos,eax mov ecx, 0 .REPEAT mov eax,Local_OccPos cmp WORD PTR gs: [eax+ecx*2] ,0 jne Occupied_in_Low mov eax,Local_CrossCorr mov ebx,DWORD PTR gs: [eax+ecx*4] cmp ebx,0 jne ValidCross_in_Low mov ebx,DWORD PTR ds: [esi+ecx*4] sal ebx,12 counter»0 WHILE counter LT ImpRespLen-1 add ebx,eax counter=counter+l ENDM mov eax,Local_CrossCorr mov DWORD PTR gs: [eax+ecx*4] ,ebx Va1idCross_in_Low: sub ebx/0 jge IF neg ebx §@: cmp DWORD PTR Local Abs_Nmax,ebx jg @ F mov DWORD PTR Local_Abs_Nmax,ebx mov WORD PTR Local MaxAmpInd,cx §§: Occupied_in_Lowr add cx,l .UNTIL ( cx >- SubFrLen/2 ) Ids si, max mov eax,DWORD PTR Local_Abs_Nmax mov DWORD PTR ds:[si],eax ~ Ids si,MaxAmpInd mov ax,WORD PTR Local__MaxAmpInd mov WORD PTR ds:[si],ax ret Searche_Pulse_Low ENDP Searche_Pulse_High PROC FAR16 C PUBLIC USES esi edi eax ebx ecx edx ds es g ErrBUc:FAR PTR DWORD, ImpResp:FAR PTR DWORD, CrossCorr:FAR PTR DWORD, OccPo LOCAL Local MaxAmpInd:WORD, Local_Abs_Nmax:DWORD, Local_CrossCorr:DWORD, Loc mov esi,0 Ids si,ErrBlk mov edi,0 les di,ImpResp mov eax,0 lgs ax,Nmax mov ebx,DWORD PTR gs:[eax] mov DWORD PTR Local_Abs_Nmax,ebx lgs ax,MaxAmpInd mov bx,WORD PTR gs:[eax] mov WORD PTR Local_MaxAmpInd,bx lgs ax,CrossCorr mov DWORD PTR Local_CrossCorr,eax lgs ax,OccPos mov DWORD PTR Local_OccPos,eax mov ecx, SubFrLen/2 counter_l=ImpRespLen WHILE counter_l GT 0 mov eax,Local_OccPos cmp WORD PTR gs: ~ eax+ecx*2] ,0 jne @F mov eax,Local_CrossCorr mov ebx,DWORD PTR gs:[eax+ecx*4] cmp ebx,0 jne 8F mov ebx,DWORD PTR ds: [esi+ecx*4] sal ebx,12 counter«0 WHILE counter LT counter 1-1 mov eax,DWORD PTR dsr [esϊ+ecx*4+counter*4+4] imul eax,DWORD PTR esr [edi+counter*4+4] add ebx,eax counter»counter+l ENDM mov eax,Local_CrossCorr mov DWORD PTR gs: [eax+ecx*4] ,ebx sub ebx, 0 jge §F neg ebx ■ ' : mov eax,Local_θccPos cmp WORD PTR gs: [eax+ecx*2] , 0 jne @F cap DWORD PTR Local_Abs_Nmax,ebx jg § F mov DWORD PTR Local_Abs_Nmax,ebx mov WORD PTR Local_MaxAmpInd,cx ' ' : add cx,l counter_l=counter 1-1 ENDM Ids si,Nmax mov eax,DWORD PTR Local_Abs_Nmax mov DWORD PTR ds:[si],eax Ids si,MaxAmpInd mov ax,WORD PTR Local_MaxAmpInd mov WORD PTR ds:[si],ax ret Searche_Pulse_High ENDP END

Claims: CLAIMS l . A compression/decompression system for audio signals, the system comprising: an audio signal compression unit for representing an input audio signal as a collection of parameters, wherein said parameters are a remnant excitation pulse sequence, a set of spectral coefficients and a set of pitch parameters; a decompression unit for utilizing said pitch parameters and remnant excitation pulse sequence to produce a reconstructed excitation signal and for utilizing said spectral coefficients to filter said reconstructed excitation signal into a speech waveform. 2. A system according to claim 1 and wherein said decompression unit comprises: a first-in-first-out (FIFO) buffer in which are stored residual excitation signals; a selector for utilizing said pitch parameters to reconstruct said reconstructed excitation signal from portions of said stored residual excitation signals, for linearly combining said reconstructed excitation signal with a remnant excitation signal formed at least from said remnant excitation pulse sequence into a residual excitation signal and for providing said residual excitation signal to said FIFO buffer; and a filter operating with said spectral coefficients to filter said residual excitation signal into said speech waveform. . . 3. A system according to claim 1 wherein said decompression unit additionally comprises a buffer control unit for adding said reconstructed excitation signal into said FIFO buffer. 4 . A system according to claim 1 and wherein said d ecompression unit additionally comprises a pos -filter which filters said speech waveform. 5. A system according to claim 1 and wherein said compression unit comprises: a short-term predictor responsive to said input audio signal for determining eight spectral coefficients and for generating a residual signal by utilizing said spectral coefficients to filter out short-term correlations in said input audio signal; and a two-step long-term predictor, operative on said residual signal, for determining said pitch parameters, wherein said pitch parameters are formed of a rough estimate and a second-order correction, and for generating a remnant signal by utilizing said pitch parameters to filter out long-term correlations in said residual signal. 6. A system according to claim 5 and wherein said compression unit also comprises a multi-pulse analyzer for producing said remnant excitation pulse sequence from said remnant signal. 7. A system according to claim 6 and said multi-pulse analyzer generates seven pulses and a gain to represent said remnant excitation pulse sequence. 8. A system according to claim 6 and wherein said compression unit comprises coding means for providing coded versions of the following parameters: said spectral coefficients, rough pitch estimate, second-order correction and remnant excitation pulse sequence and a gain, and said decompression unit comprises a decoder for decoding said coded parameters. 9. A decompression unit for audio signals, the unit comprising: a reception unit for receiving eight spectral coefficients, a set of pitch parameters and a remnant excitation pulse sequence; a first-in-first-out (FIFO) buffer in which are * 5 stored residual excitation signals; , a selector for utilizing said pitch parameters to reconstruct a reconstructed excitation signal from portions of said stored residual excitation signals, for linearly combining said reconstructed excitation signal with a remnant excitation 10 signal formed at least from said remnant excitation pulse sequence into a residual excitation signal and for providing said residual excitation signal to said FIFO buffer; and a filter operating with said spectral coefficients to filter said residual excitation signal into said speech 15 waveform. 10. A unit according to claim 9 and wherein said decompression unit additionally comprises a post-filter which filters said speech waveform. 20 11. A method for compressing and decompressing audio signals, the method comprising the steps of: representing an input audio signal as a collection of parameters, wherein said parameters are a remnant excitation 25 pulse sequence, a set of spectral coefficients and a set of pitch parameters; utilizing said pitch parameters and remnant excitation pulse sequence to produce a reconstructed excitation signal and utilizing said spectral coefficients to filter said reconstructed 30 excitation signal into a speech waveform. 12. A method according to claim 11 and wherein said step of utilizing includes the steps of: having residual excitation signals stored in a FIFO ~ 35 buffer; utilizing said pitch parameters to reconstruct said reconstructed excitation signal from portions of said stored residual excitation signals, linearly combining said reconstructed excitation signal with a remnant excitation signal formed at least from said remnant excitation pulse sequence into a residual excitation signal and providing said residual excitation signal to said FIFO buffer; and filtering said residual signal into a speech waveform by utilizing said spectral coefficients. 13. A method according to claim 12 and including the step of transferring said linear combination into said FIFO buffer. 14. A method according to claim 11 and including the step of post-filtering the output signal of said step of filtering. 15. A method according to claim 11 and wherein said step of utilizing comprises the steps of: determining eight spectral coefficients from said input signal and generating a residual signal by utilizing said spectral coefficients to filter out short-term correlations in said input audio signal; and determining, from said residual signal, said pitch parameters, wherein said pitch parameters are formed of a rough estimate and a second-order correction, and generating a remnant signal by utilizing said pitch parameters to filter out long-term correlations in said residual signal. 16. A method according to claim 15 and wherein said step of utilizing also comprises the step of multi-pulse analyzing said remnant signal thereby to produce said remnant excitation pulse sequence. 17. A method according to claim 16 and wherein said step of multi-pulse analyzing produces seven pulses and a gain as a representation of said remnant excitation pulse sequence. 18. A method according to claim 11 and wherein said step of utilizing comprises the step of providing coded versions of t h e following parameters: said spectrum, rough pitch estimate, second-order correction and remnant excitation pulse sequence and a gain and wherein said step of decompressing comprises the step of decoding said coded parameters. 19. A compression/decompression system for audio signals, the system comprising: an audio signal compression unit coupled to an input audio signal and having an remnant excitation pulse sequence output line, a spectral coefficient output line and a pitch parameters output line; a decompression unit having a remnant excitation pulse sequence input line, a spectral coefficient input line and a pitch parameters input line and a speech waveform output line. 20. A system according to claim 19 and wherein said decompression unit comprises: a first-in-first-out (FIFO) buffer in which are stored residual excitation signals; a selector for utilizing said pitch parameters to reconstruct said reconstructed excitation signal from portions of said stored residual excitation signals, for linearly combining said reconstructed excitation signal with a remnant excitation signal formed at least from said remnant excitation pulse sequence into a residual excitation signal and for providing said residual excitation signal to said FIFO buffer; and a filter operating with said spectral coefficients to filter said residual excitation signal into said speech waveform.

Inventors: BIALIK LEON, BIALIK, LEON
Applicants: DSP GROUP INC, DSP GROUP, INC.
Application year: 1994
Main classification: G10L3
IPC codes: G01R29, G10L19, H03M7