begin process at 2012 05 29 04:45:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Multimédia

 > 

fmod spectrum analisys


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fmod spectrum analisys

samedi 23 juillet 2005 à 12:22:33 | fmod spectrum analisys

satellite34

salut, je programme un player mp3 avec wxWidegets et Fmod et je veux y mettre un spectrum, mais voila, aucune info sur le web et moi c'est la premiere fois que je veux faire ca.Je comprends pas la marche a suivre aprés avoir recupéré mes 512 canaux.

donc si qqu' un a un tuto ou des infos sur le sujet a faire toourner faites suivre car je crois que c sans issue!

thx ++
samedi 23 juillet 2005 à 16:03:31 | Re : fmod spectrum analisys

SnOOpss

En fait ya plusieur methodes comment tu recupere tes canaux ??

en fait quand tu fait  const float *spectrum = FSOUND_DSP_GetSpectrum( );
tu recupete toute tes valeurs dans un tableau (de 512 valeurs) dont le pointeur est spectrum
apres il te suffit de faire une boucle pour en faire ce que tu veut

int spectrumValue
 for ( int i = 0; i < 512; ++i )
     {
        spectrumValue = int(100 * spectrum[ i ] );

         [.....]
     }

Par contre tu verra a l'essai pour le spectographe il vaut mieux rester sur une plage ex ( 100 -> 512) plutot que de faire la totalité du tableau ( a certaines frequences ca ne corespond plus a rien )

Pour avoir un truc encore plus precis tu peut meme faire une moyenne de valeurs ex plutot faire
int spectrumValue
 for ( int i = 0; i < 512; i +5 )
     {
           spectrumValue = int(100 * (spectrum[ i ] + spectrum[ i +1 ] + spectrum[ i+2 ] + spectrum[ i+3 ]  + spectrum[ i+4 ] )) / 5;

         [.....]
     }
A la place de [....] tu met code comme par exemple le dessin d'un point au coordonnées (i,spectrumValue) ici tu auras un spectrographe a point de taille (512,100)
dimanche 24 juillet 2005 à 01:18:33 | Re : fmod spectrum analisys

satellite34

merci, c'est deja un bon debut mais je n' y arrive tjrs pas.lol.
Je te met le code du spectrum

#include "Mp3PlayerFrm.h"


//ici la vrai fonction du spectre
void Mp3PlayerFrm::spectrumData(int winx, int winy)
{
    const float *spectrum = FSOUND_DSP_GetSpectrum();
    int spectrumValue;

    for ( int i = 0; i < 512; i +5 )
     {
           spectrumValue = int(100 * (spectrum[ i ] + spectrum[ i +1 ] + spectrum[ i+2 ] + spectrum[ i+3 ]  + spectrum[ i+4 ] )) / 5;
           bande->DrawPoint(i, spectrumValue);                 //
     }
}

/*/////////////////////////////////////////////////////////////////////////////////////////////////////
*Clik sur spectrum dans le menu
*//////////////////////////////////////////////////////////////////////////////////////////////////////

void Mp3PlayerFrm::MnuSpectrum(wxCommandEvent& event)
{
    FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), true);
    if (!FSOUND_DSP_GetActive(FSOUND_DSP_GetFFTUnit()))
    {wxString msg;
    msg.Printf( _T("Oups spectrum pas actif\nLe spectrum ne fonctionne que lorsqu' un stream est ouvert\nOuvrez un fichier"));
    wxMessageBox(msg, _T("Infos"), wxOK | wxICON_EXCLAMATION | wxCENTRE, this);return;
    }//si le spectrum est actif....
    this->SetSize(380, 280, 690, 380);
    FSOUND_DSP_SetPriority(FSOUND_DSP_GetFFTUnit(), 150);
    FSOUND_DSP_GetSpectrum();
}


//dans le .h, en rapport avec le spectre:
FSOUND_DSPUNIT *spectre;
wxDC *bande;

bon, je sias que ce code ne renvoie pas spectrumData ds MnuSpectrum mais a force de trafiquer je l'ai remis de maniere lisible.

