2/25/2018

Дууны долгион үүсгэж, нот болгон хувиргах тухай (Энгийн синтесис)


Дуу хоолой, хөгжим, авиа зэрэг дуулдаж болох бүх зүйлс дууны долгионоор орчинд тархаж, чихэнд хүрсэнээр бид сонсдог. Харин дууны долгионы давтамж болон далайц нь духайн хоолой, дуу ингэж сонсдоно гэдгийг тодорхойлдог. 
Энэхүү блогт хэрхэн дууны долгионыг үүсгэх, түүнийг удирдах болон програмчлах аргийг энгийнээр тайлбарлахыг зорилоо.

Хэрхэн дууны долгион үүсгэх вэ?

Математитик тэгшитгэлүүдийн тусламжтайгаар бид дараахи энгийн долгионуудыг хялбар аргаар үүсгэж болно. 


Sine буюу синусоид функцээр үүсгэх долгионы тэгшитгэл нь дараах хэлбэртэй байна.
y = A * sin(2𝜋fxt) үүнд хувьсагчууд нь
A нь далайц (amplitude)
f нь давтамж (frequency) 
t нь хугацаа. Энэхүү хугацаа нь синусоид функцийг дискрет хугацаанд үүсгэхийн тулд sampling хийж буй хэрэг юм. Хугацааны утга нь дискрет өсөлттэй байх бөгөөд энэ нь делта t байна. dt гэж тэмдэглэе. dt нь sampling хийх үеийн нэгж хугацааны давтамжийн утга болно. Энэ нь t ийн утга нэгж хугацааны дараа dt-р нэмэгдэнэ гэсэн үг. 

Харин хөрөө(sawtooth) хэлбэрийн долгион үүсгэх тэгшитгэл нь.

Мөн A, f, t нь дээрхи синусиод функцтэй адил байна.
Энэ хоёр функцийг нэг хавтгайд зурж үзвэл.  
Цэнхэр нь синус, улаан нь хөрөө хэлбэртэй үргэлжилсэн утга үүсэж байгааг харж болно. Харин одоо хоёр функцээ нэгтгэе. Шууд тэгшитгэлийнхээ утгуудыг хооронд нь нэмнэ.
Дээрхи нийлбэр функцийн хувьд f1, f2 нь ижил байх шаардлагатай. Хэрвээ давтамжийн утгууд ялгаатай байвал хөрөөны төгсгөлөг үе болон синус нэг үе хоорондоо зөрөх учир хугаралттай өөрөөр хэлбэл царай муутай сонсоход тааламжгүй ая үүсч болно. Нийлүүлсэн функцийг зурж үзвэл.
Гэх мэтчилэн дууны долгионуудыг хооронд нь нэмж нэг долгион үүсгэнэ. Дууны долгионы үүсгэх тэгшитгэлээ дүрслэхдээ Matlab ашиглах нь илүү зохимжтой. Миний хувьд desmos.com ашиглаж зурсан. Desmos дээр систем тэгшитгэл бичих боломжгүй учир дөрвөлжин долгион дүрслэж чадахгүй.

Дууны долгион үүсгэх програм бичхийн тулд та хүссэн програмчлалын хэлээ ашиглаж болно. Би жишээ код үзүүлэхгүй учир хэрхэн хөгжүүлж болох тухай бичье. Ямар ч дуу үүсгэх төхөөрөмж байсан (PC нд ихэнх тохиолдолд аудио карт байдаг) тухайн төхөөрөмжийн оролтод зориулж буффер нөөцлөнө.
Буфферт байгаа утга нь аудио буюу дуу болж гарна. Буфферийг дүүргэхдээ долгионы үргэлжилсэн утгийг аль болох алдахгүй нарийвчлал өндөртэй дискретчлэхийн тулд sampling хийх давтамж буюу делта хугацааг аль болох бага байлгах хэрэгтэй. 
Гэхдээ аудио төхөөрөмжийн гаралтын давтамж болон тухайн компьютер/төхөөрөмж буфферийг хэр хурдан хугацаанд дүүргэж чадах вэ(функцийн утгийг хэр хурдтай тооцох вэ) гэдгийг тооцсоны үндсэн дээр делта хугацааг оноох хэрэгтэй.

 

Долгионыг хэрхэн хөгжмийн нот болгох вэ?

Үндсэн 7 нот байдагийг бид мэднэ. Нео-Латин болон Англи нэршил.
Do - C, Re - D, Mi - E, Fa - F, Sol - G, La - A, Si - B.
Мөн (-1) -ээс 9 хүртэл нийт 11 октав байна. Нэг октав нь дотроо үндсэн 7 нот болон завсрын 5 ноттой нийлээд 12 ноттой байна. 
Тэгвэл эдгээр нот болон октавууд хоорондоо юугаараа ялгаатай вэ гэвэл өмнөх гарчигт дурьдсан дууны долгионы давтамжаараа( f ) л хоорондоо ялгаатай. Харин дууны долгионы далайц, хэмжээ, загвар зэрэг нь тухайн хөгжмийн зэмсгээс хамаардаг.

Октав ахих бүрт нотны долгионы давтамж хоёр дахин өснө. 
.00
Дээрхи хүснэгтэн дээр октав бүрийн A (La) нотны давтамжийг харуулсан байна. Төгөлдөр хуурийн нот бүрийн давтамжийг эндээс харж болно. Мөн төгөлдөр хуур хэрхэн хөглөдөг тухай эндээс уншаарай. 

Харин одоо хөгжмийн долгион үүсгэж байгаа тэгшитгэлийнхээ давтамжийг өөчлөөд хүссэн нотоо дугаргаж чадхаар боллоо. Хэрвээ энгийн санагдаж байвал, харагдаж байгаа шигээ энгийн бишшүү! Магадгүй та хөгжмийн зэмсэг тоглодоггүй бол зөвхөн далайц, давтамж зэргээс гадна өөр маш олон зүйлс хөгжмийг гайхалтай дугаргахад нөлөөлдгийг битгий мартаарай.
1 comment :

1 comment :