bonjour
j'amerai savoir si quelqu un peut m aider pour ecrire un programme sous matlab permettant de détecter la frequence fondamentale des notes de musique. La note de musique sera jouée avec un fichier .wav
merci
^^
bonjour
j'amerai savoir si quelqu un peut m aider pour ecrire un programme sous matlab permettant de détecter la frequence fondamentale des notes de musique. La note de musique sera jouée avec un fichier .wav
merci
^^
Cela a surement du déjà être fait sur le File Exchange en cherchant avec les mots clefs comme music tu trouveras pleins d'exemples
Fait une petite recherche sur le forum Signal => par exemple : Détermination de la fréquence fondamentale d'un signal périodique
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
j ai essayé sur file exchange et je n'ai pas trouvé ce programme. Et ce que quelqu un l'aurait pour m'aider à avancer.
Salut !
Une petite question peut-être moins stupide qu'elle ne peut en avoir l'air de prime abord: c'est quoi, ta note de musique? D'où vient-elle? Si elle a été générée informatiquement ou enregistrée à l'orgue, tu peux la considérer comme périodique. La fonction d'autocorrélation te permet de déterminer sa période et ensuite tu peux utiliser Fourier. En revanche, si elle provient d'un autre instrument de musique réel (bons exemples quelque part sur le site de l'université d'Iowa, si je me souviens bien), commence par faire un plot de ton signal, contemple-le attentivement, et alors tu comprendras ta misère.
Bonne chance
Jean-Marc Blanc
PS. Je pense que ton problème est avant tout un problème d'algorithmique et que tu ne l'as pas posté sur le bon forum.
Calcul numérique de processus industriels
Formation, conseil, développement
Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)
J'amerais savoir comment peut on faire l 'acquisition d'un son à l'aide d'un micro et l'implémenter dans un programme
Matlab 5.3
merci
Salut !
Si tu veux qu'on t'aide, il faut répondre aux questions qu'on te pose. Quel instrument de musique?
La méthode à utiliser pour résoudre n'est probablement la même si ton instrument est une flûte ou une guitare.Une petite question peut-être moins stupide qu'elle ne peut en avoir l'air de prime abord: c'est quoi, ta note de musique? D'où vient-elle? Si elle a été générée informatiquement ou enregistrée à l'orgue, tu peux la considérer comme périodique. La fonction d'autocorrélation te permet de déterminer sa période et ensuite tu peux utiliser Fourier. En revanche, si elle provient d'un autre instrument de musique réel (bons exemples quelque part sur le site de l'université d'Iowa, si je me souviens bien), commence par faire un plot de ton signal, contemple-le attentivement, et alors tu comprendras ta misère.
Jean-Marc Blanc
Calcul numérique de processus industriels
Formation, conseil, développement
Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)
désolé pour l'oubli
mon instrument est une guitare et il faut que je fasse en sorte de trouver toutes les notes et les octaves
Par la suite une fois que j'aurai fait l'acquisition de ce son, il faudra que j'enlève le bruit et que je amplifie le signal.
J'amerais savoir comment je pourrais procéder
Merci
Salut !
Si c'est une guitare, ton signal n'est pas périodique, mai amorti. Dans ce cas, l'analyse de Fourier ne peut pas s'appliquer telle quelle. En principe, ton signal devrait être une combinaison de sinusoïdes amorties avec des constantes de temps différentes.
Jean-Marc Blanc
Calcul numérique de processus industriels
Formation, conseil, développement
Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)
merci de me dire que signifie cette erreur et comment la résoudre.
voila le code qui génère l'erreur :??? Error using ==> ==
Matrix dimensions must agree.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 hold on; index=find(cc==max(cc)); c'est ici d'après MATLAB mainFreqcStr=num2str(freqc(index)); plot(freqc(index),cc(index),'r.',... 'MarkerSize',25,'EraseMode','none'); text(freqc(index)+2,cc(index),... ['fréquence fondamentale = ',mainFreqcStr, ' Hz'],'EraseMode','none'); hold off; % code pour calculer la fréquence fondamentale
En fait mon programme doit définir un note en fonction d'un son. J'affiche le spectre de la note. Il apparait normalement en bleu notre programme ci-dessus fonctionne.
Certains sons apparaissent en vert alors mon programme ne fonctionne plus (message d'erreur ci-dessus). que cela signifie ?
"cc" est un vecteur ou une matrice ?
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
cc=fftshift(abs(fft(n)));
est-ce un vecteur?
Bonjour,
J'aimerais savoir ce qui ne va pas.
le débogger m'affiche :
voici mon code??? Error using ==> plot
Vectors must be the same lengths.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 fe=44100; n = wavread('la'); cc=fftshift(abs(fft(n))); lcc=length(n); mcc=lcc; freqc=(-mcc:1:mcc-1)*fe/lcc; plot(freqc,cc); xlabel('Fréquence en Hz'); ylabel('''Densité Spectrale d''énergie''');
merci d'avance
Les vecteurs freqc et cc n'ont pas le même nombre d'éléments.
Sinon pour la première erreur, je trouve cela bizarre si cc est un vecteur
On notera qu'il est parfois inutile d'utiliser FIND avec MAX :>> cc=rand(1,15);
>> find(cc==max(cc))
ans =
12
>> cc=[1 2 3 4 4 3 2]
cc =
1 2 3 4 4 3 2
>> find(cc==max(cc))
ans =
4 5
>> cc=[1 2 3 4 ;4 3 2 5]
cc =
1 2 3 4
4 3 2 5
>> find(cc==max(cc))
??? Error using ==> eq
Matrix dimensions must agree.
Ce que les puristes écrivent (attention les yeux ) :>> cc=rand(1,15);
>> idx=find(cc==max(cc))
idx =
9
>> [pasbesoin,idx]=max(cc)
pasbesoin =
0.9502
idx =
9
>> [idx,idx]=max(cc)
idx =
9
idx =
9
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager