WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Pushbutton push to talk

 

voice
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 29.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2011, 13:22     Titel:
  Antworten mit Zitat      
Vielen Dank.

Jetzt stehe ich vor einem weiteren Problem. Wenn ich das Recording starten möchte, muss ich ja auch die Funktion starten, welche die Sprachinformationen aufnimmt. Jedoch muss ich bei wavrecord die Anzahl der Samples und die Abtastrate angeben, also sprich die Zeit für die Aufnahme. Jedoch die Zeit habe ich frühstens im Fall case 'up', welche ich mit tic und toc ermittel, also bei loslassen des Buttons. Der Funktionsaufruf beginnt aber bereits bei Drücken des Buttons.

Jetzt habe ich mir überlegt, dass ich generell die Zeitspanne von 5 Sekunden aufnehme, also für mein wavrecord(5*8000, 8000). Und später dann das Signal auf 'toc' Sekunden schneiden. Jedoch wenn ich früher als 5 Sekunden den Button loslasse, wird die Funktion wavrecord ja trotzdem die 5 Sekunden ausgeführt, sodass das Push to talk Verfahren damit sinnlos ist.





Über einen Tipp wäre ich sehr dankbar. Vielleicht kann man die Operation frühzeitig beenden oder parallel die Rechnung durchführen?

Viele Grüße

voice

Code:
set(ButtonH, 'Value', 0);
            a = 'stop'
            % STOP THE RECORDING...
            t = toc
        case 'down'
            set(ButtonH, 'Value', 1);
            % START THE RECORDING...
            a = 'start'
            tic
            rec = wavrecord(5*8000,8000)      % 5 Sek rec bei 8000 Hz
 
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 03.01.2011, 16:43     Titel:
  Antworten mit Zitat      
Hey voice,

schau dir mal den audiorecorder an. Ich glaube mit dem kann man so einiges machen.
z.B.
Code:

function TestButton
FigH = figure('WindowButtonUpFcn', @stoprecording, ...
   'WindowButtonDownFcn', @startrecording,'Units','Pixel');
ButtonH = uicontrol(FigH, 'Style', 'ToggleButton', 'Enable', 'inactive');
setappdata(FigH, 'ButtonH', ButtonH);
recObj = audiorecorder;
recObj.StartFcn = 'disp(''Start speaking.'')';
recObj.StopFcn = 'disp(''End of recording.'')';
setappdata(FigH, 'recObj', recObj);


% --------------- 8< -------------------------------
function startrecording(ObjH, EventData)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
if ~isempty(overobj('uicontrol'))
    set(ButtonH, 'Value', 1);
    % START THE RECORDING...
    record(getappdata(FigH,'recObj'), 100); % z.B. 100 sec
end

function stoprecording(ObjH, EventData)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
if ~isempty(overobj('uicontrol'))
    set(ButtonH, 'Value', 0);
    % STOP THE RECORDING...
    recObj = getappdata(FigH,'recObj');
    if isrecording(recObj)
        stop(recObj);
        DeineAudioDaten = getaudiodata(recObj);
        plot(DeineAudioDaten);
    end
end
 

audiorecorder(Fs, nBits, nChannels, ID)

Vll reicht das ja so...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
voice
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 29.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2011, 18:05     Titel:
  Antworten mit Zitat      
Hi Marco,

schon mal vielen herzlichen Dank für die viele Arbeit und Mühe. Auf dem einen Rechner mit der Matlabversion R2009a funktioniert der Code. Bei der Matlabversion R2007 hingegen nicht so richtig. Die Funktion wird so lange ausgeführt, wie ich Sekunden bei record eingebe. Bei Dir waren es 100. Dies ist doch die maximal mögliche Aufnahmedauer, oder? Sobald ich aber den Button loslasse, passiert nichts. Auch der Plot sieht bei der älteren Version nach den 100 Sekunden nicht so richtig aus. Bei der neuen habe ich dies noch nicht überprüft, da das Headset bis dato nur mit dem Rechner der älteren Version verknüpft ist.

Kann das an den unterschiedlichen Versionen liegen?

Viele Grüße und schönen Abend

voice
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 03.01.2011, 18:20     Titel:
  Antworten mit Zitat      
Hey voice,
Zitat:

Bei Dir waren es 100. Dies ist doch die maximal mögliche Aufnahmedauer, oder?

Nein das ist nicht die maximal mögliche Aufnahmedauer, sondern die von mir als Beispiel benutzte. Du kannst dort auch 1000 reinschreiben. Ich habe mir nur gedacht, dass ein User bestimmt nicht 100 sec auf den Button drückt und somit kann ich die Aufnahme belibig stoppen...
Zitat:

Kann das an den unterschiedlichen Versionen liegen?

Ja das kann sein. Da ich mit R2007 noch nie gearbeitet habe, kann ich das nun auf die Schnelle nicht zu 100% "beja-en". Bei meiner Version 2010a mit der ichs getestet habe, funktionierte es. Nur habe ich kein Headset angeschlossen um nun auch noch zu kontrollieren wie das Signal dann aussieht. Ich gehe mal davon aus, dass die Funktion audiorecorder das Ausführt was man aus der Hilfe entnehmen kann...
Musste einfach mal ausprobieren...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
voice
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 29.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 16:01     Titel:
  Antworten mit Zitat      
Hi Marco,

super. Es funktioniert. Ich habe einfach die Zeit, sprich die 100 Sekunden raus genommen. Dann kam auch die ältere Version damit klar. Es kann sein, dass noch mit der Zeit diesbezüglich ein paar programmiertechnische Fragen meinerseits kommen. Ich beschäftige mich noch nicht all zu lange mit Matlab und es tauchen immer wieder viele Fragen auf.

