Python ile Ses İşlemeye Giriş#

Barış Bozkurt (Yazar), Ahmet Uysal (Editör)

Bu site, Python ile Sayısal Sinyal İşleme ve daha özelde Ses Sinyal İşleme için giriş seviyesinden başlayan Jupyter defterler dizisi içermektedir. Bu sayfa dışında diğer tüm sayfaların en üstünde Open In Colab butonu bulunmaktadır. İçeriği bu siteden okuyabileceğiniz gibi, butonu tıklayarak defteri Google-colab’de açıp kodlarını çalıştırabilir, değişiklikler yaparak deneyler yapabilirsiniz. Kodların çalıştırılmasıyla ilgili bilgiler için “Defterleri Çalıştırmak İçin” bölümüne bakınız.

Bu site oluşturulurken Jupyter Book aracı kullanılmıştır. Otomatik html sayfa oluşturma sırasında oluşan hataları temizlemeye ve içeriğimizi iyileştirmeye devam ediyoruz.

Giriş#

Ses teknolojisi hayatımızın her yerinde. Bir yere nasıl gidileceğini artık yoldaki birine değil Siri’ye soruyor, onu dinliyor ve o sese güvenerek döner kavşakta ikinci çıkışa gidiyoruz. Bir dağ tepesinde kamp çadırımızda mobil cihazımızla milyonlarca müzik kaydından birisini uzaktan erişimle dinleyebiliyoruz. Muazzam bir dönüşümü şu son 20 yılda yaşadık ve hız kesmeden devam ediyor. Dönüşümün parçası olmak veya sadece anlamak, birbirinden çekici araştırma sorularının içine dalmak için kendinize yapabileceğiniz en iyi yatırımlardan birisi ses işlemenin temellerini öğrenmek, ses işleme yapabilen programlar yazma yetisini edinmek. Bu kitap bu yoldan yürüyeceklerin işini kolaylaştırmak için yazılmıştır.

Sayısal Ses İşleme ve Alt Alanları#

Sayısal ses, temelde basınç değişim dalgaları olan akustik ses sinyallerinin mikrofon türü sensörler ile elektriksel sinyallere dönüştürülmesi, oradan da çevirici devreler yardımıyla bilgisayarda sayı dizileriyle temsil edilmesi ile elde edilir. Sayısal ses işleme ise bu sayı dizileri üzerinde bilgisayar programları aracıyla analiz, bilgi çıkarma, sentez işlemlerinin yapılmasına karşılık gelir. Alan, uygulamaya göre özelleşmiş alt alanlar içermektedir. Örneğin konuşma sinyallerinin ele alındığı alt alan konuşma işleme (speech processing), müzik sinyallerinin ele alındığı bazı alt alanlar müzik ses işleme, müzik bilgi erişim ( digital audio signal processing, sound and music computing, music information retrieval) olarak adlandırılır. Temel tekniklerde kesişmekle beraber her bir alanın uygulama problemine göre değişen çok özel teknikleri vardır ve bu sebeple araştırmacılar özel uygulama alanlarında uzmanlaşır, kendileri gibi o alanda uzmanlaşmış bilim insanlarından oluşan camianın bir parçası olurlar (camianın konferanslarına katılır, camianın yayın organlarında makaleler yayınlarlar) ve sayısal ses işlemenin diğer alanlarındaki gelişmeleri nadiren ve sadece göz ucuyla takip ede(bili)rler.

Konuşma işleme uygulama alanı gündelik hayatımızda çok yer bulduğu (konuşan navigasyon sistemleri, telefonla bankacılık, vb.) için bu alt alanda ülkemizde yetkinliği çok yüksek belirli sayıda araştırmacı bulunmakta, konu yaygın bir şekilde (araştırma projeleri, yüksek lisans ve doktora tez çalışmaları, şirket ARGE faaliyetleri ile) çalışılmaktadır. Sayısal ses işlemenin diğer alt alanları için bunu söylemek oldukça zor. Bu kitapta, görece araştırmacı sayımızın az olduğu müzik ses işleme konularına yöneleceğiz ve bu alana kaynak sağlamaya çalışacağız.

