Skip to content

Signal Processing - Parsing and Synthesizing a Music Notes

Notifications You must be signed in to change notification settings

hmops/Sinyal_Isleme_Projesi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Hossein Mohammadi

030117098

BIM 311 - Sinyal İşleme

Proje: MATLAB ile sentezleme

Proje Tanıtımı (Hedefler ve Açıklamalar)

Herhangi bir notanın(tercihen tek enstrümanlı) musicxml dosyası oluşturulup Matlab programı yardımıyla parse edilmek. Daha sonra parse işleminden meydana gelecek matrisin bazı sütunları kullanılarak o notaların frekanslarını bulup bir sinyal oluşturduktan sonra (harmonikler, echo ve zarf gibi bazı iyileşmeler yaparak) müziği sentezleyip çaldırmak

Gidişat Yolu

  • musicxml uzantılı dosya oluşturma ve parse etme
  • Parse İşleminden Meydana Gelen Matrisi Yorumlama
    • Elde edilecek matrisin sütun sayısı 19 olmak ile beraber satır sayısı müziğin uzunluğuna bağlı olarak değişmektedir. Matrisin 1 ve 2. sütunları sırasıyla notanın başlangıcı (başladığı yer) ve ne kadar süre içerisinde çalınacağını beat (vuruş) cinsinden ifade edilmektedir.
    • MIDI nedir? MIDI, Musical Instrument Digital Interface ifadesinin kısaltması olup bilgisayar ile diğer enstrüman aletler arasındaki iletişimi sağlayan bir dildir.
    • 4.sütun olan midi pitch, MIDI'deki notaların karşılğıdır. Yani pitches veya notes played dediğimiz dördüncü sütunda bulunan sayısal değerler kullanılarak melodin içinde hangi notaların bulunduğu öğrenilebilir. Buna göre

      [midi_number = 12*log2(fm/440 Hz) + 69] ve [fm = 2(m−69)/12(440 Hz)]

      midi pitch ve frekans arasındaki bağıntılardır.

    • Beşinci sütun olan midi velocity ise bir notanın ilgili tuşuna ne kadar hızlı ve sert basıldığının sayısal değerini ifade etmektedir.
    • Altı ve yedinci sütunlar bir ve ikinci sütunlar gibi notanın hangi aralıkta çalındığı ile ilgili fakat saniye cinsinden ifade edilmiştir.
    • Aynı zamanda ikinci sütun her bir notanın ölçüsünü ifade etmektedir.
  • note.m Fonksiyonu Yazma
    • note.m tek parametreli bir fonksiyon olup matrisin 4.sütununda bulunan her bir notanın midi pitch değerine karşılık gelen tamsayılar girdi olarak alıp ilgili notanın frekansını döndürmektedir.
    • 4.sütundaki keyleri frekansa çeviren formül ise

      [fm = 2(m−69)/12(440 Hz)]

      şeklinde tanımlanır.

  • sentez.m
    • sentez.m dosyası programın genel akışını içermektedir.Programın akışı ise aşağıdaki gibidir.
      1. musicxml dosyası parse edilir. music
      2. gerekli sütunları ilgili değişkenelerine atanır. keys start finish measures
      3. Örnekleme frekansı belirlenir fs
      4. harmonicsdeğişkeni her bir notaya kaç harmonik eklenecek diye ifade etmektedir.
      5. dtotal_signal ve total_time değişkernleri toplam sinyal ve toplam süre her sinyali süresine göre arka arkaya toplamak için tanımlanmıştır.
      6. X değişkeninde ise genliğin değeri tutulur.
      7. For Döngüsünün içine gelindiğinde keys matrisinde bulunan her bir değere karşılık gelen notaın frekansı note.m fonksiyonu çağırılarak bulunacak, duration diye tanımlanmış değişkende notanın başlangıcı ve bitişi ç arasında 1/fs adımlarla ilerleyerek bir süre tanımlanacak.
      8. tonesinüsoidal bir sinyalin exponentioal halidir.
      9. envelopefonksiyonu start finish fs measure ve mode olmak üzere beş parametre alacak şekilde yazılmıştır.Eğer ADSR zarfı döndürülmek istenirse mode olarak belirttiğimiz parametre yerine fonksiyona 1 parameteresi girilmeli.(mode kodun başında da değiştirilebilir).Aynı zamanda mode olarakfonksiyona 2 parametresi girildiği sürece fonkisyon, istenen exponentioal zarfı olduğunu anlayıp onu döndürecek.
      10. Diğer ikinci for döngüsü ise harmonics değişkenine atanan değer kadar iligi notaya hatmonikler ekleyecek.

        Eklenecek her bir harmoniğin genliği 1 / kk (kaçıncı harmonik) ve frekansı fundamental frekans * kk (kaçıncı harmonik) olacak.

      11. Daha sonra sinyal seçilen zarf ile çarpılır.
      12. Sonra her bir nota bir önceki notanın arkasına gelecek şekilde total_signal matrisine eklenecek.
      13. MATLAB'te bulunan reverberation fonksiyonu kullanılarak müziğe echo eklenir. Bu işlemin yapılışı ise ilk olarak reverberation fonksiyonun parametreleri girilir. Burada kullanılan iki özellik kullanıldı.PreDelay & WetDryMix . Ayarlamalar yapıldıktan sonra fonkisyonun döndürdüğü reverb objesi sayesinde echo eklenecek.Burada Dikkat edilmesi gerek yer ise reverb objesinin sadece (specified as a column vector or two-column matrix) sütun vectörü yada matris(n*1 yada n*2) olacak şekilde argüment alacak. Burada total_signal matrisinin transpozu alınmalıdır.

    Uygulamada Seçilen Müziğin Notaları

    ADSR Zarfı ile Oluşturulan Sinyalin Grafiği

    Harmonik eklenip ADSR Zarfı ile Oluşturulan Sinyalin Grafiği

    Harmonik eklenip Exponential ile Oluşturulan Sinyalin Grafiği

    Harmonik eklenip ADSR ile Oluşturulan Sinyale Reverb Eklenmiş halinin Grafiği

    ADSR ile Oluşturulan Sinyale Reverb Eklenmiş halinin Grafiği

    Harmonik eklenip Exponential ile Oluşturulan Sinyale Reverb Eklenmiş halinin Grafiği

    Yukarıdaki grafikler yalnızca 16. ölçüdeki notaların grafiğidir.

About

Signal Processing - Parsing and Synthesizing a Music Notes

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages