Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: prometheus48 en 12 Junio 2012, 19:38 pm



Título: Piano Virtual - Ayuda
Publicado por: prometheus48 en 12 Junio 2012, 19:38 pm
Bueno,

Quería hacer un pequeño piano virtual en C++. Pero el problema, es que use la librería windows.h, que primero lo hace dependiente de Windows , que no me agrada, y segundo, uso la función Beep() que no está hecha para hacer música y es lenta y hace un ruido extraño al terminar el sonido, otra cosa es que no funciona en todos los ordenadores ya que es sonido interno, entonces:

Me gustaría que alguien me dijese una librería en la que pueda reproducir un sonido por ejemplo así: PlaySound("Do",2) En la que tocamos la nota Do por 2 segundos, o que simplemente use una frequencia.

Por cierto uso SDL para los eventos.

( Para correrlo necesitan SDL.dll )
Código:
#include <iostream>
#include <windows.h>
#include "SDL.h"

using namespace std;

int main(int argc,char* args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Surface* screen;
    screen = SDL_SetVideoMode(600,400,32,SDL_SWSURFACE);
    SDL_WM_SetCaption("Alvii Board - Made by Sam",NULL);
    bool running = true;
    SDL_Event event;
    int time = 0;
    int key = 0;
    while(running)
    {
        if(SDL_PollEvent(&event))
        {
            if(event.type==SDL_QUIT)
            {
                running = false;
            }
            if(event.type==SDL_KEYDOWN)
            {
                key = 1;
                time = 300;
                if(event.key.keysym.sym==SDLK_a)
                {
                    Beep(262,time);
                }
                if(event.key.keysym.sym==SDLK_s)
                {
                    Beep(294,time);
                }
                if(event.key.keysym.sym==SDLK_d)
                {
                    Beep(330,time);
                }
                if(event.key.keysym.sym==SDLK_f)
                {
                    Beep(349,time);
                }
                if(event.key.keysym.sym==SDLK_g)
                {
                    Beep(392,time);
                }
                if(event.key.keysym.sym==SDLK_h)
                {
                    Beep(440,time);
                }
                if(event.key.keysym.sym==SDLK_j)
                {
                    Beep(494,time);
                }
                if(event.key.keysym.sym==SDLK_k)
                {
                    Beep(523,time);
                }
                if(event.key.keysym.sym==SDLK_w)
                {
                    Beep(277,time);
                }
                if(event.key.keysym.sym==SDLK_e)
                {
                    Beep(311,time);
                }
                if(event.key.keysym.sym==SDLK_t)
                {
                    Beep(370,time);
                }
                if(event.key.keysym.sym==SDLK_y)
                {
                    Beep(415,time);
                }
                if(event.key.keysym.sym==SDLK_u)
                {
                    Beep(466,time);
                }
            }
            if(event.type==SDL_KEYUP)
            {
                key = 0;
                time = 0;
            }
        }
        SDL_Flip(screen);
    }
    return 0;
}



Título: Re: Piano Virtual - Ayuda
Publicado por: x64core en 13 Junio 2012, 09:44 am
para los sonidos mu simple del piano tenes la midiOutShortMsg de Winmm  :D
obviamente si es para windows tenes que agregar la windows.h, o que lo quiere hacer multiplataforma? :|


Título: Re: Piano Virtual - Ayuda
Publicado por: d(-_-)b en 13 Junio 2012, 12:54 pm
Lo mejor seria usar sample de piano en formato .wav, y asociarlas a cada teclas para reproducir su respectiva notas. cada instrumento virtual lleva consigo su propia libreria de sonidos (samples), creo que ese deberia ser tu caso.

Los samples puedes conseguirlos gogleando..


Título: Re: Piano Virtual - Ayuda
Publicado por: Foxy Rider en 15 Junio 2012, 06:17 am
Mejor aún: qué tal reemplazar ese windows.h por SDL_mixer, que es portable y mantiene el estilo de programación "uniforme" con las otras funciones de SDL? http://www.libsdl.org/projects/SDL_mixer/
Pensalo :D

Saludos.


Título: Re: Piano Virtual - Ayuda
Publicado por: vikour92 en 15 Junio 2012, 09:44 am
Buenos días,

Yo también tengo el interés de que mis programas sean portables. No se, si los sonidos se hacen con esta librería, pero los gráficos sí, es para C++. Es multiplataforma en los sistemas operativos Unix con GTK+, windows, MAC OS X, windows phone, etc.

La librería es wxWidgets, http://www.wxwidgets.org/ . Por ahí había un libro pdf de esto, ahora mismo no recuerdo donde está, pero si os interesa lo busco y lo posteo.

Es muy probable que para reproducir sonidos.

Un saludo, espero que haya sido de ayuda.