Bu kitap kimler için yazıldı?#

Bu kitap öncelikle müzik ses işleme konularında pratik (kod yazarak ses işleme aracı geliştirme) yeteneklerini geliştirmek isteyen kişiler için yazıldı. Buna ek olarak sayısal sinyal işleme kuramını öğrenen öğrencilere de pratik imkanı sağlayacağını, ayrıca Matlab gibi farklı diller veya araçlarla sayısal sinyal işleme çalışmaları yapmakta olan ve Python’a geçiş yapmak isteyen kişiler için de faydalı olabileceğini düşünüyoruz.

Sayısal ses işleme alanının kuramsal temelleri sinyal işleme kuramına dayanmaktadır. Ülkemizde (ve dünyada) “sinyal işleme dersi” elektrik elektronik mühendisliği ve bazı bilgisayar mühendisliği bölümlerinde zorunlu temel dersler arasındadır. Sayısal sinyal işleme kuramının detaylı şekilde anlatıldığı kitaplar, çevirileriyle beraber (örneğin J. G. Proakis’in Digital Signal Processing kitabı), mevcuttur. İnternet üzerinden erişilebilen çok sayıda kaynak bulunmaktadır. Bu alanda ayrıca çok sayıda Matlab uygulamaları içeren kaynak da bulunmaktadır. Bu sebeple kuramın tekrarını çok sınırlı düzeyde (gerekli en alt seviyede) tutacağız ve Python uygulamalarına yoğunlaşacağız. Bununla beraber, uygulamadan kastımız her örnekte bir son ürün tasarımından çok sinyal işleme kuramında bahsi geçen ancak gerçek sinyaller üzerinde analiz örneklerinin az olduğu konularda Python kodlama örnekleri sunmaktır. Bunun, bir çeşit pratik alt yapısı oluşturacağını düşünüyoruz. Kitabımızda geçen pratikleri yapan bir kişinin kuramı gerçek sinyaller üzerine uygulama yetisinin önemli düzeyde artacağını öngörüyoruz.

Bu kitap okuyucusunun aşağıdaki yetilere sahip olduğunu varsayarak kurgulanmıştır:

  • Herhangi bir programlama dilinde dizi/vektör işlemleri yapabilecek düzeyde program yazma yetisi

  • Müzik kuramı temel kavramları bilgisi (gam, akor, tonalite, vb.)

  • Sinyal işleme temel kavramlarına aşinalık

Sayısal Müzik Ses İşleme#

Bugün ülkemizde bilimle kesişimi çok az olduğu ve sanat alanının bir alt dalı olduğu düşünülen müzik, eski çağlardan bu yana birçok filozof ve bilim adamı için önemli çalışma konuları arasında yer almıştır. Pisagor’a göre müzikal seslerin armonisi ile evrenin armonisi aynı prensiplere, hatta aynı kaynağa dayanıyordu. Büyük bir sırrın yansıması gibi umulmadık noktalarda kendini gösteren “müzikal” sayıları bir düşünün: Bir gamda 7 ses ve haftada 7 gün, oktavda 12 ses ve bir yılda 12 ay, bir düzinede 12 fincan, bir öğretiyi aktaran 12 havari, 12 imam, müzikal beşliler çemberi oktava 41.turda oktavla hemen hemen birleşir ve 41 kere maşallah.

Bizler sesle çevrili bir evrende yaşarız. Bir sese maruz kalmadığımız bir an yoktur. Sesle iletişim kurar, bazen bir kuş cıvıltısı duyduğumuzda herşeyden vazgeçip bütün dikkatimizi ona veririz. Etkilendiğimiz müzikleri hemen arkadaşlarımızla paylaşmak isteriz. Facebook ve YouTube’un ilk yaygınlaşmaya başladığı günleri hatırlayın. Müzik paylaşımı üzerinden büyüdüler ve bugün hayatlarımızdaki yerlerini aldılar.

