2

私は情報を求めています。私と私のような他の学生は、Matlab でサウンドを作成する必要があります。それらを作成し、それらのサウンドを再生するための interactif インターフェイスも作成する必要があります。

そこでピアノを作り、鍵盤をクリックすると音を鳴らします (それが機能です)。

また、関数を呼び出すキーボードのキーを押すことができるようにしたいと考えていました。KeyPressFCN について聞いたことがありますが、すべてのチュートリアルを検索しても十分な情報が得られなかったため、使い方がわかりません。

では、必要な要素を右クリックして KeyPressFCN を呼び出した場合、次のステップは何ですか? この KeyPressFCN に関数を「配置」するには、何をしなければなりませんでしたか。

たとえば、音の 1 つを作成するには、次のようにします。

% --- Execution lors d'un appui sur le bouton Do (première blanche)
function pushbutton1_Callback(hObject, eventdata, handles)
octave = str2double(get(handles.zone1,'String'));
frequence = 2093; %--- Fréquence initialement Do6
frequence2 = frequence./ octave;
son = sin(2*pi*frequence2*(0:0.000125:0.2));
sound(son);
4

1 に答える 1

13

実際には、Matlab のドキュメントとヘルプを引用しているだけです。

  1. GUIDE を使用している場合、(オブジェクトではなく) Figure を右クリック >> コールバックの表示 >> KeyPressFcn を選択すると、次の関数が自動生成されます。

    function figure1_KeyPressFcn(hObject, eventdata, handles)
    % hObject    handle to figure1 (see GCBO)
    % eventdata  structure with the following fields (see FIGURE)
    %   Key: name of the key that was pressed, in lower case
    %   Character: character interpretation of the key(s) that was pressed
    %   Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
    % handles    structure with handles and user data (see GUIDATA)
    
    % add this part as an experiment and see what happens!
    eventdata % Let's see the KeyPress event data
    disp(eventdata.Key) % Let's display the key, for fun!
    

    キーボードをいじって、イベントデータを確認してください。明らかに、入力中は Figure がアクティブになっている必要があります。

  2. GUIを作成するプログラムによる方法であるuicontrol(GUIDEではない)を使用している場合

    (インライン関数を使用)

    fig_h = figure; % Open the figure and put the figure handle in fig_h
    set(fig_h,'KeyPressFcn',@(fig_obj,eventDat) disp(['You just pressed: ' eventDat.Key])); 
    % or again use the whole eventDat.Character or eventDat.Modifier if you want.
    
  3. または、インライン関数を使用したくない場合:

    fig_h = figure;
    set(fig_h,'KeyPressFcn', @key_pressed_fcn);
    

    次に、key_pressed_fcn を次のように定義します。

    function key_pressed_fcn(fig_obj,eventDat)
    
    get(fig_obj, 'CurrentKey')
    get(fig_obj, 'CurrentCharacter')
    get(fig_obj, 'CurrentModifier')
    
    % or 
    
    disp(eventDat)
    
  4. また!KeyPressFcn コールバック関数としてスクリプトを使用する

    fig_h = figure;
    set(fig_h,'KeyPressFcn', 'key_pressed');
    

    次に、key_pressed スクリプトを記述します。

    get(fig_h, 'CurrentKey')
    get(fig_h, 'CurrentCharacter')
    get(fig_h, 'CurrentModifier')
    

Matlab のヘルプについては、http: //www.mathworks.com/help/matlab/ref/figure_props.htmlの「KeyPressFcn イベント構造」を参照して ください。

于 2013-05-17T17:25:25.943 に答える