Vielen Dank schon mal für Deine / Eure Hilfe.

Grüße

voice
Private Nachricht senden Benutzer-Profile anzeigen
 
voice
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 29.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2011, 11:27     Titel:
  Antworten mit Zitat      
Hallo Zusammen,

ich habe noch ein paar Fragen zum dem letzten Audiorecorder.
Ich kommentiere mal alles, so wie ich es denke.
Code:


function TestButton
% Erstellt ein Figure mit der Eigenschaft, dass beim Drücken der linken Maustaste die Funktion startreording und beim Loslassen die Funktion stoprecording aufgerufen wird.
FigH = figure('WindowButtonUpFcn', @stoprecording, ...
   'WindowButtonDownFcn', @startrecording,'Units','Pixel');
% Erstellt ein inaktiven Togglebutton im Figure FigH
ButtonH = uicontrol(FigH, 'Style', 'ToggleButton', 'Enable', 'inactive');
% ???????
setappdata(FigH, 'ButtonH', ButtonH);
% Speichert den Audiorecorder in Variable recObj
recObj = audiorecorder;
% Bei Ausführung des audiorecorders --> Ausgabe Start Recording
recObj.StartFcn = 'disp(''Start speaking.'')';
% Bei Stop des audiorecorders --> Ausgabe End of Recording
recObj.StopFcn = 'disp(''End of recording.'')';
% ????????
setappdata(FigH, 'recObj', recObj);


% --------------- 8< -------------------------------
% definition startrecording
function startrecording(ObjH, EventData)
% ?????????
FigH = ancestor(ObjH, 'figure');
% ????????? werden irgendwelche Daten abgerufen?
ButtonH = getappdata(FigH, 'ButtonH');
% ?????????
if ~isempty(overobj('uicontrol'))
    % setzt den Wert von ButtonH auf 1 ????
    set(ButtonH, 'Value', 1);
    % START THE RECORDING...
    % was bekommt record übergeben?
    record(getappdata(FigH,'recObj'), 100); % z.B. 100 sec
end


Wenn die Unklarheiten meinerseits geklärt sind, kann ich den unteren Teil ebenfalls verstehen. Deshalb habe ich diesen jetzt nicht kommentiert.



function stoprecording(ObjH, EventData)
FigH = ancestor(ObjH, 'figure');
ButtonH = getappdata(FigH, 'ButtonH');
if ~isempty(overobj('uicontrol'))
    set(ButtonH, 'Value', 0);
    % STOP THE RECORDING...
    recObj = getappdata(FigH,'recObj');
    if isrecording(recObj)
        stop(recObj);
        DeineAudioDaten = getaudiodata(recObj);
        plot(DeineAudioDaten);
    end
end
 



 



Würde mich freuen, wenn mir jmd. weiterhelfen könnte. Ich weiß also nicht so ganz, was setappdata(), getappdata(), ancestor und die if Funktionen genau machen. Die Matlabhilfe ist zu diesen Funktionen sehr kurz gehalten.

Gruß und Dank


voice
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.01.2011, 01:02     Titel:
  Antworten mit Zitat      
Hallo voice,

Zitat:
Ich weiß also nicht so ganz, was setappdata(), getappdata(),

SETAPPDATA schreibt eine Variable in eine Struct, das in einem FIGURE-Objekt gespeichert wird. GETAPPDATA liest die Daten wieder aus. Beispiel:
Code:
FigH = figure;
setappdata(FigH, 'StartTime', clock);
... % Hier passiert irgendetwas anderes
StartTime = getappdata(FigH, 'StartTime');


ANCESTOR ist eigentlich umfangreich in der Hilfe beschrieben:
http://www.mathworks.de/help/techdoc/ref/ancestor.html
Jedes "Handle-Grafics"-Objekt hat einen "Parent". Also z.B. sind die Linien, die mit LINE erzeugt werden, die "Child" eines AXES-Objektes, das AXES Objekt ist wieder ein "Child" eines FIGURE-Objektes, und die FIGUREs sind Children des Root-Objekts. Es gibt also eine hierarchische Gleiderung aller grafischen Objekte.
Ancester sucht nun den Vorgänger, der einen bestimmten Typ hat. Dabei geht es dann die notwendige Anzahl von Hierarchien höher.

Über die IF Funktion kann ich nun wirklich nicht mehr schreiben, als in der Dokumentation steht. Wenn "help if" nicht genug hilft, versuche "doc if" und vor allem: Lies die "Getting Started"-Abschnitte aus der Dokumentation.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 22.01.2011, 01:11     Titel:
  Antworten mit Zitat      
Hey,

Zitat:

Über die IF Funktion kann ich nun wirklich nicht mehr schreiben

ich glaube, dass hier ehr die Unklaheit bezüglich des
Code:

~isempty(overobj('uicontrol'))
 

besteht. Dies bedeutet nur, wenn der Mauscursor über einem Objekt der Klasse uicontrol ist wird dieses ausgeführt. Ist dies nicht der Fall gibt overobj eine leere Variable zurück.

Nun zur nächsten Frage
Code:

set(ButtonH, 'Value', 1);
 

Da ButtonH ein Togglebutton ist kann man ähnlich wie bei einer Checkbox oder einem Radiobutton das Value auf 1 oder 0 setzen. Dabei ändert sich der Look des Buttons.

Um alles verstehen zu können würde ich mal empfehlen die Callbacks zu debuggen um zu schauen wie das eine zum andern kommt... Zur Not auch mal während des Debuggens Teile des Codes ins Commandwindow kopieren und ausführen lassen...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.