Laden...

Ton ausgeben!

Erstellt von Quallo vor 18 Jahren Letzter Beitrag vor 15 Jahren 11.253 Views
Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren
Ton ausgeben!

Ich möchte durch die Boxen einen Piep-Ton ausgeben! Auf jeden Fall muss ich die Dauer des Tons bestimmen, die Höhe noch dazu wäre mir am liebsten.
Gibt es da was, APi-Call oder ne Klasse oder directx technisch etwas!

Ich würde mich freuen, wenn ihr mir helfen könntet!

Grüße
Christoph

S
709 Beiträge seit 2005
vor 18 Jahren
 
/* Deklaration der API-Funktion MessageBeep und bentigter Konstanten */
		[DllImport("User32.dll")]
		private static extern int MessageBeep(uint uType); 

		private const uint MB_SIMPLE_BEEP = 1;
		private const uint MB_ICONHAND = 0x00000010;
		private const uint MB_ICONQUESTION = 0x00000020;
		private const uint MB_ICONEXCLAMATION = 0x00000030;
		private const uint MB_ICONASTERISK = 0x00000040;

		/* Aufzhlung fr die Art des Piepstons */
		public enum BeepType: uint
		{
			Simple = MB_SIMPLE_BEEP,
			Error = MB_ICONHAND,
			Exclamation = MB_ICONEXCLAMATION,
			Question = MB_ICONQUESTION,
			Information = MB_ICONASTERISK
		}

		/* Methode zur Ausgabe eines Piepstons */ 
		public static bool MessageBeep(BeepType beepType)
		{
			return (MessageBeep((uint)beepType) != 0);
		}

Hoffe, das hilft!

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Herzlichen Dank erstmal für diesen Tipp! Das Problem ist, dass ich beabsichtige eine Klasse zu schreiben, die einen String in Morse-Code ausgibt. Bzw generell eine nette Morse-Code-Klasse! Dafür brauche ich allerdings eine Sound-Klasse, wo ich die Länge in milimetern angeben kann!

S
709 Beiträge seit 2005
vor 18 Jahren