Un peu plus d' infos sur dessinner un point aux coordonnées i, spectvalue   stp.
et comment fais pour mettre ce spectrum en adequation avec les cannaux?

a l'aide!!!Putain de web! ya 0 infos sur les spectrums

enfin, merci pour ton aide!

dimanche 24 juillet 2005 à 11:16:55 | Re : fmod spectrum analisys

satellite34

#include "Mp3PlayerFrm.h"
#include <wx/gdicmn.h>


//ici la vrai fonction du spectre

void Mp3PlayerFrm::spectrum01 ( wxCommandEvent& event )
{    
    const float *spectrumData = FSOUND_DSP_GetSpectrum();    //recupere les 512 cannaux separés
    int spectrumValue;
   
   
   
    for ( int i = 0; i < 512; ++i )
              {
                  spectrumValue = int(100 * spectrumData[ i ] );
                  point = new wxPoint(i, spectrumValue);
                  this->point;
              }
}

/*/////////////////////////////////////////////////////////////////////////////////////////////////////
*Clik sur spectrum dans le menu
*//////////////////////////////////////////////////////////////////////////////////////////////////////

void Mp3PlayerFrm::MnuSpectrum(wxCommandEvent& event)
{
    FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), true);
    if (!FSOUND_DSP_GetActive(FSOUND_DSP_GetFFTUnit()))
    {wxString msg;
    msg.Printf( _T("Oups le spectrum n' est pas actif\nLe spectrum ne fonctionne que lorsqu' un stream est ouvert\nOuvrez un fichier"));
    wxMessageBox(msg, _T("Infos"), wxOK | wxICON_EXCLAMATION | wxCENTRE, this);return;
    }//si le spectrum est actif....
    this->SetSize(0, 0, 800, 380);
    this->Center();
    spectrum01 (event);
}

"statement has no effect"

Un ti tuto sur le spectrum SVP!!!!!!!!!!!!!!!!!!!!!!

o sinon, explike un peu la démarche pour dessiner un point aux coordonées x, y
car
point = new wxPoint(i, spectrumValue);
this->point;

ne marche pâs

allé bon dimanche !
++

dimanche 24 juillet 2005 à 11:31:31 | Re : fmod spectrum analisys

SnOOpss

Perso moi je ne me sers pas de    FSOUND_DSP_SetPriority(FSOUND_DSP_GetFFTUnit(), 150);

Mais je croit pas que cette fonction change grand chose !!

Pour trouver le prb passe en mode debug et surveille la fonction
bande->DrawPoint
i doit bien aller de 0 a 512
et spectrumValue de 0 a 100 sinon utilise un coefficient pour le remonter (moi 64 mais je sais plus pourquoi).

Sinon un exmple de fonction tres simple

void affpoint ( HDC hdc,int x ,int y) {
   SetPixel(hdc,x,100-y)

}

Par contre autre chose le spectrographe est tres gourmand en ressource (et tres lente) donc la commande setpixel ne te servira que pour tes test ou avancer un peu. Mais au final il vaut mieux passer par la gestion "des bits d affichages" , je sais pas comment expliquer ca, c'est l exemple de demo de la librairie, et en cherchant "setpixel" sur ce site ya un topic qui s'apelle "setpixel plus rapide" ou un truc comme ca. La prochaine fois je te passerais le lien si tu trouve pas, la en ce moment la fonction recherche deconne encore sur ce forum !!!

"et comment fais pour mettre ce spectrum en adequation avec les cannaux?"
Tu travailles avec des mp3 ??? Pasque cette fonction fait juste un tableau de 512 valeur avec les frequences
ex si tu traite de 1 hz a 22000
spectrum[1] = 1hz a 42 hz
spectru[2] = 42 hz a  84 hz
etc ...

Function to return a pointer to the current spectrum buffer. The buffer contains 512 floating
point values that represent each frequency band's amplitude for the current FMOD SoundSystem
mixing buffer. The range of frequencies covered by the spectrum is 1 to the nyquist frequency
or half of the output rate. So if the output rate is 44100, then frequencies provided are up
to 22050. (entry 511)

