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

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

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.