Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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

#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 hmm

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 smile

man execve ou alors demande moi wink

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

Hors ligne

#7 Le 05/09/2007, à 12:33

harlock1

Re : Jouer un son en C

nicolas.sitbon a écrit :

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

#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

Link31 a écrit :

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 big_smile ( 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 big_smile 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 big_smile

Dernière modification par clem-vangelis (Le 06/09/2007, à 11:53)

Hors ligne