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

Multimédia Java Discussion :

Analyser spectre audio


Sujet :

Multimédia Java

  1. #1
    Invité
    Invité(e)
    Par défaut Analyser spectre audio
    Bonjour,

    Je suis à la recherche d'une méthode ou bibliothèque qui permet d'analyser une musique c'est à dire qui permet de trouver le rythme par exemple, les fréquences, etc... Je sais pas si je suis assez clair

    Quelques exemples :



    Ce que je voudrais c'est que quand il y a une certaine fréquence par exemple, cela appelle une méthode. Le mieux est je pense de travailler sur les fréquences

    Avez-des idées sur la méthodes à utiliser ? Dois-je utiliser JMF ?

    Merci

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    J'ai autrefois utilisé FMOD (la version de jerome Jouvieje pour le java...) afin de faire un detecteur de notes.

    Il y'a une transformation de fourrier pour recuperer les bandes de frequences (je suppose que tu vois de quoi je parle) et ainsi par exemple obtenir la notes qui est jouée a l'instant T. (mais soyons claire il s'agissait d'un instrument monohphonique au son tres pure sinon cela demande plus de traitements).

    Je ne sais pas si cela va beaucoup t'aider et si cela se rapporte a ton projet mais je te le soumets quand meme. Au moins tu auras deja le spectre et la note la plus probablement jouée.

    Pour le rythme etc, je serai tres interessé de voir tes resultats.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    je suis allé voir FMOD, ça m'a l'air pas mal. Je te tiens au courant de mes avancées

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Oui ce n'est pas mal dutout je m'en suis servi a diverses reprise en C et en Java.

    Il y'a juste le probleme qu'il faut que tu developpez un projet gratuit, sinon c'est payant (ou un truc du genre).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui, pas de souci, c'est un projet que je développe dans le cadre d'un cours dans mon école.

    Pour FMOD Java, tu as utilisé ce binding : http://jerome.jouvie.free.fr/Fmod/NativeFmod/index.php ?

    Je suis en train de tester FMOD, mais j'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NativeFmodEx error! no NativeFmodEx in java.library.path or org.lwjgl.librarypath
    Avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    		{
    		    Init.loadLibraries(INIT_MODES.INIT_FMOD_EX_MINIMUM);
    		}
    		catch(InitException e)
    		{
    		    System.out.printf("NativeFmodEx error! %s\n", e.getMessage());
    		}
    Eclipse ne me fait pas d'erreur lors de la compilation... Une idée du problème ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est bizzare, car il me semble que j'ai tout configuré juste. Ci-joint, le screen de ma config sous Eclispe



    Une idée du problème ?

    EDIT : Je viens de résoudre mon problème : L'archive du SDK ne s'etait pas bien extraite. Et mainteant ça marche.

    Merci quand même
    Dernière modification par Invité ; 25/09/2009 à 11h24.

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Oui j'avais utilisé le resultat du travail de Jouvieje qui est impeccable

    J'ai eu aussi qlq souci avec les lib/dll

    Bonne continuation.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui, le portage de la librairie en Java à l'air impec'. Mais par contre, avais-tu eu un problème comme le mien :

    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
    40
    41
    42
    43
    44
    		ByteBuffer soundBuffer;
    		FMOD_CREATESOUNDEXINFO exinfo;
    		Channel channel = new Channel();
    		FMOD_RESULT result;
    		int version;
     
    		/*
    		 * Buffer used to store all datas received from FMOD.
    		 */
    		ByteBuffer buffer = newByteBuffer(SIZEOF_INT);
     
    		/*
    		 * Create a System object and initialize.
    		 */
    		result = FmodEx.System_Create(system);
    		ErrorCheck(result, "SystemCreate");
     
    		result = system.getVersion(buffer.asIntBuffer());
    		ErrorCheck(result, "Version");
    		version = buffer.getInt(0);
     
    		if(version < FMOD_VERSION) {
    			info_erreur.append("Error!  You are using an old version of FMOD %08x." + newline);
    			return;
    		}
     
    		result = system.init(32, FMOD_INIT_NORMAL, null);
    		ErrorCheck(result, "Initialisation");
     
    		// Erreur numero 1
    		soundBuffer = Medias.loadMediaIntoMemory("N:\\user_folder\\modules\\PR_PROJ_PROG\\code\\Projet\\bin\\son\\Media\\drumloop.wav");
    		exinfo = FMOD_CREATESOUNDEXINFO.create();
    		exinfo.setLength(soundBuffer.capacity());
     
    		result = system.createSound(soundBuffer, FMOD_HARDWARE | FMOD_OPENMEMORY, exinfo, sound1);
    		ErrorCheck(result, "CreateSound");
    		soundBuffer = null;
    		exinfo.release();
     
    		result = sound1.setMode(FMOD_LOOP_OFF); /* drumloop.wav has embedded loop points which automatically makes looping turn on, */
    		ErrorCheck(result, "SetMode"); /* so turn it off here.  We could have also just put FMOD_LOOP_OFF in the above CreateSound call. */
     
    		result = system.playSound(FMOD_CHANNEL_FREE, sound1, false, channel);
    		ErrorCheck(result, "PlaySound");
    Lors de la compilation, j'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.NullPointerException
    	at org.jouvieje.FmodEx.Sound.setMode(Unknown Source)
    	at particule_V3.Son.initFMOD(Son.java:124)

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Non j'ai deja fait un "lecteur de sample" avec et sans loop sans probleme.

    sound1 tu l'initialise comment ? car je ne le vois pas dans ton code ?

    (soundBuffer = null; ????)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je l'initialise comme ceci :

    private Sound mon_son = new Sound();
    Je te re-donne tout le code :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    package particule_V3;
     
     
    import java.nio.ByteBuffer;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
     
    import org.jouvieje.FmodEx.Channel;
    import org.jouvieje.FmodEx.FmodEx;
    import org.jouvieje.FmodEx.Init;
    import org.jouvieje.FmodEx.Sound;
    import org.jouvieje.FmodEx.System;
    import org.jouvieje.FmodEx.Defines.INIT_MODES;
    import org.jouvieje.FmodEx.Enumerations.FMOD_RESULT;
     
    import org.jouvieje.FmodEx.Exceptions.InitException;
    import org.jouvieje.FmodEx.Structures.FMOD_CREATESOUNDEXINFO;
     
    import son.Medias;
     
     
    import static org.jouvieje.FmodEx.Defines.FMOD_INITFLAGS.FMOD_INIT_NORMAL;
    import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_HARDWARE;
    import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_LOOP_OFF;
    import static org.jouvieje.FmodEx.Defines.FMOD_MODE.FMOD_OPENMEMORY;
    import static org.jouvieje.FmodEx.Defines.VERSIONS.FMOD_VERSION;
    import static org.jouvieje.FmodEx.Defines.VERSIONS.NATIVEFMODEX_JAR_VERSION;
    import static org.jouvieje.FmodEx.Defines.VERSIONS.NATIVEFMODEX_LIBRARY_VERSION;
    import static org.jouvieje.FmodEx.Enumerations.FMOD_CHANNELINDEX.FMOD_CHANNEL_FREE;
    import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_ERR_CHANNEL_STOLEN;
    import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_ERR_INVALID_HANDLE;
    import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_OK;
    import static org.jouvieje.FmodEx.Misc.BufferUtils.newByteBuffer;
    import static org.jouvieje.FmodEx.Misc.BufferUtils.SIZEOF_INT;
     
    import static org.jouvieje.FmodEx.Enumerations.FMOD_RESULT.FMOD_OK;
     
     
     
    public class Son extends JFrame {
     
    	JFrame frame;
    	JPanel info;
    	JTextArea info_erreur;
     
    	private System system = new System();
    	private Sound mon_son = new Sound();
     
    	private final static String newline = "\n";
     
    	private void ErrorCheck(FMOD_RESULT result, String text) {
    		if(result != FMOD_OK) {
    			String errstring = String.format("FMOD error! (%d)\n%s", result.asInt(), FmodEx.FMOD_ErrorString(result));
    			//printf("%s", errstring);
    			info_erreur.append(text + ": " + errstring + newline);
    		}
    	}
     
    	public static void main(String[] args) {
    		Son frame = new Son();
    		frame.setVisible(true);
    	}
     
    	public Son() {
    		super("Son");
    		initGUI();
    		initFMOD();
    	}
     
    	private void initFMOD() {
    		// TODO Auto-generated method stub
    		try
    		{
    		    Init.loadLibraries(INIT_MODES.INIT_FMOD_EX_MINIMUM);
    			info_erreur.append("NativeFmodEx ok" + newline);
    		}
    		catch(InitException e)
    		{
    			info_erreur.append("NativeFmodEx error! %s\n" + newline);
    		   // exit(1);
    		}
     
    		ByteBuffer soundBuffer;
    		FMOD_CREATESOUNDEXINFO exinfo;
    		Channel channel = new Channel();
    		FMOD_RESULT result;
    		int version;
     
    		/*
    		 * Buffer used to store all datas received from FMOD.
    		 */
    		ByteBuffer buffer = newByteBuffer(SIZEOF_INT);
     
    		/*
    		 * Create a System object and initialize.
    		 */
    		result = FmodEx.System_Create(system);
    		ErrorCheck(result, "SystemCreate");
     
    		result = system.getVersion(buffer.asIntBuffer());
    		ErrorCheck(result, "Version");
    		version = buffer.getInt(0);
     
    		if(version < FMOD_VERSION) {
    			info_erreur.append("Error!  You are using an old version of FMOD %08x." + newline);
    			return;
    		}
     
    		result = system.init(32, FMOD_INIT_NORMAL, null);
    		ErrorCheck(result, "Initialisation");
     
    		// Erreur numero 1
    		soundBuffer = Medias.loadMediaIntoMemory("N:\\user_folder\\modules\\PR_PROJ_PROG\\code\\Projet\\bin\\son\\Media\\drumloop.wav");
    //		soundBuffer = Medias.loadMediaIntoMemory("/Media/drumloop.wav");
     
    		exinfo = FMOD_CREATESOUNDEXINFO.create();
    		exinfo.setLength(soundBuffer.capacity());
    		result = system.createSound(soundBuffer, FMOD_HARDWARE | FMOD_OPENMEMORY, exinfo, mon_son);
    		ErrorCheck(result, "CreateSound");
    		soundBuffer = null;
    		exinfo.release();
     
     
    	result = mon_son.setMode(FMOD_LOOP_OFF);//  drumloop.wav has embedded loop points which automatically makes looping turn on, 
    		ErrorCheck(result, "SetMode");  //so turn it off here.  We could have also just put FMOD_LOOP_OFF in the above CreateSound call. 
     
    		result = system.playSound(FMOD_CHANNEL_FREE, mon_son, false, channel);
    		ErrorCheck(result, "PlaySound");
     
    	}
     
    	private void initGUI() {
    		// TODO Auto-generated method stub
     
     
    		info = new JPanel();
    		info_erreur = new JTextArea(10,35);
     
     
    		info_erreur.setLineWrap(true);
    		info_erreur.setWrapStyleWord(true);
     
    		info.add(info_erreur);
     
    		getContentPane().add(info);
    		setSize(400, 400);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    }
    Et j'ai oublié de dire que l'exemple fourni dans le SDK ne marche pas non plus... Mais d'autres exemples marchent

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Meme erreur Mais entre nous c'est surement rien de grave...

    Je vais looker en detail si tu vx.

    EDIT :

    result = system.createSound(soundBuffer, FMOD_HARDWARE | FMOD_OPENMEMORY, exinfo, mon_son);
    ErrorCheck(result, "CreateSound");


    ---> le result n'est pas OK pour moi ici ...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Invité
    Invité(e)
    Par défaut
    Oui, j'en suis arrivé à la même conclusion... Mais je ne vois pas le problème... Ce vient peut être du chemin du fichier ? Pourtant le fichier audio est le même que celui de l'example

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Oui non je pense que nous avons detecté le meme probleme

    C'est bizarre car je sais que l'exemple fourni fonctionnait tres bien et c'est cet exemple la que tu as repris je pense sinon j'essayerai encore de t'aider ce weekend.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Invité
    Invité(e)
    Par défaut
    Oui c'est exactement le même exemple. J'ai juste adapté 2~3 trucs pour faciliter le debbugage... C'est bizzare que ça ne tourne pas... Car d'après Eclipse, il n'y a pas d'erreurs, c'est seulement lors de l'affichage de la fenêtre qu'on voit qu'il y a une erreur

  15. #15
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Citation Envoyé par seb2020 Voir le message
    Oui c'est exactement le même exemple. J'ai juste adapté 2~3 trucs pour faciliter le debbugage... C'est bizzare que ça ne tourne pas... Car d'après Eclipse, il n'y a pas d'erreurs, c'est seulement lors de l'affichage de la fenêtre qu'on voit qu'il y a une erreur
    Avant tu avais le message d'erreur dans le console mais il y'a eu du changement dans la lib apparement.
    Et dans ce cas ci on ne voit aucune erreur afficher nulle part, alors qu'avant c'etait le cas.
    Mais de toute maniere c'est bizarre que l'exemple fourni ne fonctionne pas (j'ai repris playsound.java comme test).

    Alors soit je suis devenu amnesique (ce qui est possible) soit il y'a eu un changement dans la lib qui pose probleme (ce qui est possible aussi, mais qui m'etonnes quand meme).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 87
    Par défaut
    Citation Envoyé par seb2020 Voir le message
    ...

    Je suis en train de tester FMOD, mais j'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NativeFmodEx error! no NativeFmodEx in java.library.path or org.lwjgl.librarypath
    Salut,

    J'ai exactement le même problème, te souviens tu comment tu as fait pour le résoudre?

    Merci

  17. #17
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    As tu bien installé Fmod ainsi que ses dll ?
    As tu bien mis les references vers les librairies dynamique (DLL, so ou autres) de fmod ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Spectre Audio en Java
    Par guatto dans le forum Débuter
    Réponses: 0
    Dernier message: 15/06/2015, 22h50
  2. Analyser flux audio du micro.
    Par maxetx dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 27/03/2009, 15h25
  3. Composant pour afficher spectre audio
    Par erkan37 dans le forum Interfaces Graphiques en Java
    Réponses: 12
    Dernier message: 23/04/2008, 13h00
  4. Aquisition plus analyse audio
    Par Mr_Coinche dans le forum C++
    Réponses: 1
    Dernier message: 16/02/2008, 20h10
  5. Spectre d'un signal audio
    Par trytan dans le forum Signal
    Réponses: 3
    Dernier message: 23/10/2007, 10h44

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