ドレミファソラシド

signal processing toolboxを使っています。

サンプリング周波数44100、刺激時間50msec、両端に3msecのblackmanフィルターをかけたwavファイルを作ってみます。 音は以下のようになっています。
記号周波数(Hz)
A440.0000
ラ#B466.1638
H493.8833
C523.2511
ド#C#554.3653
D587.3295
レ#D#622.2540
E659.2551
ファF698.4565
ファ#F#739.9888
G783.9909
ソ#G#830.6094
A880.0000

fs=44100; % sampling frequency
t=linspace(0,1,(fs+1))'; % まず1秒間の時系列を作成
t(t>0.05)=[]; % 時系列を0〜50msecとする
x=440*2.^((0:12)/12); % 440〜880Hzを12音階に等分
y=sin(t*2*pi*x); % 各音階の時系列作成
t1=find(t<0.003);
t2=find(t>(0.05-0.003));
w=blackman(size(t1,1)+size(t2,1)); % signal processing toolboxのblackman関数
y([t1;t2],:)=(w*ones(1,size(y,2))).*y([t1;t2],:);
k=3*ones(size(y,1),1)*(1:size(y,2)); % 作図用
figure;set(gcf,'color',[1,1,1]);plot(t,y+k,'r');axis ij;
set(gca,'ylim',[0,max(k(:))+3]);grid on;
ytick=k(1,:);
for k=1:size(x,2);yticklabel{k}=sprintf('%0.4fHz',x(k));end;
set(gca,'ytick',ytick,'yticklabel',yticklabel');

演奏します。
wavplay([y(:,1);y(:,3);y(:,5);y(:,6);y(:,8);y(:,10);y(:,12);y(:,13)],fs);
ではwavファイルにします。
[filename,pathname]=uiputfile('*.wav'); % path名だけ使用
if filename==0;return;end;
bits=16;% 16bitでは警告が表示されるが無視する
for k=1:size(x,2);
filename=sprintf('%08.0f.wav',x(k)*10000);
wavwrite(y(:,[k,k]),fs,bits,strcat(pathname,filename));% 左右2ch同じ音として保存する。
end;
これで12音階のwavファイルができました。 後でSTIM側で16bit WAVファイルをSNDファイルに変換する必要があります

ドとソのMismatch Negativity Fieldの課題を作ってSTIMで認識できるSEQファイルとして保存してみます。
standard刺激 : deviant刺激は4 : 1にし、300回試行することとします。
N=300; % 試行回数
[filename,pathname]=uiputfile('*.seq');
if filename==0;return;end;
fid=fopen(strcat(pathname,filename,'.seq'),'w');
fprintf(fid,sprintf('Numtrials %0.0f\n',N+1));
fprintf(fid,'event mode dur win soa x/r y/l resp type file\n');
fprintf(fid,'------------------------------------------------------------------------\n');
for x=1:N;
if rand(1)>0.8;
trig=1;filename=' 05232511\n';% ド
else
trig=2;filename=' 07839909\n';% ソ
end;
st=sprintf('%0.0f WAV 0 0 1.0 90 90 -1 %0.0f ',x,trig);
fprintf(fid,strcat(st,filename));
end;
fprintf(fid,sprintf('%0.0f GOTO 1 0 0 0 0 0 0 0\n',N+1));
fclose(fid);
MATLAB上でテストしてみます。尚試行回数は20回にしています。
n=1;tic;
while 1==1;
if toc>=1;
if rand(1)>0.8;wavplay(y(:,[4,4]),fs);
else wavplay(y(:,[11,10]),fs);
end;
n=n+1;tic;
if n==20;break;end;
end;
end;

wavplay実行時にパラレルポートから5Vのtrigger信号を送ることができればSTIMの代用になりそうです。



テンポ=120、即ち四分音符を1分間に120回としてMATLABで演奏してみます。
clear;
fs=44100;
t=linspace(0,4,fs*4+1)'; % 4秒間
tempo=60/120; %四分音符の持続時間
x=440*2.^((0:24)/12); % 2オクターブ
y=sin(t*2*pi*x); % 全音符の各音階の時系列作成
t2=find(t <tempo*2); % 二分音符
t24=find(t <tempo*3); % 付点二分音符
t4=find(t <tempo);% 四分音符
t48=find(t<tempo*1.5);% 付点四分音符
t8=find(t <tempo*0.5);% 八分音符
bw=prod(size(find(t<0.01))); % blackmanの時間幅の半値
w=blackman(bw*2);
wa=w(1:bw);wb=w((bw+1):end);
music=[];
w=y(t48,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,9);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,8);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,6);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,4);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,8);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,8);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,6);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,4);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,4);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,8);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t24,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,18);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t24,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,15);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,20);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,20);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,18);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,20);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,20);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,18);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t2,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t48,13);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t8,11);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,18);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,18);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t24,16);w=w.*[wa;ones(size(w,1)-2*bw,1);wb];music=[music;w];
w=y(t4,16)*0;music=[music;w];
wavplay([music,music],fs);
32秒の曲ですが、MATLAB上では10.7MB(64bit浮動小数点)になりました。
曲は校歌みたいですが満州国の国歌です。