Remarks

Note that hardware sounds, MIDI, files do not register on the spectrum graph as they are not run through FMODs DSP system.
Note that to use this you have to turn on the FSOUND FFT DSP unit. This is achieved by calling FSOUND_DSP_GetFFTUnit, then using FSOUND_DSP_SetActive to turn it on.

dimanche 24 juillet 2005 à 11:36:58 | Re : fmod spectrum analisys

satellite34

yo ! merci!

on a ecrit en meme temps je crois ce quia  donné une impression d' instantaneité!lol!

bon ben je vais essayer tt ca merci pour les précisions , c'est  supa cool
quand j' orai fini , je la mettrai ici car g pas vu dee player mp3 que en wxWidgets et fmod ( ou g mal vu)

allé a ++
dimanche 24 juillet 2005 à 19:58:45 | Re : fmod spectrum analisys

satellite34

heuuuuuu, en fait pour dessinner le spectrum, il faut que je creer une zone speciale???? une bipmap????????
ou est ce qu' il n' ya rien a ajouter car je vois pas ou spectre peut se placer sur ma page

je te met le code

#include "Mp3PlayerFrm.h"
#include <wx/gdicmn.h>

//ici la vrai fonction du spectre

void Mp3PlayerFrm::spectrum01 ( wxCommandEvent& event )
{    
    const float *spectrumData = FSOUND_DSP_GetSpectrum();    //recupere les 512 cannaux separés
    int spectrumValue;
   
  
    for ( int i = 0; i < 512; ++i )
              {
                  spectrumValue = int(100 * spectrumData[ i ] );
                  SetPixel(hdc, i, spectrumValue, COLORREF RGB( 100, 174, 100 ));
              }
}

/*/////////////////////////////////////////////////////////////////////////////////////////////////////
*Clik sur spectrum dans le menu
*//////////////////////////////////////////////////////////////////////////////////////////////////////

void Mp3PlayerFrm::MnuSpectrum(wxCommandEvent& event)
{
    FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), true);
    if (!FSOUND_DSP_GetActive(FSOUND_DSP_GetFFTUnit()))
    {wxString msg;
    msg.Printf( _T("Oups le spectrum n' est pas actif\nLe spectrum ne fonctionne que lorsqu' un stream est ouvert\nOuvrez un fichier"));
    wxMessageBox(msg, _T("Infos"), wxOK | wxICON_EXCLAMATION | wxCENTRE, this);return;
    }//si le spectrum est actif....
    this->SetSize(0, 0, 800, 380);
    this->Center();
    spectrum01 (event);
}


"Perso moi je ne me sers pas de    FSOUND_DSP_SetPriority(FSOUND_DSP_GetFFTUnit(), 150);

Mais je croit pas que cette fonction change grand chose !!" ----->>change gd choze ou pas gd choze???
d' aprés mon code tu crois que ca peut marcher??? je vois pas comment m'enfin bon,,

++passion

lundi 25 juillet 2005 à 19:36:14 | Re : fmod spectrum analisys

SnOOpss

Oui !!
il te faut creer un HDC !! ou en recuperer un si tu en as deja un !!!
lundi 25 juillet 2005 à 21:14:38 | Re : fmod spectrum analisys

satellite34

oui HDC hdc c'est pour win32 mais moi je suis sous wxWidgets et c ca mon pb!
par contre, si ya moyen, comment creer un HDC et est ce que ce n'est pas equivalent au device context de wxWidgets?  wxDC

thx
++
lundi 25 juillet 2005 à 21:22:05 | Re : fmod spectrum analisys

satellite34

//---------------------------------------------------------------------------
//
// Name:        spectrum.cpp
// Author:      Nicolas Robert
// Created:     14/07/2005 17:42:55
//
//---------------------------------------------------------------------------

#include "Mp3PlayerFrm.h"

