IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

mesurer la fréquence du son reçu par le micro d'un appareil android


Sujet :

Delphi

  1. #41
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Mais l'indice 10 est aussi bien pourvu avec la fréquence 234.375
    Le La2 220Hz est compris entre les deux, donc je me suis dis que ça devait être une interpolation en fonction de l'amplitude de l'axe Y, mais ça ne me donne pas vraiment 220.
    Je pense pour affiner la lecture dans la partie des basses fréquences il faudrait diminuer la fréquence de l'échantillonnage trop élevée ...et même le choix de 11025 hz reste largement suffisant pour échantillonner tous les signaux inférieures à 5 khz.

  2. #42
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par wheel Voir le message
    Je pense pour affiner la lecture dans la partie des basses fréquences il faudrait diminuer la fréquence de l'échantillonnage trop élevée ...et même le choix de 11025 hz reste largement suffisant pour échantillonner tous les signaux inférieures à 5 khz.
    C'est ce que je me suis dis aussi, mais en plus des petits-enfants la grippe est venue me rendre visite ... encore plus mauvaise que la covid choppée début décembre. Je me remets à peine de tout ça.

    Et je n'ai pas vraiment trouvé comment faire pour définir la fréquence d'échantillonnage sur le téléphone par programme en delphi. Je cherche ...
    Si quelqu'un a une idée, ou mieux un petit bout de code, je suis preneur.

  3. #43
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par navyg Voir le message
    Et je n'ai pas vraiment trouvé comment faire pour définir la fréquence d'échantillonnage sur le téléphone par programme en delphi. Je cherche ...
    Si quelqu'un a une idée, ou mieux un petit bout de code, je suis preneur.
    Avant de parler de code il faut déjà définir les limites de ton domaine de fréquence.
    La fréquence d’échantillonnage doit être supérieure ou égale à 2 fois la fréquence la plus élevée de ton signal
    la longueur de ton échantillon définira la fréquence la plus basse.
    Si ta fréquence la plus haute est 5kHz tu dois échantillonner à 10kHz minimum et la plus basse fréquence sera 10kHz/longueur de l'échantillon.
    Après pour ce qui est de la définir sur le téléphone ce n'est peut être pas si souple que ça. Il est bien possible que la fréquence soit imposée car le micro enregistre de la voix humaine donc sur un domaine de 75Hz à 450Hz.
    Il est aussi possible que l’échantillonnage se fasse par rapport au spectre audible (20Hz à 20kHz avec un plage privilégiée entre 500 et 4kHz)
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  4. #44
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Alors j'ai un petit peu avancé sur le sujet, même si je n'ai pas eu le temps de communiquer.
    Déjà, pour la façon de définir la fréquence d'échantillonnage, j'ai trouvé, c'est pas sorcier, il suffit de définir SampleRate avant l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Recorder:=TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC, SampleRate, ChannelConfig, AudioFormat, BufferSize);
    J'ai besoin d'évaluer les sons de Mi2 à Mi4, donc de 164.81Hz à 659.26Hz, avec bien sûr une petite marge à chaque extrémité.

    J'ai essayé d'échantillonner à 11025Hz et ça marche pas mal sur des fréquences "pures" générées par un générateur de fréquence.

    Si on considère la plus haute fréquence multipliée par 2 : 659.26 * 2 = 1318.52, elle est donc très très inférieure à 11025Hz.
    En fonction de ce que vous me dites, je pourrais presque descendre en-dessous pour avoir plus de précision dans la plage de fréquence qui m'intéresse.
    Selon la règle de "fois deux", 6512 serait encore largement bon et sur un échantillon de 2048, j'aurai 6152/2048=3Hz, donc largement dans les clous aussi.

    Merci donc pour ces précisions qui me seront bien utiles dans mes recherches.

    En ce qui concerne le son généré par une corde pincée, c'est un peu (beaucoup) plus compliqué.
    Je suis revenu à une transformée de fourier car autant l'analyse directe du spectre était relativement simple pour des fréquences "pures", autant c'est presque impossible pour une corde pincée, ou grattée, même avec beaucoup de travail de filtrage.
    Donc je suis en train de travailler sur ces sons "réels" et j'arrive parfois à interpréter correctement la fréquence, notamment sur le La2, le Ré3 et le Sol3. Beaucoup plus aléatoire sur les autres cordes.
    Je suis donc en train d'analyser ce qui se passe et ça m'a pas l'air simple
    J'avance, mais petit à petit, car j'ai du mal à travailler longtemps en ce moment car je suis encore bien fatigué par cette satanée grippe.
    Merci à tous pour votre aide.

  5. #45
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par navyg Voir le message
    En ce qui concerne le son généré par une corde pincée, c'est un peu (beaucoup) plus compliqué.
    C'est normal car la vibration de la corde est composée de plusieurs harmoniques.
    Citation Envoyé par navyg Voir le message
    Je suis revenu à une transformée de fourier car autant l'analyse directe du spectre était relativement simple pour des fréquences "pures", autant c'est presque impossible pour une corde pincée, ou grattée, même avec beaucoup de travail de filtrage.
    Inutile de filtrer.
    Dans le cas ou la note est unique (la ré...) Le premier pic sur le spectre est la fréquence fondamentale. Au delà c'est des harmoniques.
    Dans le cas d'un accord (mélange de plusieurs notes) c'est effectivement plus compliqué car il y a plusieurs fréquences fondamentales mélangées mais de toute façons la "fréquence" sera quand même dans les premiers pic du spectre
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  6. #46
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Gouyon Voir le message
    Inutile de filtrer.
    Dans le cas ou la note est unique (la ré...) Le premier pic sur le spectre est la fréquence fondamentale. Au delà c'est des harmoniques.
    Dans le cas d'un accord (mélange de plusieurs notes) c'est effectivement plus compliqué car il y a plusieurs fréquences fondamentales mélangées mais de toute façons la "fréquence" sera quand même dans les premiers pic du spectre
    C'est bien ce que je croyais, mais autant c'est clair avec le générateur de fréquence et je n'ai aucun souci pour établir la note jouée, autant avec la corde de la guitare j'ai des crêtes à pleins de niveaux de fréquence et certaines sont plus fortes que la note théoriquement jouée ... pourtant je fais attention à la jouer de façon la plus claire possible, mais ça ne fonctionne pas. Je cherche .... mais pas aujourd'hui car Madame avait des choses à me faire faire

    Je vais cependant suivre tes conseils.

  7. #47
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par navyg Voir le message
    C'est bien ce que je croyais, mais autant c'est clair avec le générateur de fréquence et je n'ai aucun souci pour établir la note jouée, autant avec la corde de la guitare j'ai des crêtes à pleins de niveaux de fréquence et certaines sont plus fortes que la note théoriquement jouée ... pourtant je fais attention à la jouer de façon la plus claire possible, mais ça ne fonctionne pas.
    Avec un signal complexe il peut y avoir pas mal de phénomènes qui peuvent perturber l'analyse . Par exemple, il est possible si qu'il y ai du repliement de spectre (https://fr.wikipedia.org/wiki/Repliement_de_spectre).
    Pour favoriser la distinction des fréquences avant de faire ta FFT tu peux multiplier ton signal avec une fenêtre de Hamming (https://fr.wikipedia.org/wiki/Fen%C3%AAtrage)

    Là on est vraiment dans le traitement du signal et il faudrait peut être poser la question sur des forum de mathématiciens
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  8. #48
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    hou là ... de la lecture et de l'étude en perspective ;o)
    Merci pour les références. Je m'y pencherai ... demain je pense ;o)

  9. #49
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 086
    Points : 5 606
    Points
    5 606
    Par défaut
    As-tu déjà pensé à implémenter un filtre passe-bande pour déjà traiter ton signal d'entrée par rapport à la note recherchée ?

    Voir ici : https://fr.wikipedia.org/wiki/Filtre_passe-bande

    Cela te permettrai de ne conserver qu'une partie restreinte au signal autour de la fréquence, par exemple, si on considère un La à 440hz, tu pourrais extraire le signal dans la fenêtre entre 430 et 450hz
    Il est possible, c'est une hypothèse, que cette fenêtre doive être élargie pour les cordes des basses et resserrée pour les cordes les plus aigüe, mais je pense que tu devra tatonner un peu de façon empirique pour trouver les bonnes fenêtres

  10. #50
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    J'ai remarqué, dans le code posté dans le premier message, que les échantillons sont importés sous forme d'octets et convertis en int 16 alors que l'enregistreur offre la possibilité de l'exportation directement sous forme d'entiers 16, ça évite le traitement supplémentaire.
    ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Buffer:=TJavaArray<Byte>.Create(BufferSize);
    proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Buffer:=TJavaArray<SmallInt>.Create(BufferSize div 2); 
     ...
    Recorder.read(Buffer, 0, BufferSize div 2);
    Si on considère la plus haute fréquence multipliée par 2 : 659.26 * 2 = 1318.52, elle est donc très très inférieure à 11025Hz.
    Oui tu peux descendre encore a moins qu'il n'ait pas une contrainte imposée par le matériel, maintenant il te reste d'essayer avec 8000hz, sinon tu pourrais faire un pseudo échantillonnage en doublant la taille du buffer d'enregistrement Buffer et au moment d'alimenter le tableau fft on merge deux échantillons successifs et tous les calculs seront faits sur 5512 Hz.

    J'ai besoin d'évaluer les sons de Mi2 à Mi4, donc de 164.81Hz à 659.26Hz, avec bien sûr une petite marge à chaque extrémité.
    Pour calculer les écarts entre notes et pour savoir la note d'une fréquence il y a cette formule sur Wiki 12 * log2(fréq / 440) cette formule prend 440 comme référence et repartit une octave en 12 marches donc elle renvoie 12 pour la fréquence 880 et -12 pour celle de 220 ...mais tu peux prendre n'importe qu'elle autre note comme référence pour calculer l'écart d'une fréquence a cette note .

  11. #51
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par sergio_is_back Voir le message
    As-tu déjà pensé à implémenter un filtre passe-bande pour déjà traiter ton signal d'entrée par rapport à la note recherchée ?

    Voir ici : https://fr.wikipedia.org/wiki/Filtre_passe-bande

    Cela te permettrai de ne conserver qu'une partie restreinte au signal autour de la fréquence, par exemple, si on considère un La à 440hz, tu pourrais extraire le signal dans la fenêtre entre 430 et 450hz
    Il est possible, c'est une hypothèse, que cette fenêtre doive être élargie pour les cordes des basses et resserrée pour les cordes les plus aigüe, mais je pense que tu devra tatonner un peu de façon empirique pour trouver les bonnes fenêtres
    L'article sur wikipedia est trop ardu pour moi, je n'y comprends rien

    Oui je filtre entre le mi2 et le mi4 mais je ne veux pas définir à priori quel est la corde grattée ... sinon c'est un peu compliqué d'utilisation.

  12. #52
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par wheel Voir le message
    J'ai remarqué, dans le code posté dans le premier message, que les échantillons sont importés sous forme d'octets et convertis en int 16 alors que l'enregistreur offre la possibilité de l'exportation directement sous forme d'entiers 16, ça évite le traitement supplémentaire.
    ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Buffer:=TJavaArray<Byte>.Create(BufferSize);
    proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Buffer:=TJavaArray<SmallInt>.Create(BufferSize div 2); 
     ...
    Recorder.read(Buffer, 0, BufferSize div 2);
    Alors j'ai découvert effectivement cela très récemment dans le source de l'unité delphi implémentant les commandes android. Il y a plusieurs définitions de TJavaArray.create.
    Je n'ai pas encore eu le temps de tester pour simplifier mon code, mais c'est quelque chose que je vais faire.

    Oui tu peux descendre encore a moins qu'il n'ait pas une contrainte imposée par le matériel, maintenant il te reste d'essayer avec 8000hz, sinon tu pourrais faire un pseudo échantillonnage en doublant la taille du buffer d'enregistrement Buffer et au moment d'alimenter le tableau fft on merge deux échantillons successifs et tous les calculs seront faits sur 5512 Hz.


    Pour calculer les écarts entre notes et pour savoir la note d'une fréquence il y a cette formule sur Wiki 12 * log2(fréq / 440) cette formule prend 440 comme référence et repartit une octave en 12 marches donc elle renvoie 12 pour la fréquence 880 et -12 pour celle de 220 ...mais tu peux prendre n'importe qu'elle autre note comme référence pour calculer l'écart d'une fréquence a cette note .
    Merci pour cette dernière info également, mais je l'avais trouvé même si je ne le calcule pas tout à fait pareil mais je pense que c'est équivalent.
    J'ai remarqué qu'entre un La2 et un La3 il y avait un rapport de 1 à 2 (220 à 440).
    J'utilise la formule fn=f0*(2^n/12) où f0 est une note de référence et n le nombre de demi-tons recherché (sachant qu'une gamme dite tempérée comporte 12 demi-tons égaux).
    On peut aussi dire qu'entre chaque demi-ton il y a un multiplicateur égal de 2^1/12 soit 1.0594630943593 (en plus on obtient un nombre "exact" à la 13ème décimale)
    Do#=Do*1.0594630943593
    La3=La2*(2^12/12)=La2*1.0594630943593^12
    Enfin j'espère que j'ai bien compris .

    Merci pour toutes vos contributions ... j'ai du pain sur la planche !!!

  13. #53
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 086
    Points : 5 606
    Points
    5 606
    Par défaut
    Citation Envoyé par navyg Voir le message
    Oui je filtre entre le mi2 et le mi4 mais je ne veux pas définir à priori quel est la corde grattée ... sinon c'est un peu compliqué d'utilisation.
    Ça fait longtemps que j'ai laissé tomber la guitare (je m'y remettrai peut être un jour lorsque je serai à la retraite) mais à l'époque avec un accordeur analogique, j'accordais corde à vide l'une après l'autre, changeant la position du commutateur de l'accordeur à chaque corde... Si je comprends bien, là tu veux faire en sorte que l'accordeur soit capable de gérer les six cordes (j'imagine une guitare électrique) sans intervention de la part de l'utilisateur soit : MI2 – LA2 – RE3 – SOL3 – SI3 – MI4

    Je vois mal comment tu peux y arriver sans filtres passe-bande, en plus il faut élargir ta fenêtre et prendre en dessous de MI2 et au-dessus de M4, ça fait une bande assez large et avec de possibles harmoniques et des fréquences parasites c'est compliqué (pas possible d'avoir un son "Pur")

    A mon avis tu devrais faire autant de fenêtres que de cordes et déterminer ensuite dans quelle fenêtre la note se situe.
    Exemple de filtre passe-bande (la fenêtre est de 100-200 Hz dans cette exemple) :

    Nom : ScreenShot_135.jpg
