SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: kkklira en Martes 19 de Octubre de 2004, 23:35
-
Hola:
Se que antes de pedir ayuda debo investigar un poco por mi cuenta, pero como tengo poco tiempo escribire primero el mensaje e inmediatamente me pondre a investigar.
Lo que quiero es un codigo para reproducir musica desde c, esto implica tambien que pueda detenerlo en el momento adecuado o necesario, sin mas por el momento .
GRACIAS de antemano...
ATTE: kkklira :whistling:
-
musica o sonidos?
sonidos=
sound();--> recibe como parametro el valor de la frecuencia que debe sonar por el altavos del pc.
nosound();
musica:
depende el formato,
depende tambien si lo quieres hacer tu mismo o si quieres usa una libreria ya hecha.
-
Hola :hola:
Puedes usar la libreria fmod, que es facil de usar con archivos mid o wav.
La puedes usar tanto para hacer efectos sonoros como para poner musica de fondo
Un saludo :kicking:
-
Si la música está en formato WAV, puedes hacer una reproducción simplemente usando la función PlaySound. Si está en otros formatos habrás de cargarlo, convertirlo a formato WAV PCM y usar el API de Windows para reproducirlo. Si está en MIDI simplemente has de cargarlo y reproducirlo con en API. Ésta es una forma más laboriosa, pero también se aprende más. Si tienes cualquier duda sobre ésto pregunta aqui.
Por otro lado, también puedes usar librerías ya hechas, como dicen más arriba. Todo depende del tiempo y las ganas de aprender que tengas.
Un saludo.
Ruben3d
-
hablando de eso , alguien sabe como reproducir wav en msdos??? , pero no mediante una libreria , alguien sabe la teoria , y tambien como programar la tarjeta de sonido?? , les agradeceria su ayuda, y ya se que pido mucho pero alguien conoce el formato de compresion mp3 y sabe como usarlo con turbo C++,
gracias por su ayuda.
-
hola,
pues no es dificil pero si es dispendioso...
debes conocer la estructura del archivo , una vez eso debes teer manera de acceder a los deispositivos de sonido y asi cada cosa que leas del archivo la conviertes en un fromato entendible para el dispositivo de sonido especificando tiempos, timbres y sas cosas... realmete cosas relevantes a las ondas..
aca tienes el formato.
si te sale puedes sentirte enc apacidad de tratar de reproducir una de las variantes ma sencillas del mp3.
-
aaaa eso me sirvio de mucho , gracias , pero de casualidad no sabes de algun buen manual de como mandarlo a la tarjeta de sonido , por que supongo que se programa de una manera especial y no mediante las funciones clasicas sound y nosound , gracias por la ayuda amigo.
-
recomendacion:ç
-Usa la api de windows.
-
queria mantenerme alejado del windows pero bueno parece que no podre , terminare por ceder ante el :( , vere si puedo averiguar como hacerlo mediante interrupciones.
-
:huh:
bueno eso si son ganas de perder tiempo.. o de aprender mucho
usando interrupciones no encontraras nada como playwav...
olvidalo.
lo mas que encontraras (si encuentras algo) es acerca de usar el altavoz del pc.
realmente para acceder a la tarjeta de sonido lo debes hacer a traves del DMA pero es muy dificil y es muy poco probable que un OS te permita acceder directamete a ella, lo unico que puedes hacer es usar la api o en el caso de windows usar el DDK.
-
queria mantenerme alejado del windows pero bueno parece que no podre , terminare por ceder ante el :( , vere si puedo averiguar como hacerlo mediante interrupciones.
Malas noticias:
Usar interrupciones, puertos y DMA como lo hacían los juegos antiguos para controlar el sonido ya quedo obsoleto. Aún si lograras hacer funcionar el sonido en tu máquina habría que ver cuanto trabajo de configuración tendría que hacer el usuario para hacer funcionar el sonido de tu programa. Sólo ve los foros de abandonware, están llenos de: No puedo hacer funcionar el sonido, el sonido no funciona, no se escucha nada, ¿tiene sonido?, etc...
-
Saludos:
Yo también quisiera saber como reproducir sonidos sin tener que recurrir a windows, la idea de mi sistema es cuando mucho depender del ms-dos, ya que seguramente no habrá windows en la pc destino (es más, ni quiero que halla), que podria yo hacer?? <_<
-
si lees todos los post de este mensaje desde el principio tendras la respuesta.
-
que tal:
Ya miré el resto de los comentarios (incluyendo el adjunto de los formatos wave. midi y otros), está muy bien, pero todavía me queda la duda, ok, ya tengo la información del sonido (estructura del archivo leida), pero, ahora como la mando a la tarjeta??, con las funciones sound?, es decir, al leer la frecuencia de la muestra la mando para alla o como debería hacerlo?, disculpen, pero es que soy nuevo en esto y si que tengo dudas... :unsure:
-
Si quieres usar directamente el hardware tendras que usar DOS o compatibles, es decir versiones de windows hasta wiondows 98 o anterior.
Si vas a usar sistemas mas modernos que windows 98 entonces no podras hacerlo sino a traves de la API de windows, especificamente el Multimedia SDK (usa el MCI) de windows.
si vas a usar UNIX o compatibles =mente debes usar la API de este sistema.
Si no quieres usar la API Multimedia de windows, lo mas abajo que podrias hacer para tocar el hardware tu mismo es desarrollar utilizando el Driver Development Kit (DDK) de windows.
Para el caso especifico que colocas...
la funcion cound y nosound del lenguaje C no te sirven sino para enviar algunas frecuencias al altavoz del PC y por demas no son funciones de bajo nivel, ni te serviran para reproducrio un wav.
Si no quieres depender de las APIs... o almenos depender lo menos posible , eso es lo que debes hacer, ahora si recapacitas ... deberias usar qcualquier libreria de las que ya estan hechas, como directX, MCI, o en fin...
-
La verdad que el reproductor de .midi del MCI del windows no es bueno. Cuando la tarjeta de sonido no tiene sintetizador para midi y el MCI usa su emulador por software (lo que es común en estos días) "traba" al programa que envía el comando MCI para abrir el midi por un buen momento y eso es realmente molesto. (ni con hilos ni con nada se puede evitar esto, traba todo) :angry:
De hecho baje un open source para reproducir midis que trabaja mucho mejor. :)
-
no hay problema por ese lado, yo tengo windows 98 en mi pc (de hecho no me gusta ni el milenium ni el xp por razones que no voy a entrar en detalle), la idea es no depender en nada de windows, de hecho lo ideal es que en la pc ni siquiera hubiera windows, el sistema que quiero es que funcione sobre ms-dos puro (si se puede), pero se oye feo tener que meterme a crear un driver porque de eso si que no tengo ni idea...como es entonces que los juegos antiguos mandaban el sonido a la tarjeta???, supongo que por interrupciones en ensamblador o que podría yo hacer en este caso, o no se que librería me recomiendes para este caso pero sin tener que depender de la api de windows? :o
-
que open source?
-
Para la soundblaster lo típico era el puerto 220 / 240 , interrupción 5 / 7. y Otro puerto para el midi: el 388 si no me equivoco (muchos juegos sólo tenían sonido por midi y se escuchaban muy bien) y para sonido digitalizado de alta calidad un DMA, el 1 o 3 generalmente.
Estoy casi seguro que debe existir por lo menos un open source para C puro.
Adjunto un "space invaders" (el original) en Basic que funciona en qbasic y un ejecutable para probar tu tarjeta de sonido :huh:
¿Por que?: Tiene unos comandos y trabaja con puertos para controlar la tarjeta de sonido adlib/soundblaster. (Sólo escucharás el sonido si tu tarjeta es compatible con las antiguas adlib o si es compatible con soundblaster antiguo también funcionara).
Este juego sólo utiliza las capacidades de sintetización de midi. Reproducir sonidos digitalizados como los .wav es más complicado.
Asi que si existen ejemplos hasta para el antiguo basic, pues en algún sitio de internet TIENEN que existir ejemplos para C.
Acabo de caer en cuenta de algo: Si tu tarjeta de sonido es integrada seguramente no será compatible con las antiguas tarjetas de sonido. :(
P.D.
El open source es para delphi, como el subforo es de C++...
-
Bueno, ya que dices que lo vas a hacer en dos (No se para que)...
como es entonces que los juegos antiguos mandaban el sonido a la tarjeta???
Pues tenian que hacer sus propios driver en ensamblor o en c, accediendo a las interrupciones de la bios y del DOS, o en su defecto usar un driver ya hecho por otras personas (lo cuial es lo mismo que usar una API). Esto es muy complicado, no tanto el acceder a la tarjeta de sonido sino mas bien saber que hacer con ella,
es decir el acceder a la tarjeta no te da nada hecho asi que si reprodujeras un archivo wav (ver epec. mas arriba) tendrias que entender als tramas del archivo y de alli deducir frecuencias, amplitudes timbres tiempos y todas esas cosas para luego organizar la informacion y enviarla a la tarjeta de una forma que ella lo pueda entender.
que podría yo hacer en este caso, o no se que librería me recomiendes para este caso pero sin tener que depender de la api de windows?
Cualquier libreria te podria servir, hay miles de ellas con diferentyes tipos de liscencias y algunas open source.
En todo caso sino vas a usar puramente DOS sino que vas a usar windows posterior al 98 cualquier libreria que uses sin excepcion accedera a alguno de los niveles de la api de windows, las pocas excepciones que hay son por ejemplo directX que es un paso mas directo al hardware que se evita pasar por algunas capas de la API.
-
Bueno, la idea tras estas marcianadas es que desde hace años atrás me he interesado por el funcionamiento de los sistemas operativos, y nació la idea de crear uno desde cero, probé todo lo que se ocurrió a lo largo de 5 años ( :blink: ), pero todo era dependiente de otras cosas, mi idea era que el sistema no dependiera de windows, a la mejor no tanto como reemplazarlo, se que para eso me falta mucho y tampoco se tanto de c, pero hago el intento por aprender algo nuevo, Linux me parece un buen sistema, pero creo que muy complicado para meterle mano, así que pensé en hacer algo más sencillo y llegué a la conclusión de hacerlo en c++ pero corriendo bajo MS-DOS, es decir, iniciar la pc con solo DOS, osea no usar windows para nada, y si fuera posible que no hubiera windows pues mejor, solo habría que tener MS-DOS en la pc y listo.
Pero el gran inconveniente es que prácticamente no hay drivers para el MS-DOS de los dispositivos modernos, he encontrado del mouse, cd, floppy, impresoras, pero por ejemplo para un cd-writter, scanner pues nada y he ahí el inconveniente, pero bueno a ver que se puede hacer, por ahí encontré referencias de un sistema parecido programado en borland c++ con fines educativos, pero no encontré nada concreto y pues a ver que sale de todo esto, no tengo nada contra Windows pero pues siempre hay otras cosas que se puedan hacer.
De cualquier modo si no se puede pues al menos el intento se hizo y aprendí algo nuevo... ;)
-
por cierto Amilius, gracias por la información, la voy a revisar con más calma luego y buscar lo que me falte. :hola: