Ynt: stm32 microcontroller ve wav file

Başlatan Karamel, 15 Ağustos 2015, 01:49:39

Gökhan BEKEN

İyi de sendeki arrayı ben ürettim, tek tek kontrol ettim, bire bir tutuyor. Sorun olması imkansız.
Little endian olduğunu dikkate alarak, ters çevirme işlemini yaptıysan sıkıntı olmaması lazım.
Özel mesaj okumuyorum, lütfen göndermeyin.

mesmert

Merhaba Gokhan Hocam
PCB tasarimi konusunu ben yaparim ve hatta numunenin ilk dizgisinide yaparim. Siz projeye SD karttan ses kaydetme ve calma seklinde olursa cok iyi olur. Sistemi Low Power olarak tasarlariz.

Karamel

hocam bende bilemedim. o yuzden istedim ya. birileri daha deney yapsin ve beni yanlislasin.

sizin wav to hex yaziliminizla wav file in volume unu 1/8 ine cekince. puruzsuz dinleyebiliyoruz. herseyi defalarca control ettik sorun yok gozukuyordu.

simdi fatih6761 hocamdan gelen file in volume u yuksek ve cizirti yok. sorun olmadigini buradan anlayabildim.

fatih6761 hocam. sizin wav file i. buraya yukleme sansiniz varmi?

bu saatten sonra. bizim array imizde sorun olup olmadigini kanitlayacak tek deney var ki. microsd card a wav lari atip. teker teker calacagiz. oradan okunan degerler. herhangi bir yazilimla array e cevirilmis yada icerisiyle oynanmis olmayacagindan. bize en dogru cevabi verecektir.

Gökhan BEKEN

#63
Sayın @mesmert hocam, teşekkür ederim. Forum'a katkısı olacak.

mesaj birleştirme:: 18 Ağustos 2015, 01:47:00

Karamel, Fatih'in gönderdiği arrayı notepad++ ile aç, ctrl+h kısayoluna bas, boşlukları ve 0x'leri ve virgülleri sil, her byte'ın arasında bir boşluk olsun.

örneğin: FF A1 B5 DD diye gitsin
sonra ctrl+a ile hepsini seçip, hex editöre at, kaydet. bunları benim programa yolla, tekrar array oluştur. Eğer ses hala bozuk çıkıyorsa, benim programın ürettiği array sorunlu demektir.

bu arada benim programı indirmek isteyen varsa link: https://github.com/gokhanBeken/BinaryFileToTextArray
Özel mesaj okumuyorum, lütfen göndermeyin.

fatih6761

Alıntı yapılan: Karamel - 18 Ağustos 2015, 01:16:10
hocam bende bilemedim. o yuzden istedim ya. birileri daha deney yapsin ve beni yanlislasin.

sizin wav to hex yaziliminizla wav file in volume unu 1/8 ine cekince. puruzsuz dinleyebiliyoruz. herseyi defalarca control ettik sorun yok gozukuyordu.

simdi fatih6761 hocamdan gelen file in volume u yuksek ve cizirti yok. sorun olmadigini buradan anlayabildim.

fatih6761 hocam. sizin wav file i. buraya yukleme sansiniz varmi?

bu saatten sonra. bizim array imizde sorun olup olmadigini kanitlayacak tek deney var ki. microsd card a wav lari atip. teker teker calacagiz. oradan okunan degerler. herhangi bir yazilimla array e cevirilmis yada icerisiyle oynanmis olmayacagindan. bize en dogru cevabi verecektir.

@Karamel ÖM den istemiştin ama madem lazım oluyor böyle buradan atayım. Yalnız dikkatini çekti mi bilmem ama ben wav dosyanın başındaki header bölümünü silerek dönüştürüyorum hex koda.
Bence sizin wav dosyalarda da bundan kaynaklanan bir indeks kayması olabilir. Hex Editörler wav dosyasını açıp "data" kısmını buluyorum. datadan sonraki 4 bayta kadar olan yeri komple silip hex koduna dönüştürüyorum.

https://drive.google.com/file/d/0ByIscC6i2OS-M0NoSHZHZUF1OFU/view?usp=sharing

Karamel

Alıntı yapılan: fatih6761 - 18 Ağustos 2015, 01:52:13
@Karamel ÖM den istemiştin ama madem lazım oluyor böyle buradan atayım. Yalnız dikkatini çekti mi bilmem ama ben wav dosyanın başındaki header bölümünü silerek dönüştürüyorum hex koda.
Bence sizin wav dosyalarda da bundan kaynaklanan bir indeks kayması olabilir. Hex Editörler wav dosyasını açıp "data" kısmını buluyorum. datadan sonraki 4 bayta kadar olan yeri komple silip hex koduna dönüştürüyorum.

https://drive.google.com/file/d/0ByIscC6i2OS-M0NoSHZHZUF1OFU/view?usp=sharing

tamamdir. dinledigimiz gibi caliyoruz. bu code lari olusturuken file in formatinda vs bir degisiklik yaptiniz mi? eger hic birsey degistirmeyip. sadece hex output aldiysaniz. sorun bir bizim wav file imizde imis.

diyelim ki data kismini bulmadan deneyler yaptim. max. 3 yanilgi payimiz var. onlar sunlar.

diyelim file 50. byte ta basliyor. ben 48 ten baslatirsam R ve L output yer degistir. ses normal cikar ve biz %98 oranda deney yaparken ortada sorun olmadigini sanariz.
diyelim ki 49 dan baslattik. butun hersey ters duz olur. bozuk ses cikar. (tamamen anlamsiz gurultu seklinde oluyor)
diyelimki 50 den baslattim. hersey okay olur.
diyelimki 51 den baslattim. hersey istedigimiz gibi olur.

