Verfasst am: 17.12.2010, 09:50
Titel: Pushbutton push to talk
Hallo Zusammen,
kann mir jmd. sagen, ob ein Ausführen der Funktion möglich ist, nur solange der Pushbutton gedrückt wird, also eine Art Push to talk? Als Beispiel möchte ich eine .wav Datei aufnehmen, jedoch nur solange der Pushbutton gedrückt wird. Sobald ich diesen wieder loslasse, soll die Aufnahme beendet werden.
allein mit Matlab wird das denke ich schwierig. Ich würde die Javaebene des Pushbuttons benutzen. Dort gibt es viel mehr methoden z.B. MousePressedCallback und MouseReleasedCallback mit denen du arbeiten kannst. Die Javaebene kannst du z.B. mit hilfe des findjobj vom Matlab File Exchange ansprechen. Oder du erstellst gleich einen JButton in Matlab...
schon mal vielen Dank für die rasche Antwort. Bezüglich der Javaimplementierung bin ich noch völlig ahnunlgslos. Ich werde mich mal anhand deiner Ratschläge durch's Web und Literatur schlagen.
Schau dir dann mal mit get(d) das hgjavacomponent Objekt an. Damit bist du um einiges flexibler...
MfG Marco
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.12.2010, 12:39
Titel:
Hi, bin mir nicht ganz sicher wie man das genau umsetzten müsste/könnte aber du könntest das Problem evtl. auch mit der KeyPressFcn und KeyReleaseFcn lösen.
Ja das ist richtig. Allerdings ohne einen Pushbutton und ohne Mausclick. Zu beachten ist, dass dieser während des Drückens einer Keyboardtaste sehr oft abgefeurt wird (insofern man länger eine Taste drückt)...
Edited: Nunja, vielleicht ist es doch etwas grob gleich das ganze Fenster als Button zu verwenden. Vielleicht möchtest Du per OVEROBJ oder HITTEST in myCallback nur dann auf die Klicks reagieren, wenn sie auch über dem Button getätigt wurden.
da fehlt noch etwas. Und zwar müssen bei der Benuztung von overobj (ist undocumented falls ihr dieses in der Hilfe suchen wollt) die Root Units in Pixel sein. Also z.B.:
% --------------- 8< ------------------------------- function myCallback(ObjH, EventData, Command)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
if ~isempty(overobj('uicontrol')) switch Command
case 'up'
set(ButtonH, 'Value', 0);
a = 'stop'
% STOP THE RECORDING... case 'down'
set(ButtonH, 'Value', 1);
% START THE RECORDING...
a = 'start'
otherwise error('Programming error');
end end
Und zwar müssen bei der Benuztung von overobj (ist undocumented falls ihr dieses in der Hilfe suchen wollt) die Root Units in Pixel sein.
Danke! In Matlab 6.5 war es noch dokumentiert und seit dem habe ich die Hilfe von OVEROBJ nicht mehr aufgerufen.
Merkwürdig: Was soll das Gedöns um nicht-dokumentierte Funktionen eigentlich, wenn Matlab die Dokumentierung einer Funktion mal eben zwischen den Releases verschwinden läßt? Dann ist das Argument von TMW doch ein wenig fadenscheinig: "Wir wollen das nicht dokumentieren, denn damit würden wir ja auch den zukünftigen Support garantieren müssen."
HITTEST ist noch weniger dokumentiert. Dann kann man auch gleich die komfortableren Java-Callback nutzen.
Am besten schaut man in den Source-Code von OVEROBJ und extrahiert den benötigten Teil selbst. In meiner Matlab 2009a Version funktioniet das nicht für docked figures. Aber ansonsten ist OVEROBJ kein Hexenwerk.
Was soll das Gedöns um nicht-dokumentierte Funktionen eigentlich...
Das weiß ich auch nicht. Vll hat es in diesem Fall ja auch etwas mit den neuen HG2 Sachen zu tun, die ja demnächst anscheinend raus kommen sollen?? Wer weiß das schon?? Blöd ist nur, dass ich in der Vergangenheit öfter gemerkt habe, dass ich Funktoinen benötigt habe, die undocumented waren aber ich sie nicht kannte (also auch nicht gefunden habe). Erst nachdem man sich irgendwie selbst geholfen hat und sich irgendwelche Workarrounds überlegt hat, stolpert man per Zufall über diese... Darum ist der Herr Altmann echt (besonders bei GUIS) gold wert...
Darum ist der Herr Altmann echt (besonders bei GUIS) gold wert...
Stimmt.
Die GUI-Fähigkeiten von Matlab sollten dringend aufgepeppt werden. Wir haben inzwischen 2010, alle Welt versucht per Multi-Touch bedienfreundlicher zu werden. Nur die Matlab-User können ein so recht einfaches Problem wie in einen Callback für ein ButtonDown und ButtonUp Event auf einen Button nicht mit dokumentierten Methoden lösen.
das gehört wohl nicht mehr wirklich zu diesem Thread aber ein bisschen wollte ich diesbezüglich trotzdem noch loswerden ,...
Zitat:
Die GUI-Fähigkeiten von Matlab sollten dringend aufgepeppt werden.
Sicherlich denken die Leute von TMW genauso drüber. Aber Matlab ist ja nicht bekannt und dadurch auch recht verbreitet wegen der GUIs sondern wegen anderen Stärken, die es mit sich bringt... Ich habe natürlich auch öfter mal über den Tellerant der Matlabwelt geschaut und mir andere Platformen wie C++ oder so angeschaut. Was da mittlerweile möglich ist im GUI bereich ist naja wie soll ich sagen fast ein Jahrzehnt vor Matlab. Nicht nur Optisch sondern natürlich vor allem wegen der geschwindigkeit und der großen Möglichkeit. Beispiel drag n drop. In Matlab sehr umständlich umsetzbar in anderen Sprachen ists Standard...
Ziemlich extrem finde ich die uitable, die nun wirklich sehr schwach auf der Brust ist. Natürlich ist sie sehr einfach zu handhaben. Aber schau ich mir mal die Vectorfunktionen in Matlab an die super sind für sortierungen und auch sehr einfach und schnell zu handhaben sind bringt mir das nicht soviel wenn ich mir eine größere Tabelle mit diesen anzeigen lasse und einfach nur ein paar Zeilen tauschen möchte um anschließend feststellen zu müssen, dass die Visualisierung mittels set(table,'Data',NewData) einige Sekunden dauern kann weil ein komplett neues Datenmodel geschrieben wird (das hatte ich neulich als ich viele Messungen tabelarisch anzeigen lies (Schallintensitätspegel in Terzbereichen) und einfach einige rows nach oben oder unten schieben wollte um diese zu sortieren, war n cell von ca 50x35)!!
Naja aber irgendwie findet man dann doch einen weg...
da fehlt noch etwas. Und zwar müssen bei der Benuztung von overobj (ist undocumented falls ihr dieses in der Hilfe suchen wollt) die Root Units in Pixel sein. Also z.B.:
% --------------- 8< ------------------------------- function myCallback(ObjH, EventData, Command)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
if ~isempty(overobj('uicontrol')) switch Command
case 'up'
set(ButtonH, 'Value', 0);
a = 'stop'
% STOP THE RECORDING... case 'down'
set(ButtonH, 'Value', 1);
% START THE RECORDING...
a = 'start'
otherwise error('Programming error');
end end
Super, das ganze funktioniert. Vielen Dank. Wenn ich jetzt anstelle des selbst erstellten Windowbuttons ein mit dem GUI Builder vordefinierten Pushbutton nehme und dann mit ButtonDownFcn arbeite anstelle von WindowButtonDownFcn, würde das ganze dann auch funktionieren? Ich habe bereits ein GUI mit dem Builder mit verschiedenen Panels erstellt und wollte nun eine Art PushtoTalk implementieren.
ja das ist auch richtig so. Wäre es mit der ButtonDownFcn des pb's möglich wären wir auch nicht wie oben beschrieben über den Umweg der figure Callbacks gegangen... Dementsprechend kannst du in deiner OpeningFcn die Callbacks wie oben beschrieben setzen... Andere Lösungsmöglichkeiten sind ebenfalls oben beschrieben (Java)... Es ist leider ab und an etwas umständlich mit Matlab die gewünschte Funktionalität in einer GUI zu verwirklichen...
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.