Müzik biliminin öneminin çağlar boyunca artıp azaldığı dönemler olmuştur. Ama, belki de oyunla (to play) olan ilişkisi sebebiyle, hemen her dönemde hayatın birçok alanında beklenmedik yaratıcı buluşlara kaynaklık etmiştir. Yüzlerce örnek sıralamak mümkün. Örneğin bilinen ilk programlanabilir makinelerden birisi (belki ilki) 9.yy’da Bağdat’ta Banū Mūsā kardeşler tarafından icat edilen müzik kutusudur. Makinenin sadece üzerinde kodları taşıyan silindiri değiştirirsiniz ve size başka bir müzik çalar, makine (kutu) silindir üzerindeki kodu işlemiştir. Silindir üzerindeki küçük metal parçalarıyla temsil edilen kod zamanla önce dokuma tezgahlarında, sonra ilk programlanabilir makinalarda kullanılan delikli kartlara evrilmiştir. Bu programlama şekli müzik alanındaki yolculuğuna ise (bizim de 3. defterimizde ele aldığımız) piyano rulosu ve MIDI temsilleriyle devam etmiştir.

Müzik biliminin heyecan dolu yolculuğuna ve bugün devam eden araştırmalarına ülkemizde ilgi oldukça sınırlıdır. Aslında belki yaşayan en güçlü sanat damarımızdır müzik. Her köyde bağlama, kaval, davul çalan ve çok güzel türkü söyleyen insanlarımız vardır, dinlemeyi de severiz. Bu topraklarda müzik kadar yaygın ve geçmişle bağı güçlü şekilde devam eden çok az sanat dalı var. Ancak işin bilimsel yönüne olan ilgimiz için aynısını söylemek zordur. Oysa müzik biliminin her insanı cezbedecek çekicilikte heyecan dolu soruları vardır: insanlar neden hüzünlü müzik dinlemeyi severler? kısacık bir hicaz taksiminin beni belirli bir ruh haline sürüklemesini sağlayan ses ilişkileri nelerdir? içimi kıpır kıpır eden o parçanın ritmik vuruşları arasındaki ilişki nedir?

Değindiğimiz büyük soruları çalışmak birçok alandan bilgi, deneyim ve kavrayış gerektirir; işitsel çalışmalar, duyu ve duygu çalışmaları, biliş, müziğin matematiği, akustik, müzik kuramı, ses sinyal işleme,… Elektrik Elektronik Mühendisliğinin “Sinyal İşleme” alanı ses analizi ve sentezi ile ilgili çok büyük bir bilgi birikimi oluşturmuş, müzik teknolojisi alanına temel sağlamış bir alt dal olarak bize müzik araştırmalarında çok etkin şekilde kullanabileceğimiz araçlar sağlar. Bahsettiğimiz büyük soruların veya daha küçük ve eğlenceli olanlarının peşinden giderken yanımızda taşıyacağımız zengin bir alet çantası sunar bu dal. Bu kitaptaki amacımız da bu özel araştırma alanındaki deneyimlerimizi mümkün olduğunca sizlerle paylaşmak ve alet çantanıza yeni araçlar eklemenize yardımcı olmak. Bu metni okuyorsanız belki müzikle ilişkili bir sorunun büyüsüne zaten kapılmış ve ipuçları aramaktasınız.

Organizasyon#