//ici la vrai fonction du spectre

void Mp3PlayerFrm::spectrum01 ( wxCommandEvent& event )
{    
    const float *spectrumData = FSOUND_DSP_GetSpectrum();    //recupere les 512 cannaux separés
    int spectrumValue;
    wxColour MaCouleur(0,0,255);
    wxPen MonCrayon(MaCouleur,10,wxSOLID);   
  
    for ( int i = 0; i < 512; ++i )
              {
                  spectrumValue = int( 100 * spectrumData[ i ] );
                  m_DC->SetPen(MonCrayon);
                  m_DC->DrawPoint(i, spectrumValue);
              }
}

/*/////////////////////////////////////////////////////////////////////////////////////////////////////
*Clik sur spectrum dans le menu
*//////////////////////////////////////////////////////////////////////////////////////////////////////

void Mp3PlayerFrm::MnuSpectrum(wxCommandEvent& event)
{
    FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), true);
    if (!FSOUND_DSP_GetActive(FSOUND_DSP_GetFFTUnit()))
    {wxString msg;
    msg.Printf( _T("Oups le spectrum n' est pas actif\nLe spectrum ne fonctionne que lorsqu' un stream est ouvert\nOuvrez un fichier"));
    wxMessageBox(msg, _T("Infos"), wxOK | wxICON_EXCLAMATION | wxCENTRE, this);return;
    }//si le spectrum est actif....
    this->SetSize(0, 0, 800, 380);
    this->Center();
    spectrum01 (event);
}

m_DC  pointe sur wxDC qui est le device context

et ds mon code qui creer les gui j' ai mis :

m_DC =new wxDC();


1 2 3

Cette discussion est classée dans : fmod, spectrum, suivre, analisys


Répondre à ce message

Sujets en rapport avec ce message

initialisation de Fmod avec devC++ [ par cppdupdup34 ] je n'y arrive pas je crois qu' il faut faire quelque chose dans lezs option du projet mais je ne sait pas quoi.si vous avez une minute!!mercicppDupDup Fmod [ par norton ] Bonjour a tous, j'aimerai savoir comment faire avec Fmod pour que mon programme vérifie la lecture de mon mp3.je m'explique, j'aimerai que quand mon m probleme avec la librairie FMOD (musique et sons) [ par Amanobuo ] Bonjour, je n'arriva pas a utiliser FMOD pour jouer des musique dans les application. Pour comprendre ce qui ne va pas, voila ce que j essaye de faire FMOD et MP3 [ par LordBob ] Salut a tous,je sais que ma question est simple et qu'il y a des exemples sur le site, mais malgres tou cela, je n'y arrive pas !!! je n'arrive pas à Mp3 et Lib.Fmod [ par SuperTonic ] BonjourJ'ai un soucis sans compendre pkoi. Je dvp sous DevCpp.Je souhaite simplement lancer un mp3 avec la lib fmod.mais j'ai cette erreur :C:\DevCpp\ FMOD [ par xarier ] SALUT A TOUS comme vous s'avez il existe deux frequence pour les stream (MP3,WMA...) soit le 24000 ou 44100.Alors la je veut que quand je lance une mu fmod [ par khayyam ] salut, ma question est toute simple : comment savoir si un son est terminé de jouer ou non (avec fmod) ?? fmod - arrêter un mp3 [ par khayyam ] salut à tous, pour jouer un mp3 avec fmod, j'utilise le code suivant :son=FSOUND_Sample_Load ( FSOUND_FREE, "toto.mp3", FSOUND_HW2D, 0, 0);channel = F [Fmod] Savoir si un "stream" est joué [ par Rouliann ] Salut tout le monde!Ma question est dans le sujet en fait : Est-ce qu'il y a une fonction qui indique si un "stream" est joué ?J'ai regardé dans les p fmod [ par goldberg13 ] slt, j'ai un petit probleme avec fmod jarrive pa a charger de son depuit une ressource en utilisant la fonction :FMUSIC_LoadSongEx si kelkin porrai me


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales