2017-05-18 5 views
0

Matlab GUIを使用して、ボタンを押すとリアルタイムでオーディオ出力を切り替えるプロジェクトに取り組んでいます。私はMatlab GUIDEファイルと、GUIアクションを聞くAudio System Toolboxを使った関数を持っています。OpeningFcn Matlab GUIDE - 正しい順序でハンドルと呼び出し関数を初期化する

GUIDEファイルには、GUIが表示される前にさまざまなハンドルを宣言するOpeningFcnがあります。 OpeningFcnでは、 "handles.AttenuationFactor"を宣言します。ユーザーが後でGUIのボタンを押すと、handles.AttenuationFactorがそれに応じて変更されるという考えがあります。

私は別の機能をGUIアクションで聴くことに問題はありません。

gui = findobj('Tag','GUI’); 

if ~isempty(gui) 
    % get handles 
    gdata = guidata(gui); 
    AttenuationFactor = gdata.AttenuationFactor; 
end 

%% Perform calculations with attenuation factor 

GUIのハンドルを取得するにはどうすればいいですか:GUIをリッスンする関数はいつ呼びますか?

コードguidata(hObject、handles)の最後の行がまだ呼び出されていないため、 'GUIから'情報を取得するときに 'handles.attenuationFactor'が存在しないため、OpeningFcnで呼び出すことはできません!

私はbuttonpressのコールバック関数に関数呼び出しを入れようとしましたが、それはすべてのbuttonpressで評価されるコードを一度しか作成しないでください。

関数呼び出しの前にハンドルを強制的に更新する方法はありますか?

答えて

1

オープニングでは、基本値を設定する必要があります。多分グローバル変数を呼び出して値を設定してください。それに応じてハンドルを更新します。

ハンドルを処理するには、matlabのset/get関数を使用する必要があります。 handles.attenuationFactorを設定するとどういう意味ですか?

ユーザがattenuationFactorの値を変更した場合、ボタンのコールバックでそれが変更されると、値をかなり簡単に取得できます。例えば、 get(handles.attenuationFactor,'Value')

+1

お返事ありがとうございます。 私は他の関数でattenuationFactorという変数を作り、それを0に設定しました。次に、isfield(gdata、 'attenuationFactor')を使ってハンドルをチェックし、プログラムが初期化されていないかどうか確認しました存在しないハンドルを見つけようとするとクラッシュします。 – matiastofteby

+0

それはまた働くべきです – 16per9

関連する問題