burada sorun cikaracak 2 deger var. wav filei 0-1-2-3 ten baslatsamda yukaridaki sonuclari alirim. frequance cok yuksek oldugundan ilk 50 byte i duyamayiz bile.

onceki file ile yukaridaki deneylerin hepsini yapmistim. siz 46. byte tan basliyor demistiniz. oradan da baslatip deney yapmistik. (ben 44 ten baslatiyordum. R ve L outputlar yer degistiriyordu ama ben bunu duyarken anlamiyordum bile)


fatih6761

Alıntı yapılan: Karamel - 18 Ağustos 2015, 02:05:13
tamamdir. dinledigimiz gibi caliyoruz. bu code lari olusturuken file in formatinda vs bir degisiklik yaptiniz mi? eger hic birsey degistirmeyip. sadece hex output aldiysaniz. sorun bir bizim wav file imizde imis.

diyelim ki data kismini bulmadan deneyler yaptim. max. 3 yanilgi payimiz var. onlar sunlar.

diyelim file 50. byte ta basliyor. ben 48 ten baslatirsam R ve L output yer degistir. ses normal cikar ve biz %98 oranda deney yaparken ortada sorun olmadigini sanariz.
diyelim ki 49 dan baslattik. butun hersey ters duz olur. bozuk ses cikar. (tamamen anlamsiz gurultu seklinde oluyor)
diyelimki 50 den baslattim. hersey okay olur.
diyelimki 51 den baslattim. hersey istedigimiz gibi olur.

burada sorun cikaracak 2 deger var. wav filei 0-1-2-3 ten baslatsamda yukaridaki sonuclari alirim. frequance cok yuksek oldugundan ilk 50 byte i duyamayiz bile.

onceki file ile yukaridaki deneylerin hepsini yapmistim. siz 46. byte tan basliyor demistiniz. oradan da baslatip deney yapmistik. (ben 44 ten baslatiyordum. R ve L outputlar yer degistiriyordu ama ben bunu duyarken anlamiyordum bile)

İşin güzel tarafı tüm bu ihtimalleri tek kalemde yok etmek mümkün. Program başında Wav dizinden "data" stringini ararız, bulduğumuz indise 4 ekleyerek offset değerini elde ederiz. Bundan sonra ses verisini okurken indis+offset şeklinde okuruz.
Wav dosyasını gizli bilgi gömme projemde bu yöntemi kullandım ve onlarca Wav dosyasında (farklı farklı türlerden) hiç sorun çıkartmadı.
İlk 100-200 baytı ele alıyoruz. 0. bayttan başlayarak 'd' harfini arıyoruz. Peşinden gelen 'a' değilse sonraki 'd' ye gidiyoruz. Eğer peşinden gelen 'a' ise onun ardından 't' ye bakıyoruz vs.. Tam olarak data'yı bulduğumuzda 4 byte ileri gidiyoruz ve ses verisi geliyor.
Ayrıca formatta hiç bir değişiklik yok. Offsetten sonraki ses verisini olduğu gibi (dosyadan okuduğum gibi) diğer dosyaya yazıyorum. Sonra hex koda dönüştüren fonksiyonu çağırıp kaydediyorum.

OG

#67
Alıntı yapılan: Karamel - 17 Ağustos 2015, 17:50:32
B350 hex icin. 45904 ondalik sayisina denk geliyor? burada bir yanlislik var.bu sayi icin - 19632 demissiniz? bunu nasil buluyoruz? sorun bu kisimda.


50 B3 yani B3 50 'nin MSB si (işaret biti) 1 dir.
50 B3 => B3 50 => (45904) => 1011001101010000 (Unsigned gibi düşünülseydi)
Bunun Signed değeri kuvvet ifade etmez, yanlızca 0 noktasının altında olduğunu gösterir, işaret bitini atarsak => 0011001101010000  => (13136)
İşareti de unutmazsak -13136 dır.

Anlamı  şudur, bu değerin işaret biti - yi gösterdiğine göre sinyalin 0 hattından 13136 değer kadar daha aşağıdadır.
Veya en alttaki -32767 den 19631 değer daha yukarıdadır.

Yani;

İŞARETLİ DEĞER => MUTLAK KUVVET
+32767              => 65534 (Mutlak kuvvet)  => 0111111111111111
.
.
0 (SIFIR HATTI)   => 32767 (Mutlak kuvvet)  => 0000000000000000
.
.
-13136                => 19631 (0 hattına göre kuvvet ise 13136) => 50 B3 byte dizilimini düzeltelim, yani B3 50, işaret bitini görmezsek kuvvet değeri 13136
.
.
-32767                => 0 (Mutlak kuvvet)        => 1111111111111111

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Gökhan BEKEN

Karamel benim programda ufak bir problem varmış,
input=fopen(dosyaAdi, "rw+");
olarak açmışım dosyayı, windows'ta böyle yapınca 0x0A'ları 0x00 olarak çeviriyor,
input=fopen(dosyaAdi, "rwb+");
olarak açınca düzeldi. Yani sorun 0x0A'lardanmış, böyle olması gerektiğini biliyordum ama dalgınlıkla yazmışım.
Hatta bu sorun ile ilgili, eskiden bir konu açmıştım ve çözmüştük: https://www.picproje.org/index.php/topic,57712.msg444719.html#msg444719
Özel mesaj okumuyorum, lütfen göndermeyin.

Karamel

Olsun hocam. Saglik olsun ::) sorunlar ciktikca ogrenme oluyor. Kolayca yapilan seyler egitici olmuyor. 16 bit wav file i calabilmek icin bu konu hakkinda birsuru yazi okumustum. Pat diye calaydik. Belki bir iki tane okuyup bu konuyu gececektim. Kotu degil. Aslinda egitim icin iyi oldu bizim icin ::)