Bildirim
DELPHİ mp3 wav Converter Programı Hakkında Yardım
Daha Fazla 
Bu Konudaki Kullanıcılar:
Daha Az 

2 Misafir - 2 Masaüstü

Giriş
Mesaj
-
-
hoca birazcık üstünde dursan yaparsın.Kitap mitap bul netten.sen bi algortimayı geliştir gerisi çorap söküğü gibi gelir.Ha sen dersi derste dinlemediysen koddan moddan haberin yoksa :DD:bilemem -
Ya bende merak ediyorum: Şimdi bu lame'nin falan mp3 ile ilgili birşeyleri(kitaplık dicem doru olur mu?) var. onları temel alan araçlar var. nası yapılıyo bunlar? Yani kaynak kodunu kullanmıyo lame'nin çünkü dll orda duruyo. -
quote:
Orjinalden alıntı: pavlov
Ya bende merak ediyorum: Şimdi bu lame'nin falan mp3 ile ilgili birşeyleri(kitaplık dicem doru olur mu?) var. onları temel alan araçlar var. nası yapılıyo bunlar? Yani kaynak kodunu kullanmıyo lame'nin çünkü dll orda duruyo.
Arkadaşım Tam dediğin gibi lame yada mp3pro kütüphanelerini kullanarak yapabilirsiniz.
daha başka kütüphanelerde var bunlar için biraz araştırırsanız bulursunuz.
kısa mantıkta şudur mp3 formatını decode edip wav olarakta encode edeceksiniz bu işlemler bu kütüphanelerde fonksiyon olarak mevcuttur. -
Daha önce forumda bir arkadaş C# ile wmv dosyalarını parçalamak için yardım istemişti, ve bende ona bazı şeyler yazmıştım forumda aratıp bulabilirsin.Senin sorun tabiki parçalamak değil öğrenmeniz gereken şey ortak.
DOSYA FORMATLARI...Yani şimdi arkadaşlar birkaç kitap edin, kolay yazarsın diyor ama öyle kolay değil işte dostum...
Öncelikle çevirmek ve çevrilmesini istediğin dosyaların FORMAT'ını bilmen gerek.Birçok program kendi dosya formatını tasarlar.Kendisine ait bu dosyalar için bazı YAPILAR belirler, bu yapıları doldurur ve dosyalara yazarlar.
Örneğin;
typedef struct _MP3_HEADER {
unsigned int dwSize;
unsigned long lStartSection;
unsigned int lDataSection;
....
} MP3_HEADER, *PMP3_HEADER;
Yukarıdaki yapıyı örnek olması için uygurdum.Bu tip dosyalarda buna benzer birçok header, ve data bulunur.Program bunların içini doldurduktan sonra sıralı bir şekilde byte olarak dosyaya yazar.Okuyacağı zaman genelde dosyanın başından itibaren bir yapı okur ve bu yapı ile diğer header'ların offset'lerini öğrenir, onlardan da diğerlerini filan...
Yani kısacası her iki dosyanında formatlarını öğrenmen gerek.Diyelim ki bir MP3 dosyasını aldın.Bunun yapısının okuyabilmeli, sonra wav formatında bir dosya oluşturabilmeli, ve mp3'deki ses datasını wav'a yazabilmelisin.Bu sadece file format ile alakalı kısımdır.Birde ses'ler o formata ve programa göre codec'lenebilir.O konu belli başlı bir konu Allah uğraşanlara sabır versin
Arkadaşlarında da dediği gibi lame.exe'yi kullanabilirsin en basit olarak.Bu araç komut satırından çalışır ve wav dosyasını mp3'e dönüştürebilir.(tersini yapıyor mu bilmiyorum)Bu aracı gizli şekilde arka plan process'i olarak çalıştırırsın ve gerekli parametreleri göndererek dönüşüm işini halledersin.
Fakat tavsiyem eğer vaktin varsa ilk yöntem ile uğraşman...
Kolay Gelsin
-
PanDa tam da merak ettiğim konuya değinmişsin. Yani bir program açacağı dosyanın türünü dosyanın başındaki HEADER'lardan anlıyor(en azından ben öyle anladım).
Peki lame'yi örnek alırsak, yazdığımız programla o exe arasında bağlantı nasıl kuruluyo? Biraz karmaşık bir konu galiba. -
@pavlov ilk önce son sorduğun soruya cevap vereyim.Bir programlama dili ile uğraşıyor musun bilmiyorum.Yinede şöyle bir örnek vereyim.Örneğin C# gibi bir dil ile yazıyorsan lame.exe'yi yazdığın program içinden Process sınıfının Start() methodu ile çalıştırırsın.Fakat lame.exe giriş olarak .wav dosyasını, çıkış olarakta .mp3 konum ve adını aldığı için önce bir ProcessStartInfo sınıfından bir instance oluşturup bunun gerekli üyelerini
ayarlarsın.Sonra Process.Start() ile çalıştırırsın.Örneğin;
ProcessStartInfo psi = new ProcessStartInfo();
psi.Arguments = "-c:\\wavfile.wav - c:\\mp3file.mp3";
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.FileName = "lame.exe";
Process lame = Process.Start(psi);
lame.WaitForExit();
Bu kod c:\ deki wav'ı yine c:\'ye mp3file.mp3 olarak dönüştürüp kaydeder.Eğer C gibi bir dil ile kod yazıyorsan CreateProcess API'si ile bu işlemi yapabilirsin.(Forumda bir yerde CreateProcess'in çalışmasını anlatmıştım)Process instance'ının WaitForExit() methodu ise lame.exe'nin işi bitene kadar asıl programı duraksatıyor.
İlk soruna gelince.Dediğin gibi her program kendi dosya formatını oluşturuyor.Örneğin exe ve driver(sys) dosyaları.Bunlar PE formatında dosyalardır.Yapısı şöyledir;
Dosyanın başından başlıyor;
MS-DOS HEADER
MS-DOS RealMode stub program
PE File Signature
PE File Header
PE Optional Header
.text section
.bss section
.rdata section
......
Bunlar birer yapıdır ve sıralı bir şekilde dosyanın başından itibaren yazılmıştır.(arada unused alanlar var)Ve bu dosyaları tıkladığınızda işletim sistemi yükleyicisi devreye giriyor ve dosyadaki bu yapıları okuyup birçok işlemi gerçekleştiriyor(bellek tahsisi, segment ayarları vb...)
İşte Media Player ve bunun gibi programlarda aslında bu mantıkta.Bazı dosya formatlarını tanıyor ve çalıştırıyor.Programlarla bu dosyalar nasıl ilişkilendiriliyor?Yada bir wmv dosyaya tıkladığınızda otomatik Media PLYR nasıl açılıyor?Bunun cevabıda regisry'de arkadaşlar.Şimdi oraya daha fazla girmeyeyim...
Lame, exe ve dll olmak üzere kullanılabiliyor.Source kodu var mı bilmiyorum ama aşağıdaki adresten lib ve exe'yi indirip kullanabilirsiniz..
Umarım yardımcı olabilmişimdir.
http://www.rarewares.org/mp3-lame-bundle.php
-
Arkadaşın C# için yazdığını ben delphi ye çevireyim.
WinExec('c:\lame.exe -c:\wavfile.wav -c:\mp3file.mp 3"',SW_HIDE or SW_SHOWNOACTIVATE);
lame.exe nerede ise orayı belirtmek gerekli ben C dedim. -
Tam olarak delphi'ye çevirmemişsin WinExec bir API'dir.Hangi dil olursa olsun bu iş için CreateProcess API'sini kullanın derim.CreateProcess PROCESS_INFORMATION tipinde bir yapının adresini alır ve eğer çalıştırılmak istenen program için bir process'i başarılı bir şekilde oluşturursa bu yapının içindeki üyeleri process'in ve ana thread'in handle ve ID değerleri ile doldurur.Böylece oluşan process'in handle değerini WaitForSingleObject gibi bir API'ye geçirerek kernel nesnesi(process handle) kapanana kadar güncel programınızı bekletebilirsiniz.Bu aslında yukarıda C# ile verdiğim kodun API'ler ile yapılmış bir eşdeğeridir.
< Bu mesaj bu kişi tarafından değiştirildi PanDa -- 29 Aralık 2007; 14:34:11 >
Sayfa:
1
Ip işlemleri
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X