So eine Klasse kenn ich auch nicht... Vieleicht hat sonst jemand eine Idee ?(

Übrigens: Gute Programmidee 😁

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Gibt es in DirectX ne Klasse, die gestreamtes Wave ausgibt?
Oder noch besser in der WinApi?

Dann könnte ich on the fly ne wave erstellen und die rausschmeißen. Muss ich mich halt mal tiefer in die Materie fuchsen. Wäre nett wenn ihr mir dabei ein wenig helfen könntet, falls ich mal wieder ein paar Fragen habe. Das wäre dann auch sicherlich was für die Komponentensammlung.

P
939 Beiträge seit 2003
vor 18 Jahren

Hi Quallo,

auf www.codeproject.com findet sich eigentlich immer was. Hier ein paar Suchbegriffe:

PlaySound: eine WinMM-Funktion zum Abspielen von Wav-Dateien. Einfach, aber man hat wenig Kontrolle. (Da gab es auf CodeProject ein ganz einfaches Beispiel zu. Finde ich leider nicht mehr)

WaveOut: lowlevel API zum Abspielen von Wave-Soundbuffers. Aufwändig, arbeitet mit Windowsbotschaften.
Beispielseite: A low-level audio player in C#

Midi: sollte klar sein.

Hier vielleicht zuerst gucken:
CodeProject: Multimedia and GDI+

Gruss
Pulpapex

95 Beiträge seit 2005
vor 18 Jahren

Schau mal hier

Das ist genau das was du suchst.

Ich würde die gerne den C# code dazu posten, aber leider sitze ich grad in der Schule und komme net an den Code in dem ich das Verbaut hab.

Aber ich glaube für das DWORD hab ich int genommen.

/edit

Hab grad festgestellt, das ich VS.NET auf dem Rechner hier hab 😁

Habs mal schnell in Code umgesetzt 😉


class Class1
{
[STAThread]
static void Main(string[] args)
{
Beep(100,1000);
}

[DllImport("Kernel32.dll")]
private static extern bool Beep(uint freq,uint dauer); 
}

Generell find ich die Idee geil 🙂

Kannst die Klasse ja mal irgendwo posten wenn du sie fertig hast 😉

Gruß

LordK

Programmieren in C# hält die grauen Zellen am Leben.
Es schärft alle fünf Sinne: den Schwachsinn, den Blödsinn, den Wahnsinn, den Unsinn und den Stumpfsinn.

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Wow, super!

Damit kann man ja schon mal testen.
Schön wäre es wenn das Beep jetzt auf dem Lautsprecher ausgegeben wird, aber so sollte es reichen.

Ich werde es sowieso so modular realisieren, dass man das beliebig austauschen kann, was bei einem Morse-Code passiert.

Grüße Christoph

95 Beiträge seit 2005
vor 18 Jahren

Original von Quallo
Wow, super!

Damit kann man ja schon mal testen.
Schön wäre es wenn das Beep jetzt auf dem Lautsprecher ausgegeben wird, aber so sollte es reichen.

Hä?

Wie auf dem Lautsprecher ausgegeben wird?
Meinst du normal über die Boxen oder was?

Hm.. da ich kein Speaker hab (Notebook-user 😁 ) wird das bei mir sowieso
über den Lautsprecher emuliert. Vielleicht gibts da aber noch anderweitig ne möglichkeit das "umzulenken"...

Gruß

LordK

Programmieren in C# hält die grauen Zellen am Leben.
Es schärft alle fünf Sinne: den Schwachsinn, den Blödsinn, den Wahnsinn, den Unsinn und den Stumpfsinn.

B
152 Beiträge seit 2005
vor 18 Jahren

Hallo!
Irgendwie bekomme ich das mit dem Beep nicht hin.
Ich muss doch die Kernel32.dll als Resource hinzufügen oder?
Der Meldet bei mir immer, dass diese ungültig ist.

Gruß

Brovning

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Brovning,

nein, musst du nicht als Ressource hinzufügen. Die DllImport-Anweisung reicht.

herbivore

1.549 Beiträge seit 2004
vor 18 Jahren

hab den Thread jetzt nicht ganz gelesen aber hilft dir DAS Ich hab ne Klasse geschrieben, wohin damit?

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

B
152 Beiträge seit 2005
vor 18 Jahren

Ich muss doch in den Quelltext lediglich

[DllImport("User32.dll")]

bzw.

[DllImport("Kernel32.dll")]

schreiben, aber dann erhalte ich folgende Fehlermeldung beim kompilieren:

The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)

Gruß

Brovning

B
152 Beiträge seit 2005
vor 18 Jahren

Ich habs ! ! !
Man benötigt natürlich:

using System.Runtime.InteropServices;

Vielen Dank euch beiden!

Gruß

Brovning

1.820 Beiträge seit 2005
vor 15 Jahren

Hallo!

Der Vollständigkeit halber sollte man noch Console.Beep und Console.WriteLine("\a") als Möglichkeit nennen, einen Ton auszugeben.

Nobody is perfect. I'm sad, i'm not nobody 🙁

94 Beiträge seit 2006
vor 15 Jahren

Hab mir ein kleines Programm geschrieben, mit dem man Töne generieren kann. Hab dazu Console.Beep verwendet. Kann mir jemand sagen, wie ich die Töne auf die Lautsprecher kriege. Werden ja nur intern wiedergegeben!

www.mkellenberger.ch Was ich täglich (neu) entdecke...

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo snoopy90,

Console.Beep gibt nur intern aus. Wenn du extern ausgeben willst, ist Console.Beep nicht das Richtige. Alternativen findest du über die Forumssuche.

herbivore

G
9 Beiträge seit 2007
vor 15 Jahren

Durch die Hilfe eines Forenusers in einem anderen Thread bin ich auf folgendes Beispiel gestoßen:
http://www.codeproject.com/KB/cs/messagebeep.aspx

94 Beiträge seit 2006
vor 15 Jahren

Wow, super service, ich glaub, mit dem Beispiel kann ich ganz gut was anfangen!
Vielen Dank für die schnelle Hilfe!

www.mkellenberger.ch Was ich täglich (neu) entdecke...