Я только что установил новый 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')
Попробуйте пройти линию за линией через код, установив точку останова и степпинг (F10 на Windows, не знаю, для Mac), чтобы увидеть, какая строка вызывает этот расширенный способ закрытия MATLAB. – Nick
Если этого не происходит, когда вы запускаете его за строкой за пределами скрипта (что, вероятно, будет), попробуйте удалить куски кода, пока ошибка не исчезнет при запуске скрипта. --- Кроме того, если вы можете найти и воспроизвести ошибку, но не решить ее, я думаю, что следующий логический шаг станет ошибкой в mathworks. –