1. Field of the Invention The present invention relates to a waveform data interpolation device and a waveform data interpolation program for calculating a waveform value at an arbitrary waveform position on waveform data which indicates, as waveform sample values, a plurality of waveform values sampled at different waveform positions.
2. Description of the Related Art
Some music sound production apparatuses such as electronic music instruments, etc. calculate a waveform sample value (a waveform value) of a music sound to be produced, by using waveform data indicating, as waveform sample values, a plurality of waveform values sampled at different waveform positions. Such a music sound production apparatus calculates waveform values other than some sampling points by interpolation, in order to produce music sounds at various pitches based on one piece of waveform data. As the result of calculating waveform values other than the sampling points by interpolation, it is possible to produce a music sound at a pitch assigned to a pressed key on the keyboard, or add acoustic effects such as detuning, vibrato, etc.
In linear interpolation as shown in
Since linear interpolation has the above-described problem, interpolation with a higher interpolation accuracy is practiced. A waveform data interpolation device disclosed in, for example, the publication of Japanese Patent No. 3223280 is raised as one that implements a conventional method of such interpolation. The method of interpolation implemented by this conventional waveform data interpolation device will be specifically explained with reference to
The interpolation method of the conventional waveform data interpolation device disclosed in the publication of Japanese Patent No. 3223280 is as follows. First, a first curve Y1(x) is found, which runs on the waveform sample values of two sampling points prior to an arbitrary waveform position on waveform data, and the waveform sample value of one sampling point posterior to that arbitrary waveform position. Next, a second curve Y2(x) is found, which runs on the waveform sample value of one sampling point prior to that waveform position, and the waveform sample values of two sampling points posterior to that waveform position. Then, a third curve Ys(x) is found, which runs between Y1(x) and Y2(x) (for example, the average of Y1(x) and Y2(x)). A value on Ys(x) is calculated as the interpolation value of that waveform position. For this purpose, in
In
d2=L+2−L0
d1=L+1−L0
d0=L0−L−1 (1)
Further, the respective values of difference δ−1 to δ+1 can be calculated as follows.
δ+1=L+2−L+1
δ0=L+1−L0
δ−1=L0−L−1 (2)
The conventional waveform data interpolation device disclosed in the publication of Japanese Patent No. 3223280 realizes a higher interpolation accuracy by performing the above-described interpolation. However, due to the interpolation in this manner, the device requires more calculations than required in linear interpolation.
Calculations for interpolation can be done not only by software processing, but by hardware. As the amount of calculations grows, a heavier load is put on the hardware, not only in the case where the calculations are done by hardware processing, but also in the case where the calculations are done by software processing. Thus, in order that processes with a heavier load can be done properly, it is necessary to prepare a processing device with a higher performance, or prepare a processing device limited to this purpose only. Therefore, it is desired that the amount of calculations be reduced as much as possible.
It is common that the hardware for performing calculations for interpolation will have a more complex structure and be larger-scaled as the amount of calculations increases. These accompanying situations both increase the manufacturing costs. Thus, it is desirable that the amount of calculations be reduced also in the case where the calculations are done by hardware.
The object of the present invention is to provide a waveform data interpolation device which performs interpolation with a high interpolation accuracy, by a less amount of calculations than that in a conventional calculation method.
To achieve the above object, a waveform data interpolation device according to a first aspect of the present invention is intended for calculating a waveform value at an arbitrary waveform position on waveform data which indicates, as waveform sample values, a plurality of waveform values sampled at different waveform positions, and comprises:
a computing unit which approximates a difference obtained by subtracting a positive decimal fractional value from 1 with a value obtained by inverting all bits of the positive decimal fractional value, thereby to derive a result of multiplication between the positive decimal fractional value and the difference; and
an interpolation unit which calculates, as a waveform sample value of the arbitrary waveform position on the waveform data, a value on a third curve running between a first curve which runs on waveform sample values of two sampling points prior to the arbitrary waveform position and a waveform sample value of one sampling point posterior to the arbitrary waveform position and a second curve which runs on the waveform sample value of one sampling point prior to the arbitrary waveform position and waveform sample values of two sampling points posterior to the arbitrary waveform position, by using the computing unit.
It is preferred that the computing unit derive the result of multiplication by calculating exclusive logical sums and adding the calculated exclusive logical sums. The interpolation unit may input a value obtained by cutting off a predetermined number of least significant bits representing the positive decimal fractional value to the computing unit as the positive decimal fractional value.
The first curve and the second curve may be both quadratic curves, and the third curve may be the average of the first curve and the second curve.
To achieve the above object, an electronic music instrument according to a second aspect of the present invention comprises the waveform data interpolation device described above.
To achieve the above object, a computer-readable recording medium according to a third aspect of the present invention is a computer-readable recording medium which stores a program to be applied to a computer for calculating a waveform value at an arbitrary waveform position on waveform data which indicates, as waveform sample values, a plurality of waveform values sampled at different waveform positions, and the program is a waveform data interpolation program for executing:
a computing procedure for approximating a difference obtained by subtracting a positive decimal fractional value from 1 with a value obtained by inverting all bits of the positive decimal fractional value, thereby to derive a result of multiplication between the positive decimal fractional value and the difference; and
an interpolating procedure for calculating, as a waveform sample value of the arbitrary waveform position on the waveform data, a value on a third curve running between a first curve which runs on waveform sample values of two sampling points prior to the arbitrary waveform position and a waveform sample value of one sampling point posterior to the arbitrary waveform position and a second curve which runs on the waveform sample value of one sampling point prior to the arbitrary waveform position and waveform sample values of two sampling points posterior to the arbitrary waveform position, by using the computing procedure.
It is preferred that the computing procedure derive the result of multiplication by calculating exclusive logical sums and adding the calculated exclusive logical sums. The interpolating procedure may input a value obtained by cutting off a predetermined number of least significant bits representing the positive decimal fractional value to the computing procedure as the positive decimal fractional value.
These objects and other objects and advantages of the present invention will become more apparent upon reading of the following detailed description and the accompanying drawings in which:
Embodiments of the present invention will be specifically explained below with reference to the drawings.
<First Embodiment>
As shown in
The CPU 1 controls the entire instrument by executing the program stored in the program memory 2. By executing the program, the CPU 1 scans, for example, the keyboard 3 and the switch unit 4 at predetermined timings respectively. By the scanning, the CPU 1 detects the status of each key on the keyboard 3 and each switch of the switch unit 4. The CPU 1 compares the detection result with a former detection result, and thereby specifies any key or switch having changed its status and the content of the change. As a result, in a case where any key is specified that has changed its status, the CPU 1 gives an instruction to the sound generation unit 5 in accordance with the specified key or switch and the content of the change. By giving that instruction, the electronic music instrument emits a music sound in response to the user's play on the keyboard 3.
The waveform data stored in the waveform ROM 6 indicates a plurality of waveform values sampled at different waveform positions, as waveform sample values. Here, data in which each sampling point has a value of difference δ with respect to the waveform sample value immediately prior to the sampling point itself, is assumed as the waveform data. The respective values of difference δ are stored at different addresses in their orders. The CPU 1 first determines an address width (stepping width; hereinafter referred to as“reading pitch Δ”) that corresponds to the pitch of a music sound to be produced. Next, the CPU 1 accesses data at the above-described addresses in the waveform ROM 6 at each that address width to read out the values of difference δ. After this, according to the present embodiment, the CPU 1 controls the waveform data interpolation device mounted on the sound generation unit 5 to generate (calculate) an interpolation value.
In a case where a music sound to be produced occurs in response to a key being pressed on the keyboard 3, the CPU 1 outputs the value of the address (waveform start address) at which reading of the waveform data should be started, and a reading pitch Δ corresponding to the pitch of the music sound, to the sound generation unit 5. Further, in order to control an envelope to be added to the music sound, the CPU 1 outputs an envelope target level and a rate to the sound generation unit 5 if necessary. For example, an envelope target level designates the level of each portion forming the envelope, and a rate designates a time to be used for shifting to a level which should be reached by a next shifting. The form of an envelope to be added to a music sound is determined by the envelope target level and the rate.
The envelope target level and rate are input to an ENV generation block 5-3 of the sound generation unit 5. The ENV generation block 5-3 generates envelope data ENV for adding an envelope determined by these input data to the music sound to be produced, and outputs the generated envelope data ENV to a product-sum block 5-5. When a sustain portion in the envelope to be added is reached, the ENV generation unit 5-3 outputs a reach flag for notifying this to the CPU 1.
The reading pitch Δ is a value including a decimal point. A decimal-fraction address calculation block 5-2 is given the reading pitch Δ from the CPU 1, performs accumulation of the reading pitch Δ sequentially, and outputs the decimal fractional portion of each accumulated value as a decimal-fraction address x to the product-sum block 5-5. In a case where a carry occurs, the decimal-fraction address calculation block 5-2 outputs the carry to an integer-address calculation block 5-1.
The integer-address calculation block 5-1 receives the waveform start address from the CPU 1. Also, the integer-address calculation block 5-1 receives a waveform loop address from the waveform ROM 6. The waveform loop address indicates the range in which waveform data is repeatedly read out. The initial value of an integer address is the waveform start address (or the value thereof). The integer address is incremented each time the integer-address calculation block 5-1 receives a carry from the decimal-fraction address calculation block 5-2. When the integer address obtained after an increment exceeds the range in which the waveform data is repeatedly read out, the value is returned to the head value of the range. This makes it possible to calculate a waveform value irrespective of the length of an emission period of the music sound.
A waveform ROM data latch block 5-4 acquires a value of difference δ read out from the waveform ROM 6 based on the integer address calculated by the integer-address calculation block 5-1, performs accumulation, subtraction, etc. on the acquired value of difference δ, and sends a waveform accumulated value (waveform sample value of a sampling point) obtained by the accumulation and a waveform difference value obtained by the subtraction to the product-sum block 5-5.
The product-sum block 5-5 calculates an interpolation value by the method shown in
The decimal-fraction addresses x mentioned above indicate waveform positions at which interpolation values should be calculated. Assume that a decimal-fraction address x is given. A quadratic curve that runs on two sampling points prior to the waveform position x and one sampling point posterior to the waveform position x is assumed to be Y1(x). A quadratic curve that runs on one sampling point prior to the waveform position x and two sampling points posterior to the waveform position x is assumed to be Y2(x). The average of Y1(x) and Y2(x) is assumed to be Ys(x). The question to be considered below is how the curve Ys(x) will be expressed by the waveform values (waveform sample values) of the sampling points or their values of difference δ. Hereafter, the explanation will be given with reference to
In the coordinate system shown in
Assume that the quadratic curve Y2(x) that runs on the origin, (1, d1), and (2, d2) is represented as Y2(x)=ax 2+bx.
In case of x=1, the calculation results as follows.
Y2(x)=d1=a+b (3)
In case of x=2, the calculation results as follows.
Y2(x)=d2=4a+2b (4)
The calculation of equation (4)−equation (3)×2 results as follows.
2a=d2−2d1∴a=(½)(d2−2d1) (5)
Further, the calculation of equation (3)×4−equation (4) results as follows.
2b=4d1−d2∴b=(½)(4d1−d2) (6)
Therefore, when a and b represented by the equations (5) and (6) are substituted for a and b in the equation Y2(x)=ax2+bx, the following equation is obtained.
Y2(x)=(½)(d2−2d1)x2+(½)(4d1−d 2)x (7)
Likewise, assume that the quadratic curve Y1(x) that runs on (−1, −d0), the origin, and (1, d1) is represented as Y1(x)=ax2+bx.
In case of x=−1, the calculation results as follows.
Y1(x)=−d1=a−b (8)
In case of x=1, the calculation results as follows.
Y1(x)=d1=a+b (9)
The calculation of −equation (8)+equation (9) results as follows.
2a=d1−d0∴a=(½)(d1−d0) (10)
Further, the calculation of −equation (8)+equation (9) results as follows.
2b=d1+d0∴b=(½)(d1+d0) (11)
Therefore, when a and b represented by the equations (10) and (11) are substituted for a and b in the equation Y1(x)=ax2+bx, the following equation is obtained.
Y1(x)=(½)(d1−d0)x2+(½)(d1+d0) x (12)
When the actual waveform value L0 of the origin is added to the equations (7) and (12) in order to get the coordinate system back to its original, the results are as follows.
Y2(x)=(½)(d2−2d1)x2+(½)(4d1−d 2)x+L0 (13)
Y1(x)=(½)(d1−d0)x2+(½)(d1+d0) x+L0 (14)
When the average of the quadratic curves Y1(x) and Y2(x) is assumed as a curve Ys(x), it will be as follows.
Since d0 to d2 and L−1 to L+2 are in the relationship represented by the equations (1), (−d2+d1+d0) in the equation (15) is calculated by the following.
Further, when the equation (15) is transformed based on the relationship between δ−1 to δ+1 and L−1 to L+2 represented by the equations (2) and the equation (16), the following equation will be obtained.
Ys(x)=x*{(¼)(−δ+1+δ−1)*(1−x)+δ0}+L0 (17)
In the equation (17), multiplications are done at two positions represented by “*”. These multiplications are done in an order that the multiplication within { } is done, the succeeding addition is done, and then the remaining multiplication is done.
It is common in LSI (Large Scale Integration) circuit designing to employ a structure in which signals output from a flip flop (hereinafter referred to as“FF”) in synchronization with the same clock signal are passed through a combinational circuit to be input to an FF of the next stage. A multiplier can be constituted by a combinational circuit. However, as the width of the bits to be subjected to calculation becomes larger, the path of the multiplier tends to be a longer one along which many gates (elementary elements) have to be passed.
Such a path can be divided into a plurality of shorter paths by adding an FF or the like in the combinational circuit constituting the multiplier. For example, by inserting a single-stage FF for holding an intermediate result of the multiplier, it is possible to divide the path into a plurality of shorter paths. Since the insertion of the FF will make the outputting of a result take a period of 1 clock both before and after the FF, it will take the multiplier a period of 2 clocks to output its multiplication result. However, since such a combinational circuit can perform different multiplications before and after the FF, two multiplication results can be obtained during two clocks (pipeline calculation), if the multiplications are done continuously. In a case where FFs are inserted for two or more stages, it is as well possible to obtain one multiplication result per one clock.
In the above-described equation (17), it is necessary to treat the result of the first multiplication as the input value to be used for the next multiplication. In order to realize such a high utilization efficiency of a multiplier as described above, it is necessary not to spoil the calculation result obtained at each stage. Thus, in performing the multiplications in the equation (17), scheduling for making the multiplication using the result of the former multiplication to be performed will be complicated. In order to avoid this, according to the present embodiment, the equation (17) is transformed as follows.
Ys(x)=(¼)(−δ+1+δ−1)*x(1−x)+δ0*x+L0 (18)
According to the present embodiment, x(1−x) in the equation (18) is performed by a dedicated multiplier (hardware). Therefore, in the equation (18), multiplications are done at two positions represented by“*”, namely, (−δ+1+δ−1)*x(1−x) and δ0*x. It should be noted that since these multiplications at the two positions are not such that the result of one multiplication is used for the other multiplication, they have no calculative relationship. Hence, the calculation of the entire equation (18) can be performed with a simple scheduling.
Since x indicates the waveform position to be interpolated, it satisfies 1>x≧0. Since it is obvious that x≧0, i.e., x does not take a minus value, no bit is required for representing the plus or minus symbol in representing x by a binary value. Further, since x<1, all the bits can be used only for representing numbers at decimal places in representing x by a binary value. In this case, in order to calculate (1−x), it is, strictly speaking, necessary to add 1 as the lsb (least significant bit) after the values of all the bits representing x are inverted. As compared with this, according to the present embodiment, the following approximation is used for calculating (1 −x). That is, inversion of the values of all the bits representing x is only done, and addition of 1 as the lsb is omitted. By using this approximation, it is possible to calculate x(1−x) as follows. A specific explanation will be given with reference to
For obtaining the value of x(1−x) by using direct multiplication between x and (1−x), calculations as shown in (a) of
a[0]&−a[0]=a[1]&−a[1]=. . . . =a[7]&−a[7]=0
Further, regarding arbitrary values y and z, it is true that y&−z+−y&z=yˆz. Thus, the sum of the products of values at two positions which are in a line symmetry relationship with respect to a line that connects zeros (0) in (a) of
a[1]&−a[0]+a[0]&−a[1]=a[1]ˆa[0]
a[2]&−a[0]+a[0]&−a[2]=a[2]ˆa[0]
a[3]&−a[0]+a[0]&−a[3]=a[3]ˆa[0]
a[2]&−a[1]+a[1]&−a[2]=a[2]ˆa[1]
a[7]&−a[6]+a[6]&−a[7]=a[7]ˆa[6]
This enables x(1−x) to be calculated as the sum of the exclusive logical sums of the respective bits, as shown in (b) of
As shown in (c) of
According to the present embodiment, it is arranged that no carry be produced at each stage, since the two msbs (most significant bits) included in one of the two values to be added at each stage are“0 0”. Thus, as shown at the lowermost row in (c) of FIGS. 4C and 4D, the sum of the exclusive logical sums becomes a value represented by the total of 15 bits (including 0, 0, s2[6:0], s1[1:0], s0[3:0]).
By taking the approximation of one of x and (1−x) obtained by inverting the values of all the bits of the other in the above-described manner, it is possible to obtain the result of x(1−x) in the form of the sum of the exclusive logical sums. The number of combinations between the bits to be the objective of calculations is greatly reduced. Therefore, it is possible to greatly reduce the amount of calculations, as obvious from (a) and (c) of
The calculations for obtaining the sum of the exclusive logical sums are performed by the waveform ROM data latch block 5-4 and the product-sum block 5-5 in the sound generation unit 5. Thus, the structures and operations of these blocks 5-4 and 5-5 will be specifically explained with reference to
To begin with, the operation of the waveform ROM data latch block 5-4 will be specifically explained.
The register 501 stores the waveform value L0 at the sampling point at the origin in the coordinate system shown in
After the value of difference δ is stored in the register 502, the multiplexers 505 and 506 are caused to select their terminals“b” to instruct the adder-subtractor 507 to perform subtraction (SUB). By this subtraction, the result of a calculation −δ+1+δ−1 is stored in the register 509.
These operations are performed in response to the reading of a new value of difference δ from the waveform ROM 6. The contents stored in the registers 501, 503 and 504 are reset in response to a reset signal when new waveform data is assigned. Such a reset signal will be output by, for example, the CPU 1, or in accordance with an instruction therefrom.
Next, the operation of the product-sum block 5-5 will be specifically explained.
The registers 510 and 511 store the latest decimal-fraction address x output from the decimal-fraction address calculation block 5-2, and the latest envelope data (envelope value) ENV output from the ENV generation block 5-3, respectively. The computing unit 515 is the hardware for calculating the sum of exclusive logical sums, which derives the value of x(1−x) by the calculation method shown in (c) of
When the computing unit 515 calculates the value of x(1−x), the multiplexers 516, 517, and 518 are caused to select their terminals“a” to instruct the multiplier 519 and the adder 520 to perform calculations respectively. As a result, the multiplier 519 outputs the result of multiplication between a value, which is obtained by the value stored in the register 509 being reduced to its ¼ after subjected to rightward 2-bit shifting by the right 2-bit shifter 514 (the thusly obtained value=(¼)(−δ+1+δ−1)), and x(1−x). The adder 520 outputs the result of addition between the result of multiplication and the waveform value L0 (the result of addition=(¼)x(1−x)* (−δ+1+δ−1)+L0). This result of addition is stored in the register 521.
When the storage of the result of addition in the register 521 is completed, the multiplexers 516, 517, and 518 are next caused to select their terminals“b” to instruct the multiplier 519 and the adder 520 to perform calculations respectively. As a result, the multiplier 519 outputs the result of multiplication between the value of difference δ0 stored in the register 503 and the decimal-fraction address x. The adder 520 outputs the result of addition between this result of multiplication and the value stored in the register 521 (the result of addition=(¼)x(1−x)* (−δ++δ−1)+L0+xδ0). This result of addition is stored in the register 522.
When the storage of the result of addition in the register 522 is completed, the multiplexers 516, 517, and 518 are then caused to select their terminals“c” to instruct the multiplier 519 and the adder 520 to perform calculations respectively. As a result, the multiplier 519 outputs the result of multiplication between the value stored in the register 522 and the envelope value ENV. The adder 520 outputs the result of addition between this result of multiplication and 0 (the result of addition=ENV*[(¼)x(1−x)* (−δ+1+δ−1)+L0+xδ0]). This result of addition is stored in the register 523 and output to the accumulation block 5-6 as DCO outputs as time-divided.
As described above, according to the structure of the first embodiment, a difference obtained by subtracting a positive decimal fractional value from 1 is approximated by a value obtained by inverting all the bits representing the positive decimal fractional value, and multiplication between the positive decimal fractional value and the difference is performed independently. With the use of the result of the multiplication, a value on a third curve running between a first curve which runs on the waveform sample values of two sampling points prior to an arbitrary waveform position on waveform data and the waveform sample value of one sampling point posterior to the arbitrary waveform position, and a second curve which runs on the waveform sample value of one sampling point prior to the arbitrary waveform position and the waveform sample values of two sampling points posterior to the arbitrary waveform position, is calculated as the waveform sample value of the arbitrary waveform position.
By approximating a difference obtained by subtracting a positive decimal fractional value from 1 with a value obtained by inverting all the bits representing the positive decimal fractional value, it is possible to derive the result of multiplication between the positive decimal fractional value and the difference by, for example, calculating exclusive logical sums and adding the obtained sums. The number of combinations between the bits to be the objective of calculations can be greatly reduced as compared with a case where the difference and the positive decimal fractional value are multiplied. Accordingly, it is possible to greatly reduce the amount of calculations necessary for calculating a value on the third curve as the waveform sample value of the arbitrary waveform position.
<Second Embodiment>
δ0*x+L0 in the right-hand side of the equation (18) corresponds to the interpolation value obtained when linear interpolation is performed. The portion except this portion, i.e., (¼)(−δ+1+δ−1)*x(1−x) can be seen as a correcting value for the interpolation value that is calculated by using the value of difference δ in a section (between two continuous sampling points) prior to the section used for the linear interpolation and the value of difference δ+1 in a section posterior to the section used for the linear interpolation. The second embodiment seeks calculation of an interpolation value from this point of view.
The structure of an electronic music instrument on which the waveform data interpolation device according to the second embodiment is mounted is basically the same as that of the first embodiment. And the operations are also mostly the same. Thus, only such a part as different from the first embodiment will be explained by using the reference numerals used in the explanation of the first embodiment.
As shown in
In
If the number of bits to be received at the input where the output from the computing unit 515 is received is reduced further, the size of the multiplier to perform multiplication using that output can be reduced further. Therefore, the scale of the hardware for performing calculations for interpolation can also further be reduced. In a case where the calculations are performed by software processing, the memory capacity necessary for the processing can further be reduced.
Since (−δ+1+δ−1)*x(1−x) in the right-hand side of the equation (18) is multiplied by ¼ as a weighting factor, the accuracy of the output from the computing unit 515 is as precise as 10 bits, with 2 bits of 0 added as the msbs. Even in the case where only the 4 msbs of the decimal-fraction address x are input to the computing unit 515, a sufficiently accurate correcting value can be obtained as shown in
According to the embodiments (first embodiment and second embodiment) of the resent invention, the calculations for interpolation are performed by the hardware mounted on the sound generation unit 5. Alternatively, the calculations may be performed by software processing. The structure of the hardware is not limited to those of the embodiments described above, but may be modified in various manners.
Various embodiments and changes may be made thereunto without departing from the broad spirit and scope of the invention. The above-described embodiments are intended to illustrate the present invention, not to limit the scope of the present invention. The scope of the present invention is shown by the attached claims rather than the embodiments. Various modifications made within the meaning of an equivalent of the claims of the invention and within the claims are to be regarded to be in the scope of the present invention.
This application is based on Japanese Patent Application No. 2005-209244 filed on Jul. 19, 2005 and including specification, claims, drawings and summary. The disclosure of the above Japanese Patent Application is incorporated herein by reference in its entirety.
Number | Date | Country | Kind |
---|---|---|---|
2005-209244 | Jul 2005 | JP | national |