begin process at 2010 02 10 03:11:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Multimédia

 > 

Audio

 > 

Création fichier wav avec fréquences


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

Création fichier wav avec fréquences

jeudi 29 juin 2006 à 14:50:12 | Création fichier wav avec fréquences

Benjop


Bonjour,
je suis actuellement en stage et je dois absolument pouvoir créer un son a partir de fréquences données. J'ai évidemment cherché partout sur le site mais sans succès en C#. Donc j'ai récupéré un tuto sur la création de son en VB mais ma traduction en C# ne doit pas être bonne car le fichier créé est illisible.
Donc je vous copie le code de la procédure qui crée le fichier wav et si vous pouviez m'aider à le débugger j'en serais heureux. Merci d'avance.

public class Class1
    {
        BinaryWriter bw = null;
        BinaryReader br = null;
        private long Freq_E = 44100;
        private int Bit_16 = 16;
        private long fmt = 16;
        private int Mono = 1;
        private int PCM_Format = 1;
        private int blockAlign = 2;
        private double Pi = Math.PI*2;
        public Class1()
        {
            //
            // TODO : ajoutez ici la logique du constructeur
            //
        }

        public void create()
        {
           
            byte[] buffer = new byte[512];
            byte[] buffer2;
            //ArrayList buffer = new ArrayList();
            int compteur; //Variable de comptage pour l'état du buffer
            long t=0; //Temps total

            long longueur; //longueur du son en échantillons
            double FreqBip1; //en Hz
            double FreqBip2; //en Hz
            double FreqBip3; //modulation de phase en Hz
            double Qte; //amplitude de la modulation de phase
            int Volume; //entre 0 et 32767
            double tmpFreq; //variables temporaires
            double TmpDbl;

            long tmpLong;
                //Valeurs a ajuster par l'utilisateur
                FreqBip1 = 1200;
                FreqBip2 = 200;
                FreqBip3 = 10;
                Qte = 3;
                longueur = 88200;
                Volume = 5000;
               

                FreqBip1 = FreqBip1 / Freq_E; //calcul des frequence à l'échelle de l'échantillon
                FreqBip2 = FreqBip2 / Freq_E;
                FreqBip3 = FreqBip3 / Freq_E;
                TmpDbl = (FreqBip2 - FreqBip1) / (2 * longueur); //calcul du pas pour la fréquence

                if (!File.Exists("test.wav"))
                {
                    // Le fichier n'existe pas. On le crée
                    bw = new BinaryWriter(File.Create("test.wav"));
                }
                else
                {
                    File.Delete("test.wav");
                    bw = new BinaryWriter(File.Create("test.wav"));
                }
                //En tête
                WriteChars(bw,"RIFF");
                tmpLong = longueur * 2 + 36;
                bw.Write((int)tmpLong);
                WriteChars(bw,"WAVEfmt ");
                bw.Write((int)fmt);
                bw.Write((int)PCM_Format);
                bw.Write((int)Mono);
                bw.Write((int)Freq_E);
                tmpLong = Freq_E * (Bit_16 / 8) * Mono;
                bw.Write((int)tmpLong);
                bw.Write((int)blockAlign);
                bw.Write((int)Bit_16);
                WriteChars(bw,"data");
                tmpLong = longueur * 2;
                bw.Write(tmpLong);
                //Fin en tête
               

                do
                {
                    compteur = 0;
                    do
                    {
                        tmpFreq = Pi * (FreqBip1 + t * TmpDbl); //calcul de la frequence du son a produire
                        buffer[compteur]=(byte)((Volume * Math.Sin(t * tmpFreq + (Qte * Math.Sin(Pi * t * FreqBip3)))));
                        t++;
                        compteur = compteur + 1;
                    }while( t < longueur && compteur < 512);
               
                    if(t == longueur)
                    {
                        buffer2 = new byte[compteur - 1];
                        for(int j=0;j<compteur-1;j++)
                        {
                            buffer2[j] = buffer[j];
                        }
                        bw.Write(buffer2);
                    }
                    else
                    {
                        bw.Write(buffer);
                    }
                   
                   
                }while(t != longueur);

                bw.Close();
                buffer = null;
                MessageBox.Show("Emplacement du fichier :" + "test.wav");
        }

La procédure WriteChars fut récupérée de MSDN et permet d'écrire chaque caractère de la string passée en paramètre avec le BinaryWriter.
Lorsque j'essaie de le lire avec Windows Media Player (il faut que ca marche avec celui la) il me dit que le format est incorrect.
Si vous avez en plus des idées pour faire ressortir une représentation spectrale du son dans le temps, je suis preneur ^^
Voila c'est tout.

Vive la Vie !!!
samedi 1 juillet 2006 à 00:36:53 | Re : Création fichier wav avec fréquences

Lutinore

Administrateur CodeS-SourceS
Salut, faudrait voir comment est définie WriteChars, n'oublie pas que les chars en NET sont sur 2 octets.
mardi 4 juillet 2006 à 09:18:30 | Re : Création fichier wav avec fréquences

Benjop

private

void WriteChars(BinaryWriter wrtr, string text)

{

   for ( int i = 0; i < text.Length; i++)

   {

      byte c = ( byte )text[i];

      wrtr.Write(c);

   }

}

Voila la définition de WriteChars ^^

Vive la Vie !!!
mercredi 5 juillet 2006 à 17:32:09 | Re : Création fichier wav avec fréquences

Lutinore

Administrateur CodeS-SourceS
Ca écrit bien un seul octet..
jeudi 6 juillet 2006 à 11:01:34 | Re : Création fichier wav avec fréquences

Benjop

J'ai également essayé avec
char c = (char)text[i];
ca n'a pas fonctionné pour autant...

Vive la Vie !!!


Cette discussion est classée dans : int, write, wav, longueur, bw


Répondre à ce message

Sujets en rapport avec ce message

convertion C -> C# [ par LordBob ] Bonjour a tous, voila je cherche à convertire une fonction que j'ai codé en C en C#... voila la fonction C:         static private int MSNBruteForce( Comment faire un tableau en C# [ par mydust ] Bonjour,J'aimerai faire un tableau d'integer en C#.net avec Visual Studio.Pour l'instant il est ainsi: int[,] nextpixel=new <FONT c Bulle Jaune & Beep( int, int ); [ par ricklekebekoi ] Bonjour,J'ai deux questions, les deux fesant appel aux winform.1. J'aimerais que dans mon OnMouseHover, je puisse faire apparaitre une sorte de bulle Fichier WAV en tant que ressource [ par henridaniel ] Fichier WAV en tant que ressource=========================Comment faire pour incorporer un fichier wav dans l'exécutable ?J'ai lu le code concernant u DirectSound - Ecrire un fichier WAV? [ par bucherb ] Hello!J'utilise un buffer de DirectSound pour jouer des sons, et je leur applique des effets (genre écho, distortion) est-ce que c'est possible de sau ComboBox [ par auges ] Salut à tousest ce qqn pourrait me dire ce qui ne va pas avec ce code.je voudrais remplir un combobox avec des strings allant de 0000 à FFFF.for(int i [C#] INI -> XML - Code de gruick ou non ? [ par scoubidou944 ] voici la structure XML à partir du fichier INI :     "Section0">        "Ke casting pb de passage de c++ en C# [ par docteur_re ] bonjouralors voilà mon probleme : en C++ je fais ca : string recvQueue;int nbRead = recv(socketClient, buffer, BUFSIZE, 0);<FONT color= Problème dans la manipulation d'une classe [ par chandler8692 ] Alors, je ne trouve pas la solution à ce problème : J'ai créé une classe que j'ai appellé cell() qui a comme objet 2 coordonnées coord[0] et coord[1 Problème de liste [ par ellandebasque ] Bonjour,j'ai un problème pour ajouter des éléments dans une collection : tousles éléments sont égaux. Grâce au débogueur (pas-à-pas) j'ai constatéq


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,484 sec (3)

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