Pages : 1
#1 Le 04/09/2007, à 12:46
- harlock1
Jouer un son en C
Bonjour,
Dans un programme en C, je voudrais pouvoir emettre un son, avec une fonction du genre :
jouer_un_son(fréquence, durée, volume)
Un peu comme on faisait en basic sur les ordinateurs 8 bits, pour ceux qui ont connu
Je peux bien sur appeler le programme beep, qui est simple et efficace, mais celui-ci ne permet pas de régler le volume et envoie le son vers le speaker (malheureusement en voie de disparition sur les ordinateurs modernes) et non sur la carte son.
J'ai regarder du coté de la librairie Alsa mais ça me paraît affreusement lourd pour faire un truc aussi simple.
Votre avis ?
Hors ligne
#2 Le 04/09/2007, à 13:01
- pixi-pix
Re : Jouer un son en C
execve, cherche du coter de cette fonction
Hors ligne
#3 Le 04/09/2007, à 13:17
- harlock1
Re : Jouer un son en C
Ouah, rapide la réponse, c'est presque du chat !
Ceci dit, je ne vois pas trop pour execve. Cette fonction permet d'exécuter un programme à partir d'un autre programme, donc je ne saisis pas le rapport avec le fait de jouer un son ???
Je précise que je veux emettre un son avec des caractéristiques données, et non pas jouer un fichier son.
Dernière modification par harlock1 (Le 04/09/2007, à 13:20)
Hors ligne
#4 Le 04/09/2007, à 14:02
- pixi-pix
Re : Jouer un son en C
Ha mince
mais si tu as une fonction dans linux qui te permet le son que tu veux ou un programme qui fais sa bien comme tu veux avec les bon paramettres tu peux le faire avec execve dans ton programme par contre execve kill ton processus a la fin donc il faut penssais a fork() avant de lancer la fonction execve.
Pour recapituler si tu connais une ligne de commande ou un programe qui fais le son que tu veux tu lui donne en parametre a execve et il le fait tres bien
man execve ou alors demande moi
Hors ligne
#5 Le 04/09/2007, à 19:41
- nicolas.sitbon
Re : Jouer un son en C
Non execve n'est pas du tout adapter à ce qu'il demande, regarde plutot du coté de la lib FMOD ;-)
Cordialement.
Hors ligne
#6 Le 04/09/2007, à 19:59
- pixi-pix
Re : Jouer un son en C
surment je suis desoler je connais pas cette lib desoler
Hors ligne
#7 Le 05/09/2007, à 12:33
- harlock1
Re : Jouer un son en C
Non execve n'est pas du tout adapter à ce qu'il demande, regarde plutot du coté de la lib FMOD ;-)
FMOD n'est pas dans les dépots, et me paraît très lourd pour ce que je veux faire. Je suis surpris qu'il n'y ai pas une librairie qui dispose de fonctions sonores basiques.
Dans les dépots j'ai trouvé libsndobj-dev, dont voici la description :
Sound Object development files
The Sound Object Library is an object-oriented audio processing library.
It provides objects for synthesis and processing of sound that can be used
to build applications for computer-generated music.
Cela paraît convenir, mais pas moyen de trouver une doc la-dessus sur le net ...
Personne dans le forum s'est amusé à faire des programmes en C de douze lignes qui joue des notes ?
Hors ligne
#8 Le 05/09/2007, à 12:45
- pixi-pix
Re : Jouer un son en C
essai de voir sur le forum de developpez.com
Hors ligne
#9 Le 05/09/2007, à 14:04
- Link31
Re : Jouer un son en C
Essaie ça (je ne sais pas si ça fonctionne, je n'ai pas de speaker) :
http://www.johnath.com/beep/beep.c
Hors ligne
#10 Le 06/09/2007, à 09:15
- harlock1
Re : Jouer un son en C
Essaie ça (je ne sais pas si ça fonctionne, je n'ai pas de speaker) :
http://www.johnath.com/beep/beep.c
Déjà essayé, et c'est dans les packages (cf post #1)
Hors ligne
#11 Le 06/09/2007, à 11:05
- Watchwolf
Re : Jouer un son en C
sdlsound? (pas sur que ca existe).
Hors ligne
#12 Le 06/09/2007, à 11:50
- clem-vangelis
Re : Jouer un son en C
comme wtachwolf , la aprtie audio de sdl sdl_audio un truc dans le genre ...apres sinon si tu est surfort en prog tu la joue chiptune ( http://fr.wikipedia.org/wiki/Chiptune )
tien d'ailleur si tu veux rigoler compile ça :
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "SDL.h"
#define X2(a) a a
#define X4(a) a a a a
#define S1(a,b,c) #a".."#b".."#c"."
#define S14(a,b,c) X4(S1(a,b,c))
#define S2(a) #a"."#a"....."
#define S24(a) X4(S2(a))
#define S4(a) #a#a#a#a
#define S3(a,b,c) S1(a,b,c)S4(..)
#define SE X4(X4(S4(..)))
char l[]=SE SE X2(S3(J,H,M)S3(J,H,E)S3(F,E,A)S3(F,E,J)S3(H,E,O)S3(H,E,C)S3(H,F,
x)S3(H,F,L)),b[]=SE X2(S4(j.jv.j.v)S4(f.fr.f.r)S4(e.eq.e.q)S4(h.ht.h.t))SE,*r[3
]={S14(v,v,q)S14(r,r,m)S14(q,q,l)S14(t,t,o),S24(J)S24(F)S24(E)S24(H),S24(M)S24(
J)S24(H)S24(L)};
#define B int
#define C double
#define S static
#define I(a,b,c,d,f,g) a=(f-d)/10.,b=1e-2*(d*(28-g)-f),c=1e-2*(d*f-8*g/3);\
d+=a,f+=b,g+=c;
S C T;typedef float A;S B D,R,U,p=0;S A F[5][0100000]={{0},{0}};
void AA(void*u,Uint8*_,B L){u=u;while(L>0){B M=p&037777,s=p>>12,u=(s%R)[
l],J=(s%U)[b],w=0,a=0,n;A v,q,m,E=(0x2000-(p&017777))/8192e0f;v=q=0;
#define EF_(x) F[w][1638##x+M
#define EF(l,s,ms) ((s*ms+EF_(4)-l]*(1-ms))/2.f+EF_(3)]/2.f)
#define FQ(s) (A)sin((0.12*pow(2,n/12.))*p*s)
#define IZ(v,c) v*=v c?v:0;
#define BF F[w][M]=F[w][M+16384]=q;v+=q;++w
#define IP(n,x,y,z,c) if(n!=46){x}q=EF(y,q,z);c;BF;
#define IS(s,c) if(q c s 0.75f)q=s 0.75f;
#define NQ(x,a,m) n=x-(x>=97?121:65)+a;q=FQ(m);
IP(u,NQ(u,12,1)m=FQ(1.01f);IZ(q,>6e-1)IZ(m,>6e-1)q+=m;q*=5e-1f*(E+1);,12288,
0.2f,;)for(;a<3;++a){char sn=(s%D)[a[r]];q=0;IP(sn,NQ(sn,12,0.25f)IZ(q,<0.3),
12288,0.2f,;)}q=0;IP(J,NQ(J,0,1/8.f)X4(q*=q;)q=(A)fmod(q*20,4)*4;,6144,0.25f,IS
(-,<)IS(+,>)q*=E)v*=0.6f;*(Sint16*)_=(Sint16)(v*32767);_++,++_,++p,--L,L--;}}
B main(B c,char**a){SDL_AudioSpec f,d;c=c,a=a;D=strlen((!!c&24)[r]),R=strlen(l)
,U=strlen(b);if(SDL_Init(16)<0)exit(1);atexit(SDL_Quit);f.freq=22050,f.format=\
AUDIO_S16,f.channels=1,f.samples=4096,f.callback=AA,f.userdata=0;if(SDL_OpenAu\
dio(&f,&d)<0)exit(2);T=0;SDL_PauseAudio(0);getchar();SDL_CloseAu\
dio();return 0;}
avec ce makefile :
INCDIR=`sdl-config --cflags`
LDFLAGS+=`sdl-config --libs`
build: jetro
clean:
clobber:
-rm jetro
jetro: jetro.c
sdl-config --version && ${CC} ${CFLAGS} ${INCDIR} ${LDFLAGS} $< -o $@
alt:
data:
ça va te jouer du son c'ets un des vainqueurs de l'obfuscated C code contest http://www.es.ioccc.org/main.html
en gros du code imcompréhensible si tu l'as pas écrit ou si tu passe pas 3 an dessus
Dernière modification par clem-vangelis (Le 06/09/2007, à 11:53)
Hors ligne
Pages : 1