Wave Datei von Edit Lesen und Abspielen
-
Hallo Leutz!
Habe folgendes Problem:
Ich habe 2 wave files (a.wave & b.wav) und ich habe eine Edit Komponente und wenn ich jetzt in das Editfeld "abba" schreibe dann soll mein Rechenknecht die wave kombination "a.wav, b.wav, b.wav, a.wav" hintereinander wiedergeben.
Ich habe auch schon etwas herumprobiert ... bin aber leider gescheitert.

-
TheGeek schrieb:
Ich habe auch schon etwas herumprobiert ... bin aber leider gescheitert.
Zeig mal her, vielleicht können wir deine(n) Fehler identifizieren.
-
Also:
AnsiString wavA; AnsiString wavB; void __fastcall TForm1::Button1Click(TObject *Sender) { // der A button sndPlaySound("Ton\\A.wav",SND_ASYNC|SND_FILENAME); wavA = Edit1->Text; wavA += "A"; Edit1->Text = wavA; } void __fastcall TForm1::Button2Click(TObject *Sender) { // der B button sndPlaySound("Ton\\B.wav",SND_ASYNC|SND_FILENAME); wavB = Edit1->Text; wavB += "B"; Edit1->Text = wavB; } void __fastcall TForm1::Button3Click(TObject *Sender) { // die noch nicht fertige Abfrage if (Edit1->Text == "A") sndPlaySound("Ton\\A.wav",SND_ASYNC|SND_FILENAME); if (Edit1->Text == "B") sndPlaySound("Ton\\B.wav",SND_ASYNC|SND_FILENAME); }soo also ich weiss das, dass mit der if Struktur keine gute Idee ist ... und leider ist mir auch noch nicht bekannt wie genau ich 2 oder mehr wav files hintereinander abspielen kann.
Habe schon versucht zwei Labels zu erstellen die ich auslesen lassen kann und die per bool abgefragt werden ob das jeweilige Label mit einem Buchstaben belegt ist oder nicht. Wenn belegt dann auf das nächste Label den String übertragen … hat irgendwie nicht so geklappt …
-
Kann sein das ich mich irre, aber Du gibst im Editfeld einen Text und fügst noch einen Buchstaben hinzu. Das ganze fragst Du mit
if (Edit1->Text == "A")ab. Wenn true dann abspielen. Ja wann denn?
-
Es soll alles abgespielt werden wenn man Button3 drückt (und nur ein ton wenn man einen Buchstaben Button drückt). Wie gesagt ich weiss net so genau ob das mit dem if die richtige wahl ist ...
Der Logischesatz würde ja lauten:
Wenn Edit ein "A" enthält dann spiele "A.wav" und wenn Edit noch ein "B" enthält dann spiele "B.wav" und wenn noch ein "B" enthält dann spiele "B.wav" und wenn Edit ein "A" enthält dann spiele "A.wav" -> ABBA
deswegen hatte ich zuerst an if gedacht ...
-
In deinem Beispiel prüfst du, ob der gesamte Text im Edit gleich A oder B ist. Was du brauchst, ist Zugriff auf die einzelnen Zeichen des Textes, die du in einer Schleife abfragen musst.
Informiere dich, von welchem Typ TEdit::Text ist und sieh dich dazu dann mal in der Hilfe und in der FAQ um.
-
Genau auf selbiges wollte ich hindeuten.
-
Jo habe es selber rausbekommen:
man kann es so machen:
statt
sndPlaySound("Ton\\B.wav",SND_ASYNC|SND_FILENAME);kann man
sndPlaySound("Ton\\B.wav",SND_SYNC|SND_FILENAME);nehmen, dann blockiert das prog zwar kurz aber es spielt hinterenander !

Greets TheGeek!
-
Schön für dich.

Mit dem Fehler in deinem o.g. Beispielcode hat das allerdings nichts zu tun.
-
Mit diesem Code wird die Datei endlos abgespielt:
PlaySound ("Ton\\B.wav",0, SND_FILENAME | SND_ASYNC | SND_LOOP);
Bei BCB 1.0 muss man manchmal erst einen Mediaplayer ins Projekt einfügen, damit dieser Code funktioniert. Wenn er einmal dringewesen war, kann man ihn wieder löschen.

-
Cool !
Gut zu wissen
