matlab 코딩에 관련된 것인데요 급해요 제발 ㅠㅠ
안녕하세요...
저는 대학교에 다니는 공학도 입니다..
matlab을 처음 배우는데요... 프로젝트 발표를 하는데..
멧렙으로 음악연주하기를 하고싶어서 소스를 구했는데요..
해석이 안됩니다. 다른사람들도 이해할수 있게 해석을 해야 하는데.
제가 만든 코딩이 아니라서 어떻게 설명해야 되고
뭔지도 잘 모르겟습니다.
그래서 해석좀 부탁드립ㄴ디ㅏ.
2. playtone
function x = playtune(str,cf,cb)
% Play musical tune.
% [x] = playtune(str,[cf],[cb])
%
% Notation:
% [CDEFGAB] keys, 5 full octaves
% [12345678] key/rest duration,
% with the default [1] semiquaver, [2] quaver, [4] crochet and [8] minim
% [#] sharp / [b] flat / [.] rest / [^] raise octave / [_] lower octave
%
% Examples:
% C major -- playtune('^2CDEFGAB^C_BAGFEDC');
% F major -- playtune('^2FGABb^CDEFEDC_BbAGF');
% B minor (harmonic) -- playtune('^2B^C#DEF#GA#BA#GF#EDC#_B');
% F# minor (melodic) -- playtune('^2F#G#AB^C#D#E#F#EDC#_BAG#F#');
% Doe-a-deer -- playtune('^^6C2D6E2C4EC8E6D2EFFED8F.');
%
% Advanced features:
% CF is a (N,2) matrix where the first column contains the frequency and
% the second column the corresponding scaling coefficient. The simplest
% choice of CF would be cf = [1 1] which generates a pure sine wave. The
% default CF is cf = [1 1; 1.001 0.33; 1.002 0.2; 0.999 0.33; 0.998 0.2]
% which generates a tone resembling the flute.
% CB is a (1,9) vector containing the duration of that particular symbol (1-9).
%
% v2.0, Alan Tan (weechiat@gmail.com)
if nargin < 2 | isempty(cf), cf = [1 1; 1.001 0.33; 1.002 0.2; 0.999 0.33; 0.998 0.2]; end
if nargin < 3 | isempty(cb), cb = [1:9]; end
% Set constants.
Fc = 65.4064;
Fs = 2^13;
Ts = 1/Fs;
Td = 0.1;
c1 = 2*pi*Fc;
c2 = 2.^([0:60]/12);
% Convert string to score.
d = -ones(1,length(str));
d(find(str == 'C')) = 0;
d(find(str == 'D')) = 2;
d(find(str == 'E')) = 4;
d(find(str == 'F')) = 5;
d(find(str == 'G')) = 7;
d(find(str == 'A')) = 9;
d(find(str == 'B')) = 11;
d(find(str == '^')) = 0;
d(find(str == '_')) = 0;
d(find(str == '.')) = 0;
u1 = find(str == 'b');
d(u1-1) = d(u1-1)-1;
u2 = find(str == '#');
d(u2-1) = d(u2-1)+1;
str([u1,u2]) = [];
d([u1,u2]) = [];
% Construct vector.
x = [];
oc = 1;
Tu = Td;
t = [Ts:Ts:Tu];
L = length(t);
th = zeros(size(cf,1),1);
for k = 1:length(str)
if d(k) == -1
Tu = cb(str(k)-48)*Td;
t = [Ts:Ts:Tu];
L = length(t);
else
switch str(k),
case '^', oc = oc+12;
case '_', oc = oc-12;
case '.', x(end+L) = 0;
otherwise
wt = c1*c2(oc+d(k))*t;
x(end+(1:L)) = transpose(cf(:,2))*sin(cf(:,1)*wt+th(:,ones(1,L)));
th = rem(cf(:,1)*wt(end)+th,2*pi);
end
end
end
% Set output.
if ~nargout
soundsc(x,Fs);
clear x;
end
--------------------------------------------------------------
이것인데요...
어떻게 만들어 졋는지 너무 궁금합니다.
cf나 cb soundsc u 값등이 어디서 나왔으며 어떻게 어떻게 만들고 해석해서 설명해야 할지 알고싶습니다..
이것을 다른 사람한테 설명해야 하는데..
도와주세요..
전반적인해석좀 부탁 드립니다
전반 적인 해석이요!.... ㅠㅠ 감사합니다.
학교 수업이시라면,
학교 수업이시라면, 아마도 몇 일만에 매트랩을 배워서 무엇을 하라고는 안했을 것 같아서, 글쓰신 분께서 지금처럼 급한 상황에 몰리셨다면, 주어진 일정 기간 동안 열심히 안했다는 얘기밖에 안됩니다.
일정 정도 알기 위해 노력을 해보고, 의문이 남는 것을 질문을 해야 답변하기도 쉬울 것입니다.
지금 올리신 매트랩 코드는 쉬운 수준에 해당하고, 게다가 학과 공부이니 스스로 노력하셔서 결과를 얻어내시고, 그래도 안되시면 재수강하시는 게 옳은 방향인 것 같습니다.
Orion Project : http://orionids.org
말씀 말씀 입니다만..
말씀 말씀 입니다만.. 학교에서 배우는 멧랩은 지극히 이과적이고 수학적인 문제를 해석하고 코딩하는데에만 배웁니다.. 라플라스 가우스 일리미네이션. 시뮬링크 등등.
정해진 수업 커리큘럼에 없는 함수나 코드해석을 하는것이 수업을 열씸히 들었어도 쉽지가 않네요;; 제가 이해력이 부족한걸까요...
음악적이다 보니 음악적 지식이 부족한 이과생으로써도 상당히 어렵습니다.
이점이해해 주셧으면 하고요.. 저는 진짜 조언이아니라 해석이 필요합니다.
ㅎㅇ
지금 말씀하신 걸로
지금 말씀하신 걸로 봐서는, 매트랩 소스 문법은 알고 계시는 거네요. 그럼 저 안에서 이해안되는 것은 단지 domain specific 한 수식 뿐이겠죠?
그럼 애초에 매트랩 소스를 통째로 올리실 필요가 있었을까요? 이해 안되는 수식만 빼내서 질문하실 수 있었을 것 같은데요. 답변을 하는 사람들 입장에서는 뭐가 궁금한 건지 알 수 없는 질문에 답을 한다는 자체가 이상한 일입니다.
어떤 수업인지는 모르겠지만, 개인이 느끼기에 밑도 끝도 없는 수식이 갑자기 과제로 나온다는 게 솔직히 잘 이해는 되지 않습니다만, 아무튼 수업을 제대로 듣고 공부했으면 할 수 있을만한 걸 교수님께서 과제로 내시지 않았을까 싶습니다만...
Orion Project : http://orionids.org
흠.. 음악학과 수업이라도 되나요? -_-a
그렇다면 음대생들은 matlab 쓰느라고 골치아플 겁니다.
그렇지 않다면 다른 학생들도 쉽지는 않을 거구요.
뭔가 안타깝기는 한데... 이곳에서 숙제를 그것도 급하다고 하면
좋은 반응 얻기 어렵습니다.
댓글 달기