-
Notifications
You must be signed in to change notification settings - Fork 1
/
denlab_openAudio.m
59 lines (53 loc) · 2.35 KB
/
denlab_openAudio.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function pahandle = denlab_openAudio(deviceName, reqlatencyclass, Fs)
% pahandle = denlab_openAudio(deviceName)
% Opens PsychPortAudio and Snd to the same pahandle for desired sound device.
% Eyetracker uses Snd; Psychtoolbox uses PsychPortAudio.
% Inputs:
% deviceName: (string) desired device name for presenting audio stimuli
% Options: 'Scarlett' 'sysdefault' 'default'
% If no deviceName specified, opens 'Scarlett' if detected, 'default' otherwise
% reqlatencyclass: (double) elects how aggressive PsychPortAudio should be about
% minimizing sound latency and getting good deterministic timing
% 1 (default) = Try to get the lowest latency that is possible under the constraint of reliable playback
% Fs: (double) Requested playback/capture rate in samples per second (Hz)
% 44100 (default)
% Outputs:
% pahandle: (double) device handle for the device
%% Close audio, then initialize
PsychPortAudio('Close');
% Initialize the sound driver
InitializePsychSound(1);
%% Find all sound devices
PsychPortAudioDevices = PsychPortAudio('GetDevices');
PsychPortAudioDeviceNames = {PsychPortAudioDevices.DeviceName};
PsychPortAudioDeviceIndex = [PsychPortAudioDevices.DeviceIndex];
%% Check inputs
if nargin < 3
Fs = 44100;
end
if nargin < 2
reqlatencyclass = 1;
end
if nargin < 1
if any(strcmp(PsychPortAudioDeviceNames,'Scarlett'))
deviceName = 'Scarlett';
disp('Scarlett sound device found...')
elseif any(strcmp(PsychPortAudioDeviceNames,'default'))
deviceName = 'default';
disp('Default sound device found...')
else
error('Scarlett and default sound devices not found. Please check sound setup.')
end
end
%% Find desired sound device
deviceNameIdxs = find( contains(PsychPortAudioDeviceNames, deviceName) );
deviceIdx = PsychPortAudioDeviceIndex( deviceNameIdxs(:,1) );
if isempty(deviceNameIdxs)
error('Desired sound device %s not found. Try again.', deviceName);
else
fprintf('Desired sound device %s found. Initializing...', deviceName);
end
%% Open PsychPortAudio and Snd to same pahandle on desired sound device
pahandle = PsychPortAudio('Open', deviceIdx(1), 1, reqlatencyclass, Fs, 2); %scarlett, mode, latency, Fs, stereo
Snd('Open', pahandle, 1); % links eyetracker sound output to psychportaudio
fprintf('%s initialized to pahandle %d ...', deviceName, pahandle)