İçeriğimizi sayısal sinyal işleme temellerinden başlayıp daha sonra müzik sinyal işleme konularını ele alacak şekilde organize ettik. Bölüm 1’de sayısal sinyal işlemenin temel kavramlarını ve işlemlerini, okuyucunun başlangıçta Python dili ile aşinalığının düşük olabileceğini düşünerek, kısa Python kodlama örnekleriyle beraber ele alıyoruz. İkinci bölüm sayısal sistemlere odaklanıyor. Bu bölüm sayısal sinyal işleme dersi almamış okuyucular için yoruyucu olabilir. Yorulmanız durumunda bir sonraki bölüme atlayarak devam etmeyi ve arada geri dönerek ikinci bölümü tekrar ele almayı denemenizi öneririz. Üçüncü bölüm “spektrumu nasıl hesaplayıp çizdirmeliyim?” ve “müzik sinyal spektrumuna baktığımda ne görürüm” sorularını cevaplamayı hedefliyor. Bölümün ilk kısmında sayısal bir sinyalin spektrumunu ve ikinci kısmında müzik sinyallerinin spektrumunu ve notalarla ilişkisini ele alıyoruz. Bu bölümde sayısal sinyal işleme içeriğinden müzik sinyal işleme içeriğine geçiş yapılıyor. Dördüncü bölümde müzik kayıtlarının analizini yaparken ölçülen akustik parametrelerin/özniteliklerin nasıl hesaplandığını ve hesaplanan bu parametrelerle otomatik enstrüman sınıflandırıcı tasarımını ele alıyoruz. Beşinci bölümde kayıtların frekans analizi ve frekans bilgisinden yola çıkarak entonasyon analizi işleniyor. Altıncı ve son bölümde ritmik analiz için sinyal işleme temel adımlarını örnekler üzerinden ele alıyoruz.

Müzik sinyal işleme elbette bu konularla sınırlı değil. Kitabımızın amacı da bütün alanları kapsamak değil. Kitabımızı sürekli büyüyecek bir içerik olarak düşünüyoruz. Kitapta görmek istediğiniz yeni bölümlerle ilgili taleplerinizi bize e-posta ile iletebilirsiniz.

Defterleri çalıştırmak için#

  • Gmail hesabınıza giriş yapınız.

  • Daha önce hiç Google-colab kullanmadıysanız: https://colab.research.google.com/ linkine giderek örneklerden (“Examples”) birisini açınız. Menüden “Runtime/RunAll” işlemini seçiniz. Bu işlem Jupyter defterlerini açıp çalıştırmanızı sağlayan Colab eklentisini Gmail hesabınıza ekleyecektir.

  • Kodlarını çalıştırmak istediğiniz sayfanın en üst kısmında bulunan Open In Colab butonuna tıklayarak ilgili defteri Google-Colab’de açınız. Menüden “File/Save a copy in drive” işlemini yapınız. Artık defteri okuyup, fare ile içinde kod bulunan kutuların üzerine gittiğinizde sol kenarda çıkan “çalıştır” ikonunu tıklayarak çalıştırmaya hazırsınız. Oluşturduğunuz bu kopya Google-drive’ınızda “Colab Notebooks” klasörüne kaydedilecektir. Bu sadece sizin ulaştığınız bir kopyadır, üzerine notlar alabilir, kodları değişterek deneyler yapabilirsiniz.

  • Defterin tüm kodlarını baştan sonra çalıştırmak isterseniz: Menüden “Run Time / Run all” fonksiyonunu çalıştırabilirsiniz.

Google-colab kullanımında zorlanırsanız Youtube’da çok sayıda bulunan yardım videolarından (bir örnek için tıklayınız) izlemenizi öneririz .

İçindekiler#

1- Python ile sayısal sinyal işlemeye giriş:

2- Sayısal sistemler:

3- Spektrum analizi:

4- Müzik sinyali analiz: akustik öznitelikler:

5- Müzik ezgi boyutu analizi:

6- Müzik ritim boyutu analizi:

Ek bölümler:

Tavsiye ettiğimiz diğer kaynaklar:

Teşekkür#

Kitabın tümünü okuyup görüşlerini paylaşan, ülkemizde müzik teknolojisi alanının başta gelen öncülerinden Doç.Dr. M. Kemal Karaosmanoğlu’na değerli katkıları için çok teşekkür ederiz.

Destek olmak isterseniz#

Kitaptan fayda görür ve destek olmak isterseniz adımıza Bilimler Köyü’ne arzu ettiğiniz miktarda mali destekte bulunabilirsiniz. Bilimler Köyü’ne destek için bakınız.

İçerikle ilgili yorumlarınızı bize baris.bozkurt@idu.edu.tr adresine e-posta atarak ulaştırabilirsiniz. İyi okumalar.

Yazar: Barış Bozkurt, editör: Ahmet Uysal