Beep c# (api win32) (do, re, mi, fa, sol, la ...)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 32 128 fois - Téléchargée 31 fois

Contenu du snippet

Une petite classe qui m'a aidé a découvrir les sons (gammes, fréquences, notes ...)

Elle est static et posséde une methode asynchrone (thread).

On peut surement mieux faire (je ne suis pas parvenu à jouer deux fréquences en simultanés pour créer des harmoniques, et ce malgrès mon threading. Maybe une limitation de la fonction Beep win32 ou une mauvaise gestion de mes threads).

Page web m'ayant aidées à réaliser la classe (culture G) :
http://courses.ece.uiuc.edu/ece291/books/labmanual/io-devices-speaker.html
http://villemin.gerard.free.fr/CultureG/MusNote.htm
http://chv.chez.tiscali.fr/jm/musique/

Page web exemple de thread (Technique):
http://www.codeproject.com/csharp/threader.asp

Les sources parlent d'elles mêmes je pense (nc).

Source / Exemple :


using System;
using System.Runtime.InteropServices;
using System.Threading;

namespace SQLSharpe
{
	/// <summary>
	/// Class static player de speaker (parfois la carte son simule le buzzer)
	/// </summary>
	public class mySpeaker
	{
		[DllImport("kernel32.dll")]
		public static extern bool Beep( int freq, int dur );

		public readonly static double Do = 32;
		public readonly static double Re = 32* Math.Pow(1.0595,2);
		public readonly static double Mi = 32*Math.Pow(1.0595, 4);
		public readonly static double Fa = 32*Math.Pow(1.0595, 5);
		public readonly static double Sol = 32*Math.Pow(1.0595, 7);
		public readonly static double La = 32*Math.Pow(1.0595, 9);
		public readonly static double Si = 32*Math.Pow(1.0595, 11);

		public static void TestSpeaker()
		{
			for (double i=5;i>0;i--){
				Beep((int)(Do*Math.Pow(2,i)),300);
				Beep((int)(Re*Math.Pow(2,i)),300);
				Beep((int)(Mi*Math.Pow(2,i)),300);
				Beep((int)(Fa*Math.Pow(2,i)),300);
				Beep((int)(Sol*Math.Pow(2,i)),300);
				Beep((int)(La*Math.Pow(2,i)),300);
				Beep((int)(Si*Math.Pow(2,i)),300);
			}

		}

		public static void AsyncBeep(int Frequence, int Duree)
		{
			
			Thread p;
			Beeper b = new Beeper(Frequence,Duree);
			p = new Thread(new ThreadStart(b.Beeping));
			p.Start();
		}

		private class Beeper
		{
			public int Frequence;
			public int Duree;

			public void Beeping()
			{
				Beep(this.Frequence, this.Duree);
			}

			public Beeper(int Frequence, int Duree)
			{
				this.Frequence = Frequence;
				this.Duree = Duree;
			}
		}
	}
}

Conclusion :


mySpeaker.Beep(440, 1000); //Simple Beep synchrone (un LA d'une seconde)
mySpeaker.AsyncBeep(440,1000); //Beep Asynchrone
mySpeaker.Beep(mySpeaker.Do,500); //Beep (DO) synchrone d'une demi seconde
mySpeaker.TestSpeaker(); // Joue 5 Gamme de note (exemple de gamme !!)

A voir également

Ajouter un commentaire

Commentaires

cs_zappy
Messages postés
161
Date d'inscription
mardi 19 juin 2001
Statut
Membre
Dernière intervention
10 avril 2007
-
Tout ça parce que je n'ai trouvé nul part une fonction Beep() ;)
cs_zappy
Messages postés
161
Date d'inscription
mardi 19 juin 2001
Statut
Membre
Dernière intervention
10 avril 2007
-
Le moteur de colorisation syntaxique change la case du champs "Do".
La case étant significative en C#, pensez à modifier la source.
Mecton
Messages postés
18
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
4 novembre 2002
-
Pour être sur de ne pas se mélanger les pinceaux, tu met "Ut" a la place de "Do".
C'est une ancienne appelation de cette note de musique (renaissance)
cs_zappy
Messages postés
161
Date d'inscription
mardi 19 juin 2001
Statut
Membre
Dernière intervention
10 avril 2007
-
Moui .. j'aime bien mon Do, Re, Mi, Fa, Sol, La, Si, DOooo (souvenir d'enfance :)
cs_OphidiaN
Messages postés
235
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
9 novembre 2007
-
j'm bcp :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.