Forum
Tipps
News
Menu-Icon

Closed: Ist MCI-Ausgabe überhaupt asynchron möglich?

Also ich habe den anderen Thread geschlossen, nachdem ich jetzt mit meinem C-Programm Midi-Files abspielen kann. Aber eigentlich wollte ich ja keine fertigen Files ausgeben, sondern so was wie ein Keyboard programmieren. Was auf dem Atari 800 problemlos ging, gestaltet sich auf dem Windows-XP-PC zum Problem.

Ich habe mich weiter in die MCI-Programmierung eingelesen und komme langsam zu dem Verdacht, dass ich da auf dem Holzweg bin. Deshalb möchte ich noch mal ein paar Fragen stellen:

1) Kann man mit MCI überhaupt Töne "starten" und "stoppen", wobei das C-Programm weiter läuft?

2) Wenn nein, wo muss ich mich weiter einlesen?

« Letzte Änderung: 27.05.05, 13:40:02 von cottonwood »

Antworten zu Closed: Ist MCI-Ausgabe überhaupt asynchron möglich?:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
besser so?
Da kommt "404 Seite nicht gefunden". Anschliessend werde ich auf die Startseite geleitet. Was meinst du denn?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Danke. Damit kann ich jetzt Töne definierter Länge ausgeben. Das ist zumindestens schon mal ein Schritt weiter. Aber für die Programmierung eines Keyboards brauche ich eine Funktion, mit der ich Töne unbestimmter Länge starten kann, die dann mit einer weiteren (oder derselben) Funktion wieder ausgeschaltet werden können.

Bei einem Keyboard sollen die Töne ja so lange klingen, wie eine Taste gedrückt wird.

Der code da mag zwar sch...e aussehen und auch fürchterlich strukturiert sein, aber ich glaube zu erkennen, dass die Töne da durch einen Befehl aktiviert werden, danach ein Sleep kommt und dann der Ton wieder ausgemacht wird. Also wenn du das ausreichend umstrickst könnte das das tun was du willst.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Meinst du diese Stelle?

               // convert frequency to midi note
                Note = (int)Round((log(LocSndPar.Freq)-log(440.0))/log(2.0)*12+69,0);
                Phrase = (LocSndPar.Vol*256+Note)*256+144;
                midiOutShortMsg(hMidi,Phrase);
                Sleep((int)(LocSndPar.Dura*(1/LocSndPar.Tempo+0.0001)));
                Phrase = (LocSndPar.Vol*256+Note)*256+128;
                midiOutShortMsg(hMidi,Phrase);
                midiOutClose(hMidi);

Da sieht es so aus, als ob da statt des Sleep auch die Tastaturabfrage rein könnte.

Das Programm ist so super dokumentiert. Ich werde mal schauen, ob ich das hinbekomme. Danke erst mal.

27.5.2005: Klappt soweit. Geschlossen.
« Letzte Änderung: 27.05.05, 13:39:36 von cottonwood »

« warum funktioniert kbhit() hier nicht richtig?Unterschied "int main" und "void main" »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Keyboard
Musik Keyboard Ein Keyboard ist im musikalischen Sinne elektronisches Tasteninstrument, dessen Design an ein Klavier angelehnt sind. Es verfügt über eine Reihe...

Dead Link
Als Dead Link, also einen toten Link, bezeichnet man eine Verlinkung oder Verknüpfung, die ins Leere führt. Der Link bezieht sich auf einen Zielpunkt, der nicht...

Deep Link
Die Begriffe Surface Link und Deep Link (in Deutsch: Oberflächenverknüpfung und tiefe Verknüpfung) sind Begriffe aus dem Webmaster-Bereich und bezeichnen v...