Affichages : 132
Taille : 27,3 Ko

    On voit bien comment les fréquences parasites en bas et en haut de la fenêtre, sont supprimés

    Tiens j'ai trouvé un projet ici avec un exemple de filtre passe-bande, c'est un projet Lazarus (en Free Pascal) mais il y a surement des idées bonnes à prendre : https://github.com/jakobsche/equalizer

    Dans les unités complexmath.pas et bandpass.pas

  14. #54
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Merci pour ces références. Encore un truc de plus à étudier !
    J'en ai pour des semaines à digérer tout ça ;o)

    Moi ça faisait quasiment 50 ans que j'avais abandonné la guitare ! Et je m'y suis remis pour essayer de garder un peu d'agilité dans les mains.
    Ca revient tout doucement.
    Et j'en ai profité pour me fabriquer une guitare électrique à partir d'un kit ... très plaisant.

    Dans le problème de fenêtrage, c'est que parfois la dominante dans le spectre est complètement une autre corde. je suis en train d'analyser les résultats, mais c'est beaucoup de données à recueillir et à traiter pour comprendre ce qui se passe.

    Pour l'instant, j'essaye déjà que le téléphone ne se mette pas en veille pendant que j'exécute l'application et je ne sais pas comment faire ... un autre problème à régler j'aurai une piste du côté de la permission write_settings ? à fouiller ...

  15. #55
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par navyg Voir le message
    Merci pour ces références. Encore un truc de plus à étudier !
    J'en ai pour des semaines à digérer tout ça ;o)

    Moi ça faisait quasiment 50 ans que j'avais abandonné la guitare ! Et je m'y suis remis pour essayer de garder un peu d'agilité dans les mains.
    Ca revient tout doucement.
    Et j'en ai profité pour me fabriquer une guitare électrique à partir d'un kit ... très plaisant.

    Dans le problème de fenêtrage, c'est que parfois la dominante dans le spectre est complètement une autre corde. je suis en train d'analyser les résultats, mais c'est beaucoup de données à recueillir et à traiter pour comprendre ce qui se passe.

    Pour l'instant, j'essaye déjà que le téléphone ne se mette pas en veille pendant que j'exécute l'application et je ne sais pas comment faire ... un autre problème à régler j'aurai une piste du côté de la permission write_settings ? à fouiller ...
    salut pour bloquer la mise en veille j'utilise ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    procedure BloquerMiseEnVeille;
    var
      Window: JWindow;
    begin
      Window := TAndroidHelper.Activity.getWindow;
      // Maintenir l'écran allumé en ajustant les paramètres de la fenêtre
      Window.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);
    end;
     
    procedure AutoriserMiseEnVeille;
    var
      Window: JWindow;
    begin
      Window := TAndroidHelper.Activity.getWindow;
      // Effacer le drapeau pour autoriser la mise en veille de l'écran
      Window.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);
    end;
     
     
    procedure TForm9.Button1Click(Sender: TObject);
    begin
      AutoriserMiseEnVeille;
      close;
    end;
     
    procedure TForm9.Button2Click(Sender: TObject);
    begin
      AutoriserMiseEnVeille;
    end;
     
    procedure TForm9.Button3Click(Sender: TObject);
    begin
      BloquerMiseEnVeille ;
    end;
     
    procedure TForm9.FormShow(Sender: TObject);
    begin
      BloquerMiseEnVeille ;
    end;
    ça marche chez moi avec android 12

  16. #56
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 086
    Points : 5 606
    Points
    5 606
    Par défaut
    Citation Envoyé par navyg Voir le message
    Dans le problème de fenêtrage, c'est que parfois la dominante dans le spectre est complètement une autre corde. je suis en train d'analyser les résultats, mais c'est beaucoup de données à recueillir et à traiter pour comprendre ce qui se passe.
    C'est que tu dois avoir un problème sur tes données d'entrée
    Même si la corde en question est mal accordée elle devrait sonner (le pic) autour de la fréquence ciblée, soit quelques Hz en dessous soit quelques Hz au dessus (10 à 15 max)
    Si tu claque la corde de LA2 et que obtient un pic en RE3 c'est pas normal, il y a un problème soit dans les données d'échantillonnage soit dans le traitement, soit au niveau de l'instrument
    Il peut y avoir des fréquences harmoniques, des fréquences parasites, mais le pic doit se trouver autour de la fréquence recherchée

  17. #57
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par papyvore Voir le message
    salut pour bloquer la mise en veille j'utilise ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    procedure BloquerMiseEnVeille;
    var
      Window: JWindow;
    begin
      Window := TAndroidHelper.Activity.getWindow;
      // Maintenir l'écran allumé en ajustant les paramètres de la fenêtre
      Window.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);
    end;
     
    procedure AutoriserMiseEnVeille;
    var
      Window: JWindow;
    begin
      Window := TAndroidHelper.Activity.getWindow;
      // Effacer le drapeau pour autoriser la mise en veille de l'écran
      Window.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);
    end;
     
     
    procedure TForm9.Button1Click(Sender: TObject);
    begin
      AutoriserMiseEnVeille;
      close;
    end;
     
    procedure TForm9.Button2Click(Sender: TObject);
    begin
      AutoriserMiseEnVeille;
    end;
     
    procedure TForm9.Button3Click(Sender: TObject);
    begin
      BloquerMiseEnVeille ;
    end;
     
    procedure TForm9.FormShow(Sender: TObject);
    begin
      BloquerMiseEnVeille ;
    end;
    ça marche chez moi avec android 12
    Merci beaucoup. J'ai trouvé un truc quasiment équivalent, mais je n'avais pas eu le temps de l'indiquer (soirée difficile à se remettre d'aplomb ce matin en fait ...).
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Window := TAndroidHelper.Activity.getWindow;
    j'ai le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Window := SharedActivity.getWindow;
    Je ne sais pas quelle est la différence, mais ça marche très bien.

    Je l'ai mis dans le form.create et dans le Form.destroy pour être sûr de rester neutre vis à vis du fonctionnement de l'appareil hors cette application et ça marche très bien sans demander aucune permission particulière finalement.

  18. #58
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par sergio_is_back Voir le message
    C'est que tu dois avoir un problème sur tes données d'entrée
    Même si la corde en question est mal accordée elle devrait sonner (le pic) autour de la fréquence ciblée, soit quelques Hz en dessous soit quelques Hz au dessus (10 à 15 max)
    Si tu claque la corde de LA2 et que obtient un pic en RE3 c'est pas normal, il y a un problème soit dans les données d'échantillonnage soit dans le traitement, soit au niveau de l'instrument
    Il peut y avoir des fréquences harmoniques, des fréquences parasites, mais le pic doit se trouver autour de la fréquence recherchée
    Oui je pense qu'il y a un problème quelque part (peut-être le niveau d'enregistrement peut-il jouer aussi ????)
    C'est pour ça que je veux recueillir et analyser des données brutes pour vérifier quelles sont les données que je traite, car avec des fréquences "pures" issues d'un générateur de fréquence, mes différents algorithmes fonctionnent parfaitement.
    Il y a donc quelque chose qui se passe avec les sons issus de la corde de la guitare.

    Je ne manquerai pas de faire part du résultat de mes recherches.

  19. #59
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Bon alors un petit point de situation.
    J'ai réduit la fréquence d'échantillonnage à 4000Hz, ce qui me donne une plage largement suffisante pour les fréquences que je veux étudier, ce qui me donne une "discrimination" plus précise.

    Transformée de Fourier uniquement sur les indices qui m'intéressent (en l'occurrence de échantillon(2048)*frequence de mi2 (164.81)/4000 jusqu'à 2048*mi4(659.26)/4000, avec une petite marge en dessous et au-dessus).

    Je ne divise pas la somme des calculs par la taille de l'échantillon pour avoir une meilleure amplitude même avec une guitare électrique sans ampli.

    Finalement c'est la partie la plus simple.
    Car à l'examen des chiffres (et surtout du graphique implémenté sur le téléphone en direct, ce qui m'a pris un peu de temps car je n'avais jamais travaillé sur le dessin sous fmx et c'est coton quand tu viens de la vcl), les harmoniques (quinte, octave, tierce de l'octave supérieur, quinte de l'octave supérieure et également 2 octaves !) sont bien supérieures à la dominante (parfois d'un facteur 10000 !).

    Donc, sélection des 30 pics les plus hauts dans le tableau et repérage du "premier" pic, et c'est là que ce n'est pas simple car j'ai eu du mal à trouver le bon seuil multiplicateur par rapport à la "moyenne" pour déterminer quel est le premier pic. J'ai testé plusieurs types de moyenne (depuis le début de la série, les 10 valeurs précédentes, les 10 valeurs précédentes et suivantes, et c'est finalement encore cette dernière moyenne qui me permet (pour l'instant) de détecter (mais pas tout à fait à coup sûr, cf. plus bas) le premier pic.

    Mais quand la corde finit de sonner, il ne reste que des harmoniques et avec des pics dominants ! donc je n'ai pas encore fini de traiter la FFT.

    Ensuite je teste si le premier pic correspond à une fréquence d'une des cordes sinon j'élimine la mesure.

    Si ça correspond à une vraie corde plus ou moins 1/2 ton je valide la mesure et je l'affiche avec des indicateurs pour se situer par rapport à la fréquence à obtenir.

    Mais ça n'est pas tout à fait suffisant car par exemple, souvent le Mi4 (une vraie corde) devient dominant sur un La2 finissant ou un Sol#3 (la vraie corde est le Sol3 mais il faut que je me garde une marge pour accorder) sur un Mi2. Donc il me reste à traiter ce genre de problème.

    Ensuite, je fais une interpolation quadratique pour affiner la résolution et trouver un indice "décimal" pour calculer la fréquence par indice*4000/2048 car vous l'aurez compris la "résolution" du système d'indice entier est de 2048/4000=1.953125Hz.
    Je vais peut-être essayer avec un échantillon de 4096 et une fréquence d'échantillonnage de 4096 pour avoir une précision de 1 ?

    A ce propos, est-ce que quelqu'un à un avis sur la précision à laquelle il faut arriver pour qu'une oreille même entraînée ne distingue pas la différence entre 2 fréquences ? est ce que 2hz est raisonnable ? peut-être dans les aigus, mais dans les grave c'est peut-être juste ? J'essaye de travailler plutôt sur des pourcentages et j'estime que je suis juste quand j'arrive à une fréquence égale à la fréquence recherchée à 0.2% à 0.4% près. Est ce que ça vous paraît bon ?

    Mais à part quelques mauvaises interprétations (cf. plus haut), j'arrive à accorder ma guitare assez finement (testé ensuite avec un vrai accordeur ;o)

    Donc j'avance et je vous remercie encore pour vos aides multiples et variées.

    Je continue d'affiner le bouzin ...

  20. #60
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 086
    Points : 5 606
    Points
    5 606
    Par défaut
    Citation Envoyé par navyg Voir le message
    A ce propos, est-ce que quelqu'un à un avis sur la précision à laquelle il faut arriver pour qu'une oreille même entraînée ne distingue pas la différence entre 2 fréquences ? est ce que 2hz est raisonnable ? peut-être dans les aigus, mais dans les grave c'est peut-être juste ? J'essaye de travailler plutôt sur des pourcentages et j'estime que je suis juste quand j'arrive à une fréquence égale à la fréquence recherchée à 0.2% à 0.4% près. Est ce que ça vous paraît bon ?
    Pas d'avis là dessus, normalement l'accord est censé être "exact", bien que dans la réalité,a part avec un générateur de sons, ou un synthétiseur, il y a peu de chances que ce soit vrai.
    Tout dépend aussi de ce qu'on entend par oreille entrainée, quand on sait que certains musiciens sont capables de reproduire un morceau à la note près en ne l'ayant écouté qu'une seule fois !!!

    2 Hz dans les fréquences graves, c'est ce qui sépare un DO d'un DO# dans la gamme tempérée (octave 0)
    L'écart est beaucoup grand bien sur dans les octaves supérieurs, par exemple 8hz entre un DO2 et un DO2#

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Niveau du son enregistré par le micro
    Par Nayl.VBcoder dans le forum VB.NET
    Réponses: 5
    Dernier message: 09/09/2016, 10h18
  2. Ouvrir/afficher un fichier avec son logiciel par défaut
    Par Alain P. dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/06/2009, 18h47
  3. Réponses: 6
    Dernier message: 09/04/2007, 16h52
  4. Modifier un son appelé par Action Script
    Par Imperator34 dans le forum Flash
    Réponses: 3
    Dernier message: 26/10/2006, 05h46
  5. [Sécurité] connexion sur son compte par un lien
    Par Zen_Fou dans le forum Langage
    Réponses: 6
    Dernier message: 07/04/2006, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo