Sacado de aqui
[url]http://www.zonadepruebas.com/modules/newbb/viewtopic.php?topic_id=9854&forum=2
[/url]
Huy! Qué de tiempo!!!! Me has recordado un pequeño artículo que escribí hace la tira de años sobre esto mismo, para un fanzine que se llamaba "Playbyte" que se publicó en Sevilla, allá por 1993 más o menos.
Después de flipar como un enano al escuchar archivos MOD del Amiga en el altavoz interno del PC, estuve investigando. Tanto que mi proyecto de fin de carrera para la ingeneiría ténica en informática fue precisamente un editor/reproductor MOD para PC que soportaba el altavoz interno, entre otros dispositivos, como opción de salida de audio.
Pero antes, y debido a que yo no tenía ninguna tarjeta de sonido, en el verano de 1992, investigué cómo podría generarse sonido digital con el altavoz del PC. El resultado fue el siguiente artículo, más un programa con el que me era posible leer muestras digitales de disco, concretamente, un archivo VOC que un amigo mío (con más pelas que yo) me había grabado en su flamante Sound Blaster 2.0, y que contenía el "Jesus he knows me" de Genesis.
A la vuelta de las vacaciones, lo primero que hice fue quitar el pequeño altavoz interno del PC (que es una semitorre) y ponerle un pequeño amplificador con un altavoz más grande y un filtro para quitarle el pitido de alta frecuencia que se produce cuando se reproduce sonido digital usando la ténica que describo.
El artículo, junto con el código fuente de aquel reproductor, lo he encontrado. Estaba escrito en Word Perfect, pero en su momento lo pasé a PDF
Artículo en PDF
Verás que no hace falta hacer saltar una interrupción por cada fracción de tiempo, como dices en tu blog. Basta con una interrupción por cada sample que se quiere reproducir. Programando el timer 8254 adecuadamente, él solito excitará el altavoz la fracción de tiempo proporcional al valor del sample, para después desexcitarlo, hasta el próximo sample. De esata forma, la ralentización de la CPU es relativamente poca: un AT 286 puede reproducir sonido en background mientras ejecuta otra cosa (un juego). Con mi primer PC, un 386, podía escuchar un archivo MOD en background con una frecuencia de muestreo de 31990 Hz, mientras ejecutaba otro programa en una shell del DOS.
Cuando el ordenador es lento, la frecuencia de muestreo es baja, y puedes llegar a escuchar un pitido muy alto mezclado con la música que quieres oir. Si el ordenador es más rápido y puedes subir la frecuencia de muestreo hasta más allá de lo que soporta el oido, dejas de escuchar el pitido. Seguro que más de uno recuerda lo que le digo (basta con apagar el botón de "Turbo" del PC para notar cómo el sonido se hacía más lento y aparecía el molesto pitido).
No lo sabía entonces, pero uno de mis profesores se rió un montón cuando le expliqué mi "descubrimiento", pero es que resulta que "eso" ya se había inventado hace tiempo, y se llamaba "modulación PWM".
Como curiosidad, decir que DosBOX reconoce esta forma de usar el altavoz interno y la emula. Para Windows 3.1 llegó a existir un driver que usaba esta manera de reproducir sonido, de forma que cualquier usuario podía disfrutar de las entonces incipientes "Extensiones multimedia" de Windows.