2013-09-18 3 views
2

Я только что установил новый MATLAB R2013b для 64-битного Mac, а моя ОС - OS X 10.8.4. Я сталкиваюсь с постоянной проблемой, с которой я никогда не сталкивался с R2013a. Когда я запускаю один из моих сценариев (см. Ниже), весь скрипт проходит через OK, но затем я получаю сообщение об ошибке «MATLAB столкнулся с внутренней проблемой и должен закрыть». Затем я должен закрыть MATLAB.MATLAB обнаружил внутреннюю ошибку и должен закрыть

У меня такое ощущение, что я где-то ухожу на установке, так как я новичок в MATLAB, но я не уверен.

Этот точный сценарий по-прежнему отлично работает на R2013a, который я еще не удалял. Сценарий (с использованием Psychtoolbox) - это эксперимент, который открывает экран, представляет какой-то текст, представляет аудиофайл и требует, чтобы участник ответил на 6 нажатий клавиш. Этот скрипт представляет только два аудиофайла, так как я просто тестирую его.

Все петли, похоже, работают в обеих версиях MATLAB, и экран закрывается в конце (что происходит только после того, как 2 проходит через основной цикл). Я полагаю, это означает, что скрипт работает, но что-то на пост-этапе вызывает проблемы.

Любые идеи приветствуются!

-Josh

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%% SCREEN & AUDIO SETUP %%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%%%%%%%%%%%% 
%% SCREEN %% 
%%%%%%%%%%%% 

% Set up a nice blank screen. 
whichScreen = 0; 

% Full Screen mode 
%window = Screen(whichScreen, 'OpenWindow'); 

% Small screen mode used for code testing 
window = Screen('OpenWindow',0, [450 450 500], [5,5, 550,550]); 

white = WhiteIndex(window); % pixel value for white 
Screen(window, 'FillRect', white); 
Screen(window, 'Flip'); 

% Set global text size for the display. 
Screen('TextSize', window, 15); 
Screen(window,'TextFont','Arial'); 
Screen('TextStyle', window, 0) 


%%%%%%%%%%% 
%% AUDIO %% 
%%%%%%%%%%% 

% Set initial audio parameters: 
nrchannels = 1; % All stimuli are mono-sounds. 
freq = 44100; 

% Initialize sound driver. 
InitializePsychSound; 

try 
    pahandle = PsychPortAudio('Open', [], [], 3, freq, nrchannels); 
catch 
    % If the above fails, use the audio device's standard frequency. 
    psychlasterror('reset'); % I believe this some reseting of the error made in 'try'. 
    pahandle = PsychPortAudio('Open', [], [], 3, [], nrchannels); 
end 



%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%% 
%%%%% MAIN LOOP %%%%% 
%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%% 


home = '/Users/josh/Dropbox/Beverlab/Fall_2013_Study/Design/Matlab/' 

SampleExperiment = {strcat(home,'Stimuli/tokensA/gipa_mono.wav'),... 
    strcat(home,'Stimuli/tokensB/gabo_mono.wav')}; 


timeLimit = 10; % Set up the time limit. 
ans = 0; % This is used to track whether or not the participant answered. 
numStim = 2; % Just using 2 right now to test the code 

ListenChar(0); 

for i=1:numStim; 
    token = char(SampleExperiment(1,randi([1,2]))); % randomly select a wave file from 'SampleExperiment' and assign it to 'token' 
    [y,freq] = wavread(token); % Read the current wav file. 
    wavedata = y'; % Transpose wav data. 
    PsychPortAudio('FillBuffer', pahandle, wavedata); % fill the buffer, ready to play 
    t1 = PsychPortAudio('Start', pahandle, 1, 0, 1); % play the wave file and get timestamp in one go 

    while GetSecs<t1+timeLimit 
     if ans<6 
      [secs, keyCode, deltaSecs] = KbWait([],2,t1+timeLimit); 
      if isempty(find(keyCode,1)) 
       break 
      end 
      if ~isempty(find(keyCode,1)) 
       ans=ans+1; 
      end 
     end 
     if ans==6 
      WaitSecs(rand*3+1); 
      break 
     end 
    end 
    if ans<6 
     DrawFormattedText(window, 'Lets try that again...press 6 times', 'center', 'center'); 
     Screen(window, 'Flip'); 
     WaitSecs(1); 
     Screen(window, 'FillRect', white); 
     Screen(window, 'Flip'); 

     [y,freq] = wavread(token); % Read the current wav file. 
     wavedata = y'; % Transpose wav data. 
     PsychPortAudio('FillBuffer', pahandle, wavedata); % fill the buffer, ready to play 
     t1 = PsychPortAudio('Start', pahandle, 1, 0, 1); % play the wave file and get timestamp in one go 

     while GetSecs<t1+timeLimit 
      if ans<6 
       [secs, keyCode, deltaSecs] = KbWait([],2,t1+timeLimit); 
       if isempty(find(keyCode,1)) 
        break 
       end 
       if ~isempty(find(keyCode,1)) 
        ans=ans+1; 
       end 
      end 
      if ans==6 
       WaitSecs(rand*3+1); 
       break 
      end 
     end 
    end 
end 


Screen('CloseAll') 
+2

Попробуйте пройти линию за линией через код, установив точку останова и степпинг (F10 на Windows, не знаю, для Mac), чтобы увидеть, какая строка вызывает этот расширенный способ закрытия MATLAB. – Nick

+0

Если этого не происходит, когда вы запускаете его за строкой за пределами скрипта (что, вероятно, будет), попробуйте удалить куски кода, пока ошибка не исчезнет при запуске скрипта. --- Кроме того, если вы можете найти и воспроизвести ошибку, но не решить ее, я думаю, что следующий логический шаг станет ошибкой в ​​mathworks. –

ответ

1

Такого рода ошибки обычно указывает на то резкое и неустранимая произошло. Похоже, что Psychtoolbox содержит файлы MEX, вероятно, наиболее вероятный виновник. Я либо попытаюсь перестроить тех, кто использует R2013b, либо связаться с авторами, чтобы узнать, есть ли у них версия, совместимая с R2013b.

0

Этот сбой, вероятно, вызван новой ошибкой в ​​OSX 10.8.4, в результате чего PsychToolBox сбой при закрытии соединения с сервером отображения (и, по-видимому, с ним связано MATLAB). См. here для обсуждения и разрешения.

Никто до сих пор с этой проблемой, пожалуйста, обновите до последней версии PsychToolBox (который всегда является хорошей идеей!)

Смежные вопросы