From e3c4b4931d7258a5afd8ccaf6be10c4ff425f2fd Mon Sep 17 00:00:00 2001 From: Darell Chua Yun Da Date: Thu, 2 Dec 2021 14:16:57 +0800 Subject: [PATCH 1/6] Envelope Example Updated Main Test to include Envelope Example --- README.md | 2 +- src/DarellEnvelope.m | 37 ++++++++++++++++++++ {DarellsAnnex => src}/DarellbandpassFilter.m | 0 src/Main_test.m | 12 ++++++- 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/DarellEnvelope.m rename {DarellsAnnex => src}/DarellbandpassFilter.m (100%) diff --git a/README.md b/README.md index d693e15..c0ddb9d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## Function Prototypes - function x = generate_wave(amplitude, frequency, phase, fs, duration, duty) +function x = generate_wave(amplitude, frequency, phase, fs, duration, duty) fuction x = envelope(input, fs, period, attack , decay, sustain, release) where attack, decay, sustain release are percentages between 0 to 1 of the period diff --git a/src/DarellEnvelope.m b/src/DarellEnvelope.m new file mode 100644 index 0000000..ad6b37f --- /dev/null +++ b/src/DarellEnvelope.m @@ -0,0 +1,37 @@ +function output = DarellEnvelope(input, Fs, attack,decay,sustain,release) %percentages for attack, decay, sustain, release + len = length(input); + T = (len-1)/Fs; + attacktime = attack * T * Fs; + decaytime = attacktime + decay * T * Fs; + sustaintime = (T - (release * T))* Fs; + + x = 0:1/Fs:T; + y = 0 .* x; %create zero array of y of len x + output = y;%create zero array of output of len x + tcounter = 1; + %attack phase + while tcounter <= attacktime + y(tcounter) = (1/attacktime) * tcounter; + tcounter = tcounter+1; + end + istart = tcounter; + while tcounter<= decaytime + y(tcounter) = 1 - (((1-sustain)/(decay * T * Fs)) * (tcounter - istart)); + tcounter = tcounter+1; + end + + while tcounter<= sustaintime + y(tcounter) = sustain; + tcounter = tcounter+1; + end + istart = tcounter; + while tcounter < (T * Fs) + y(tcounter) = sustain - ((sustain/(release * T * Fs)) * (tcounter - istart)); + tcounter = tcounter+1; + end + + for counter = 1:1:len + output(counter) = y(counter) * input(counter); + end + +end \ No newline at end of file diff --git a/DarellsAnnex/DarellbandpassFilter.m b/src/DarellbandpassFilter.m similarity index 100% rename from DarellsAnnex/DarellbandpassFilter.m rename to src/DarellbandpassFilter.m diff --git a/src/Main_test.m b/src/Main_test.m index 034d0f6..0f1beb8 100644 --- a/src/Main_test.m +++ b/src/Main_test.m @@ -22,4 +22,14 @@ x = DarellbandpassFilter(x,fs,LOW,MED,HIGH); %play over 5 counts, should only hear 200hz playtime = 5; -play_continuous(x, fs, playtime) \ No newline at end of file +play_continuous(x, fs, playtime) + +attack = 0.2; +decay = 0.2; +sustain = 0.2; +release = 0.1; + +x = DarellEnvelope(x, fs, attack,decay,sustain,release); +%play over 5 counts, should only hear 200hz +playtime = 5; +play_continuous(x, fs, playtime) From ee7e34eb75f066fec8af693f7396484d0abb26ee Mon Sep 17 00:00:00 2001 From: Darell Chua Yun Da Date: Thu, 2 Dec 2021 14:19:52 +0800 Subject: [PATCH 2/6] Update to Envelope Renamed as pitchenvelope --- src/{DarellEnvelope.m => DarellPitchEnvelope.m} | 2 +- src/Main_test.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/{DarellEnvelope.m => DarellPitchEnvelope.m} (88%) diff --git a/src/DarellEnvelope.m b/src/DarellPitchEnvelope.m similarity index 88% rename from src/DarellEnvelope.m rename to src/DarellPitchEnvelope.m index ad6b37f..f0922ca 100644 --- a/src/DarellEnvelope.m +++ b/src/DarellPitchEnvelope.m @@ -1,4 +1,4 @@ -function output = DarellEnvelope(input, Fs, attack,decay,sustain,release) %percentages for attack, decay, sustain, release +function output = DarellPitchEnvelope(input, Fs, attack,decay,sustain,release) %percentages for attack, decay, sustain, release len = length(input); T = (len-1)/Fs; attacktime = attack * T * Fs; diff --git a/src/Main_test.m b/src/Main_test.m index 0f1beb8..140b7d8 100644 --- a/src/Main_test.m +++ b/src/Main_test.m @@ -29,7 +29,7 @@ decay = 0.2; sustain = 0.2; release = 0.1; -x = DarellEnvelope(x, fs, attack,decay,sustain,release); +x = DarellPitchEnvelope(x, fs, attack,decay,sustain,release); %output new sound in time domain %play over 5 counts, should only hear 200hz playtime = 5; play_continuous(x, fs, playtime) From befd3be65ba06f88fe2239425178849c3b16b610 Mon Sep 17 00:00:00 2001 From: Darell Chua Yun Da Date: Thu, 2 Dec 2021 14:34:01 +0800 Subject: [PATCH 3/6] Update README.md Update to Readme --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c0ddb9d..e2a7772 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,13 @@ function x = generate_wave(amplitude, frequency, phase, fs, duration, duty) fuction x = envelope(input, fs, period, attack , decay, sustain, release) -where attack, decay, sustain release are percentages between 0 to 1 of the period -where period is the time in seconds +where attack, decay, release are percentages between 0 to 1 of the period +sustain is the percentage of the amplitude it should sustain for +**envelope can be pitch or amplitude envelope** function output_timedomain = Filter(input_soundin_timedomain, Fs, LOW, MED, HIGH) -where LOW, MED, HIGH are user-selected variables of any value. **try to make an envelope for the filter as well** +where LOW, MED, HIGH are user-selected variables of any value. +**output should be in time domain for all functions (new sound)** ## Useful websites From beb9feafc9c24424e85eb0ccffb3d786dacd7d26 Mon Sep 17 00:00:00 2001 From: Darell Chua Yun Da Date: Thu, 2 Dec 2021 14:42:35 +0800 Subject: [PATCH 4/6] Filter and Pitch Envelope Updated Main_test.m --- .DS_Store | Bin 6148 -> 10244 bytes src/.DS_Store | Bin 0 -> 6148 bytes src/DarellPitchEnvelope.m | 37 +++++++++++++++++++ {DarellsAnnex => src}/DarellbandpassFilter.m | 0 src/Main_test.m | 12 +++++- 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/.DS_Store create mode 100644 src/DarellPitchEnvelope.m rename {DarellsAnnex => src}/DarellbandpassFilter.m (100%) diff --git a/.DS_Store b/.DS_Store index 47b0a43f82ce85bb6f600aaba4a21846ecc9a4d2..c85b185ea95b98abb42560e1e1ed1f9a5f0a64a2 100644 GIT binary patch literal 10244 zcmeHMU2GIp6uxJ+$ov!-ut1BpY%PI8meMV?rQ*+ayG7(DMRxlK=sLSIv?H@K%g*c; z#A@T4g5uwkiSfY)eLzKxiJJI?8WIx~QVl-fgE8upi9Yzii=KP$ET!cq8X}l@XEXQA zJ@=gZ^WE><-7`xFfn?c?6A~qa$aqt!*J5#ni?-AIvP%jz)DO^~5C=a#=_M|H#3c|A z2nYlO0s;Ynz<&_|{LZGAtZ^wyfq+0jAaD@@dOk$)rZN%ADK6R3fdxweP}ZQDUHFW7 z0P~54G7-utE}1L#$+HItT_H>{fV*RRl$xVVgmQ{Y?oNQa69`9!Fhc=0I{HPKIe`S1 zq7(=S1TIH_=I*s5MGR6R)~x*9B8PGlelh2GIkfpOS9EMYXm9@(q)5%YTjtC2Wler4 zJ?>4U10yK=Nu#uv)-s;wb+Lq1<(9P_QmnP zKbK0n@iuGqevbF7SO6f9*i#FXiU z%j+9f+@@*VV8)?pI#SNr2g`PFSZ|SKHpWV=S>0#iEOvS(9mSOO53nB`eU;X%?WHY! zB@0V4bZFJqsTm&^BI^b>T(53WGY2qW72W5W4z*Jobc~$kD7wkV=~jER;R;7n(YJHu z-D;gSf&o;(CHe~2CA6gWFdcS>;Rgdn%cWB~jcvHJ{$@=ZrER^Y$tKjWyndm!P1_;s zXXQQqxKXkOCh#Pg4)wcane80vX>a|e9e5WTGqh2+-HMHe6z(xUt6CDRJep^L(voQB zS_OZLG>|s@<&h!#@Kh|4!{iuwjvOb?lh??bb;Awaf zUV@k5RX71}!8>pgK7v#5DSQTB!dGwx&cb>434VrO;DQv9YNUBmz0@qVN!@(nQuP!Z z<@IVQZNjIS_z2H*$+%*Cr24nqtoZnD0gH%R>y|ECxoU0OMvRk-%;8k4vg=aLGNR7f zNk&u_F>^>ZO+!ah8=I=JG7~*Kng)^K)*+b&nm#|YzN1A(hU@df>Y7%pZr5+&RV}t& z#%R(dR#mllhk`MqN5X1MLB`WTRki0X1!G6A39F6wVwJFprX~BZlhe9<9mIT{oFMO! zkICmq%yZ;C`GNdKE+8FiVF}bTLN>xmXoa<~4r0&--LMIIU^7y43)~M|VH@l~Vh$lS zM`16RV8MRypa=)ShcZ0D==l^Jg=6q69ETU+6?g+q&Y|7bD&e?s!x z`Y}#kA>cmwkdV~oVu=98#q1m$g3LfIKp?;kBwRtdHx_H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Thu, 2 Dec 2021 14:48:08 +0800 Subject: [PATCH 5/6] Update Main_test.m --- src/Main_test.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Main_test.m b/src/Main_test.m index 140b7d8..259df39 100644 --- a/src/Main_test.m +++ b/src/Main_test.m @@ -11,7 +11,7 @@ duty = 0; x = generate_sine(amplitude, frequency, phase, fs, duration, duty); x = x + generate_sine(amplitude, (frequency+5), phase, fs, duration, duty); -%play over 5 counts, should hear both frequencies, 5 beats between the 2 frequencies +%play over 5 counts, should hear both frequencies, 5 beats per second between the 2 frequencies playtime = 5; play_continuous(x, fs, playtime) From 925ac6c98a6ba5bd51e8d8be5757435e405271a7 Mon Sep 17 00:00:00 2001 From: Darell Chua Yun Da Date: Thu, 2 Dec 2021 14:59:09 +0800 Subject: [PATCH 6/6] Update .DS_Store --- .DS_Store | Bin 10244 -> 10244 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.DS_Store b/.DS_Store index c85b185ea95b98abb42560e1e1ed1f9a5f0a64a2..9c2f11d719ec692684b9218e332bf37bc03981e7 100644 GIT binary patch literal 10244 zcmeHMTWl0n82rwplsgJ#q1d2Q*_KiuAZ)i=E-JLJy#p?@J0qPiJ5zUNcZ(HM z<-rR)iWrUhU}B6h-q1u%G!S2m(HDZ?E%8MkNQ_bR!NeE;GiSEYLW#y`d6=`A^UwLu z|DVfuzW?l=vjBjJg5CrW1ptX2E?G5Y*GasdKi8y4py7T<{s0zzTxbKEK4A(G2oVSo z2oVSo2obm$5uopEo+MSsFb@$35eN|&M}Y4SQF^$H2XahEf9s&kKLU`fB(DM(Uzw5M;oJ~8=GVFzP9z~QCXT_zh=|k^kFM!J5PxzVX!U0tVvTm zexv#6Zq~}sc)9bGAXtZ*QduWAd{x6!+UA^OG5}1f8@t?4_xdMoH)=cQ=>N!mc1mQjCfo# z=sJ0?-B+d=E4ap9gY3evE5!H?~<&K#{`39>5W+nZjG+I{jRke zHn(-$v-|w)8df`JuA&SQ{cX>Dz%=qbB~$l?1~fNo*t%&S>MNSAnX!y+Tgw@>*eJ`s z*TO}r+F!_+4;D=C2&e92D@ylaicjVSU9E{JYLBI542$Wq=%;0!qV^TV^w_m`ZVY}K|>ngb#1!t52&_=%~rRoJ0*5b8gz%WywO>rjpKZv z-z7=@qLH4r)}fo8GhVreS2EKsnzSbo=wfTCkFOHYPXI+`{5Qv9SOG1t1G-=UbSS|I zI0?_dDR>3mgb(2idB76hi!guf^{0zUquW%XuLo>>8IU`6`=GE0~^(i`G4SkCGF)@i==NB$oe2cn7sVfK0fe0(jrQ7LLR|Ud>9|W$MFe#5|884 zcoI+Hv-ljojBg2ojni&NnQ%hl+gE5e>HB7)VORAC-ykn~3BfB!RpUy6k1|LMB{3(x=4e*XUp7{BQ8 literal 10244 zcmeHMU2GIp6uxJ+$ov!-ut1BpY%PI8meMV?rQ*+ayG7(DMRxlK=sLSIv?H@K%g*c; z#A@T4g5uwkiSfY)eLzKxiJJI?8WIx~QVl-fgE8upi9Yzii=KP$ET!cq8X}l@XEXQA zJ@=gZ^WE><-7`xFfn?c?6A~qa$aqt!*J5#ni?-AIvP%jz)DO^~5C=a#=_M|H#3c|A z2nYlO0s;Ynz<&_|{LZGAtZ^wyfq+0jAaD@@dOk$)rZN%ADK6R3fdxweP}ZQDUHFW7 z0P~54G7-utE}1L#$+HItT_H>{fV*RRl$xVVgmQ{Y?oNQa69`9!Fhc=0I{HPKIe`S1 zq7(=S1TIH_=I*s5MGR6R)~x*9B8PGlelh2GIkfpOS9EMYXm9@(q)5%YTjtC2Wler4 zJ?>4U10yK=Nu#uv)-s;wb+Lq1<(9P_QmnP zKbK0n@iuGqevbF7SO6f9*i#FXiU z%j+9f+@@*VV8)?pI#SNr2g`PFSZ|SKHpWV=S>0#iEOvS(9mSOO53nB`eU;X%?WHY! zB@0V4bZFJqsTm&^BI^b>T(53WGY2qW72W5W4z*Jobc~$kD7wkV=~jER;R;7n(YJHu z-D;gSf&o;(CHe~2CA6gWFdcS>;Rgdn%cWB~jcvHJ{$@=ZrER^Y$tKjWyndm!P1_;s zXXQQqxKXkOCh#Pg4)wcane80vX>a|e9e5WTGqh2+-HMHe6z(xUt6CDRJep^L(voQB zS_OZLG>|s@<&h!#@Kh|4!{iuwjvOb?lh??bb;Awaf zUV@k5RX71}!8>pgK7v#5DSQTB!dGwx&cb>434VrO;DQv9YNUBmz0@qVN!@(nQuP!Z z<@IVQZNjIS_z2H*$+%*Cr24nqtoZnD0gH%R>y|ECxoU0OMvRk-%;8k4vg=aLGNR7f zNk&u_F>^>ZO+!ah8=I=JG7~*Kng)^K)*+b&nm#|YzN1A(hU@df>Y7%pZr5+&RV}t& z#%R(dR#mllhk`MqN5X1MLB`WTRki0X1!G6A39F6wVwJFprX~BZlhe9<9mIT{oFMO! zkICmq%yZ;C`GNdKE+8FiVF}bTLN>xmXoa<~4r0&--LMIIU^7y43)~M|VH@l~Vh$lS zM`16RV8MRypa=)ShcZ0D==l^Jg=6q69ETU+6?g+q&Y|7bD&e?