Inferno #06
03 декабря 2004 |
|
For Coderz - How to get the sound device more bits.
How do I get the sound device more bits? Suppose we do not have DMA US, GS or Such devices, which give the hardware volume. Otherwise there would the problem was solved too simple (one subchannel in, for example, left ear give a volume of 64, the other in the same ear - With volume 1). We have a standard Spectrum with no more than Covox'om. So, for him there were at least three fundamentally different methods. 1. PWM (pulse width modulation). Signal with a frequency divided by intervals shorter than 1 / 20000 seconds in each of which contains two adjacent voltage levels. Depending on the ratio of durations of these levels within the time intervals at the exit from filter produced by these or other intermediate levels of stress. The condition of particle quency it is necessary that the signal is not whistling. 2. PWM. The same thing, but not alternate adjacent levels, and 0 and level. In addition to high ripple and low volume, this method contains the problem of implementation - unknown how to arrange for him a table to encode 16-bit real-time. 3. Method without a title. I thought to it is the name of the PCM (Pulse Code Modulation), but Michael Klinkovsky flatly refused to accept it, but without showing their istochnikov.Zdes the DAC is given signal level, rounded to the nearest snizu.Oshibka a presentation stored in the register and when it exceeds unit, this unit is added to the next in this TsAP.Iz register with the She, of course, this method vychitaetsya.Esli implement in hardware, then under the same switching frequency, it provides a higher frequency whistles than the PWM (which is advantage: less whistle heard.) disadvantage it on the ZX that cycle when programming in Z80 is obtained is longer than the peak rate of change data for the PWM. In PWM for the peak velocity in the port just spit out a row 2 bytes and more are waiting until they pass a standard time interval. If you want a level closer to the first spit bytes, PWM, simply divide these vyplevyvaniya pause more. AND so on. Need only a small block of routines, they are even smaller than the variations of the fractional part of the voltage level. In the case of Beeper'a methods (1) and (2) are equivalent and are being implemented particularly simply for 64 variants of fractional level (at a frequency of 22.4kHz, close to the standard 22100, it provides a margin of 96 strokes = 160-64 for thinking and crawling under subprogrammes). In this case there are only four semiconductor output with different mikropauzami modulo 4 and four semiconductors with different pause mikropauzami on modulo 4. They contain a lot before NOP and invoked with different addresses to adjust the pauses. It is only 500 bytes, including transition table. Can be implemented and more fractional levels, but then the number of sub-bounce sharply (thinking will have to make all the routines). Beeper a good substitute Covox and perfectly (!) replaces the AY on MCC method of blessed memory Monster / Sage. No sounds only on emulators (Unreal Speccy, ZXMAK, ZX Emul DOS, ZX Emul WIN, Z80 Stealth and others probably too). In the case of Covox the same 64-level fractional impossible to implement. Beeper for extreme levels were far from pure 0, and the net 1. They are difficult to use because distance to the adjacent levels due to the finite speed Z80 would be greater than the distance between all other adjacent levels. For Covox net (integer) levels yet must be used as a bridge between the highest possible level for the fractional previous pair (whole interleaved) and the lowest possible - for the next. A makeshift for These higher and lower differ from the nearest whole number of 11 processor cycles (themselves understand why). Consequently, between adjacent fractional levels should also be about 11 cycles of makeshift - for linearity. This is the ideal, in practice, have settle for 5 cycles and 32 levels (Instead of 16) when the sampling rate of 22.4 kHz, ie, the length of time interval PWM 5 * 32 = 160 cycles. It sounds a little worse 13-bit (instead of 12), t.k.dva fractional level fall. But on hearing 13-bit and 8 bit sound For as the heavens and the earth. Try it. We John'om tried. Where in the case Covox take time out the same thinking with the program? Done as follows: with fractional level of <0.5 levels of spit at the port in order junior-senior, at> 0.5 - in order of senior-junior. Then, in any case remains poltsikla free time. For Covox on KR572PA1 method (1) does not work - the noise level generated more than the standard 8 bits. When I was at the first experiment, I heard this noise, then Think for a glitch in the program, because 8 bits PA1 You can check directly, right in BASIC. Here's how: FOR n = 0 TO 255: OUT 251, n: OUT 251,0: NEXT n However, Vladimir Makarov, the question of his interpretation of the issue said: "hang up the capacitor between the output and the land. "Like, will help. But there are very good reason to assume that the Makarov is wrong. The point of current switches. They, unlike from the R-2R matrix trigger slowly. This means that the rapid alternation of bytes sent to the DAC 127-128-127 ... cause flipping keys in different phases, that at certain moments may sound, even as 0 or 255. If it switches instantly and issued only two adjacent levels, then the capacitor would not be needed. Capacitor voltage will only lead to the middle level, and what he is? He would have been in Between 127 and 128 (a necessary condition for the method sounds better than 8 bits) only for a very linear characteristic of the DAC. I do not believe so accurate it linearity. PA1 could probably be more effective in method (2) with alternating 0 and level, but this method needs a large table, it is not suitable for practical use. Naturally, I hang capacitor vsetaki tried it, but it does not help. Under emulators Unreal Speccy, ZX Emul 0.34 (DOS) and Z80 Stealth PWM for Covox improves the sound. Probably in the emulators used filters, smoothing out Covox, however, it is possible that it does sound karta.Drugie emulators have not been verified. Source SHIM.H - in the appendix. To him need 16-bit sempl.Pri hold buttons "P" and "Enter" audio device varies with Covox'a on Beeper or Covox-13, respectively. The default Beeper also emulated by Covox (to make it easier to compare the quality of sound), it is configured Tagged beeper. Port Covox configured Tagged covox. Before playing a sample deteriorates by 2 bits (divided by 4) to better hear the difference. But it is also possible to disable. A. Coder
Other articles:
Similar articles:
В этот день... 21 November