Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yapar...

Wav Formatını Okuma, Yazma

En basit sıkıştırılmamış ses dosyası formatı olan wav dosyası nasıl okunur? Oluşturulan sesler nasıl wav formatında yazılır?

Wav dosya formatı, Microsoft'un media dosyalarını saklamak için kullandığı RIFF (Resource Interchange File Format) formatının bir alt formatı. RIFF formatı, dosya başlığından ve onu takip eden alt parçalardan oluşur. Bir wav dosyasını okumak ve dosyaya yazmak için wav dosya formatının alt parçalarını bilmek yeterli. Parçaların, pozisyonlarının, boyutlarının, kullandıkları bayt sıralama tipinin ve gerekli açıklamaların yer aldığı tablo aşağıda:

İsim Pozisyon Boyut Bayt Sıralaması Açıklama
Parça Kimliği 0 4 Big Endian R,I,F,F karakterlerinin ascii kodlarını içerir.
Dosya Boyutu 4 4 Little Endian Bu kısımdan sonraki verilerin boyutunu içerir. Değeri: (Tüm dosya boyutu-8)
Dosya Formatı 8 4 Big Endian W,A,V,E karakterlerinin ascii kodlarını içerir.
Alt Parça1 Kimliği 12 4 Big Endian f,m,t ve " " (bir boşluk) karakterlerinin ascii kodunu içerir.
Alt Parça1 Boyutu 16 4 Little Endian PCM dosyaları için bu değer 16dır.
Ses Formatı 20 2 Little Endian Sıkıştırılmamış dosyalar için bu değer 1dir. Eğer 1den farklı bir değer okursanız, okuyacağınız değer dosyanın hangi formatta sıkıştırılmış olduğunu gösterir.
Kanal Sayısı 22 2 Little Endian Ses dosyası içine kaç kanal yazıldığını belirtir (1,2,...).
Örnekleme Frekansı 24 4 Little Endian Örnekleme frekansının değerini tutar.
Bayt Oranı 28 4 Little Endian Saniyede kaç bayt okunması gerektiğini gösterir. Değeri (ÖrneklemeFrekansı*KanalSayısı*ÖrnekBaşınaBit/8) işlemiyle hesaplanır.
Blok Boyutu 32 2 Little Endian Blok boyutu kavramı için yukarda linki bulunan yazıyı okuyabilirsiniz. Değeri (KanalSayısı*ÖrnekBaşınaBit/8) işlemiyle hesaplanır.
Örnek Başına Bit 34 2 Big Endian Her örneğin kaç bit ile ifade edildiğini gösterir. 8, 16, 24 ... değererini alabilir.
Alt Parça2 Kimliği 36 4 Little Endian d,a,t,a karakterlerinin ascii kodlarını içerir.
Ses Verisi Boyutu 40 4 Little Endian Bu kısımdan sonra gelecek veri boyutunu yani aslında ses verisinin boyutunu gösterir.

Wav okuma yazma, program örneğiYukaridaki kurallara uyularak, örneklenmiş ses sinyali wav dosyasına kaydedilebilir veya wav formatında kaydedilmiş bir dosya açılıp örneklere uaşılabilir. Örneklenen sesin direkt olarak okunabilmesi için ses formatına ayrılan baytlardan "1" değerinin okunması gerekir. Başka değerlerin okunması, dosyanın sıkıştırıldığına işaret eder.

ÖrnekBaşınaBit değeri kodlanabilecek genlik aralığını genişletir. 8, 16, 24,... değerlerini alabilir.

İki kanalı bir dosyada kanallara ait veriler, sol kanal solda, sağ kanal sağda olacak şekilde yazılır.

Son olarak big endian ve little endian sıralamalarından bahsedelim. 2 bayt boyut tanınmış ses formatı kısmına "1" değeri, little endian sıralamasına göre 01 00 olarak yazılır(hexadecimal). Bunun big endian sıralamasına göre yazılış şekli ise 00 01 dir. Little endian sıralamada, isimden anlaşılabileceği gibi değeri en az etkileyen (en önemsiz) baytlar sonlara yazılır. Big endianda ise en etkili/önemli (most significant) bitler sona yazılır.

Sayfayı
Yayın tarihi: 31 Aralık 2009 Perşembe, 21:18
Anahtar kelimeler: wav dosya formatı, ses dosyası, riff formatı

Yorum Gönder

 
Yorumunuzu -1. yoruma yanıt olarak gönderiyorsunuz. Yanıtlamayı iptal etmek için buraya tıklayabilirsiniz.

 

Yorumlar

Onaylanmış yorum bulunmuyor.
 
 
Sayfa 38 sorgu ile 0.013 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2017 Hüseyin Atasoy