Winamp için eklentiler. Benim tarafımdan Winamp için en iyi ses efektleri eklentilerine genel bir bakış. Hazır eklentiyi indirin

Winamp, pro-müzik dinleme yazılımları arasında pratik olarak fiili standarttır. Çoğu kişisel bilgisayarda bulunabilir.

Ancak yetenekleri sadece müzik dosyalarını çalmakla sınırlı değildir. Eklentilerin desteği sayesinde yeteneklerini genişletebilirsiniz. WinAmp aşağıdaki eklenti türlerini destekler:

Her bir eklenti türüne bir göz atalım.

Bu eklentiler sayesinde, oynatıcınıza yalnızca MP3 formatındaki müzikleri değil, aynı zamanda diğer formatlardaki dosyaları da anlaması öğretilebilir. Örneğin, Winamp'a video göstermeyi veya MIDI dosyalarını oynatmayı, CD'leri dinlemeyi öğretebilirsiniz.

Örnek olarak, Winamp kullanarak video dosyalarını görüntülemenize izin veren bir eklenti kurmayı düşünelim.

1. Winamp'ı açın. Bunu yapmak için, "Masaüstü" üzerindeki simgesine çift tıklayın veya "Başlat" düğmesinin yanında bulunan Hızlı Başlat araç çubuğundaki aynı simgeye bir kez tıklayın.
2. "Ctrl + K" tuş bileşimine basın.
3. "Eklentiler" bölümünün "Giriş" kategorisine tıklayın.
4. Yapılandırmak istediğiniz eklentinin adına tıklayın. Bizim durumumuzda, bu "Porzillosoft Video Eklentisi".
5. "Yapılandır" düğmesine tıklayın. Ayarlar penceresi ekranda belirir (Şek. 1). Bu pencerede film izlerken ekrandaki zaman panelinin gösterimini, bu paneldeki saat gösterim biçimini ve arka plan rengini yapılandırabilirsiniz.
6. Burada yapılan değişiklikleri kaydedebilir veya önceden oluşturulmuş ayarları yükleyebilirsiniz.
7. Bitirdiğinizde, "Kapat" düğmesine tıklayın.
8. "Winamp Tercihleri" penceresini kapatmak için "Kapat" düğmesine tıklayın.

Artık video dosyalarını yalnızca Windows'u kullanmak Medya oynatıcı ama aynı zamanda Winamp'ta.

Şekil 1. Video dosyalarını görüntülemek için eklentinin ayarlar penceresi.

Ses çıkışını kontrol etmenizi sağlar. Örneğin, bu eklentileri kullanarak, müzik CD'lerinin içeriğini dosyalara dönüştürebilir veya tam tersi, dosyaları bir çalma listesinden doğrudan bir CD'ye yazabilirsiniz.

Müzik CD'lerini üzerindeki dosyalara kopyalamak için bir eklenti kurmaya bir göz atalım. HDD bilgisayar:

1. Winamp'ı açın;

3. “Eklentiler” bölümünün “Çıktı” kategorisine tıklayın;
4. Listeden "Nullsoft Disk Writer Plugin" isimli eklentiye tıklayın;
5. "Yapılandır" düğmesine tıklayın. Eklenti ayarları penceresi ekranda belirir (Şek. 2);
6. CD'deki dosyaların kopyalanacağı klasörü belirtmek için "Çıktı dizini:" altındaki düğmeye tıklayın. Varsayılan olarak, dosyalar düğme adına yansıtılan kök klasörde oluşturulur;
7. Biraz aşağıda, oluşturulmakta olan dosyaların biçimini belirleyebilirsiniz. Farklı bir çıktı formatı ayarlamak için, mevcut formatın açıklamasının solundaki üç noktalı düğmeye tıklayın;
8. Bir CD'nin içeriğini tek bir büyük dosyaya yakmak gerekirse ses dosyası, "Tek dosya modu" kutusunun içindeki "Etkinleştir" onay kutusunu tıklayın. Bu durumda formatı değiştirmek de mümkün olur. oluşturulan dosya;
9. "Başlangıçta boş örnekleri öldür" onay kutusunun ayarlanması, her kompozisyonun başlangıcındaki sessizliği kaldırmanıza olanak tanır;
10. Temel ayarlar yapılmıştır. "Tamam" düğmesine tıklayın;
11. "Winamp Tercihleri" penceresini kapatmak için "Kapat" düğmesine tıklayın;
12. CD'yi CD-ROM sürücünüze yerleştirin ve oynatın. Bu durumda müzik duyulmaz ve belirttiğiniz klasörde ses dosyaları oluşturulur.

Etkin çıktı eklentisinin seçmek için tıkladığınız eklenti olduğunu unutmayın. Daha sonra tekrar müzik dinlemek için "WaveOut çıkışı" veya "DirectDound çıkışı" eklentisini seçin.

Şekil 2. CD'leri bir sabit sürücüye kopyalamak için eklentiyi yapılandırma penceresi.

En popüler kategorilerden biri. Müzik çalarken çeşitli video efektlerini oynatmanıza izin verir. Ayrıca, efektler müziğin ritmine göre dinamik olarak değişir. Çok güzel görünüyor.

"Nullsoft Tiny Fullscreen 2001" örneğini kullanarak böyle bir eklenti kurmayı düşünelim:

1. Winamp'ı açın;
2. "Ctrl + K" tuş bileşimine basın;
3. "Eklentiler" bölümünün "Görselleştirme" kategorisine tıklayın;
4. Fare tıklamasıyla listeden "Nullsoft Tiny Fullscreen 2001" adlı eklentiyi seçin;
5. "Yapılandır" düğmesine tıklayın. Eklenti ayarları penceresi ekranda belirir (Şek. 3);
6. Açılır listede ekran çözünürlüğünü seçin ve pencerenin en altında kaydırıcıyı hareket ettirerek efektlerin azalma oranını ayarlayın;
7. Ayrıca, İnterpolasyon ızgara boyutu değerleriyle de denemeler yapabilirsiniz;
8. Ayarlar yapıldıktan sonra "Kapat" butonuna tıklayın;
9. "Winamp Tercihleri" penceresinin "Kapat" düğmesine tıklayın;
10. Şimdi müzik çalarken aynı anda "Ctrl + Shift + K" tuşlarına basın ve monitörünüzün ekranı güzel görsel efektlerle dolacaktır. Efektleri kapatmak için klavyedeki "ESC" tuşuna basmanız yeterlidir.

Şekil 3. Görselleştirme eklentisi ayarları penceresi.

Bu tür eklentiler, sese çeşitli efektler eklemenize ve hatta onu iyileştirmenize olanak tanır.
Tipik olarak, bu eklentiler yapılandırılamaz. Ancak Winamp'ı başlattığınızda, sesi değiştirebileceğiniz ek bir pencere açılır. Örneğin, “DFX” eklenti penceresinde (Şekil 4) kaydırıcıları kullanarak kompozisyonu surround (3D) ses, eko, ek bas ve diğer efektlerle doyurabilirsiniz. Bunu veya bu efekti devre dışı bırakmak için ilgili kaydırıcının solundaki düğmeye tıklamanız yeterlidir. DFX penceresinin sol alt köşesindeki AÇIK düğmesi, tüm efektleri hemen kapatmanıza olanak tanır.

Şekil 4. DSP efektleri eklenti penceresi

Eklentiler genel amaçlıörneğin eklemek için izin ver Ek özellikler Winamp'ı "Tray Advanced Controls" eklentisinin yaptığı gibi kontrol edin. Winamp kontrollerini sistem alanına (systray) getirerek, programa geçiş yapmadan bile programı kontrol etmenize olanak tanır.
Bu eklentiyi yapılandırmak için şunu çalıştırın: aşağıdaki eylemler:
1. Winamp'ı açın;
2. "Ctrl + K" tuş bileşimine basın;
3. Eklentiler bölümünün Genel Amaçlı kategorisine tıklayın;
4. Fareyi tıklayarak listeden "Winamp Advanced Controls Plug-in" eklentisini seçin;
5. "Yapılandır" düğmesine tıklayın. Eklenti ayarları penceresi ekranda görünecektir (Şek. 5).
6. Burada kısayol tuşlarını etkinleştirebilir ("Kısayol Tuşlarını Etkinleştir" onay kutusu), açılır bir ipucunda şarkının adını görüntüleyebilir ("Şarkı başlığı balonu" onay kutusu), sistem alanı ve ayrıca Winamp'ı kontrol etmek için yeni kısayol tuşları atayın.
Burada, oyunlar ve müzik eşliğinde dans eden büyüleyici kızlar ve kılıçlarla savaşan şövalyeler de dahil olmak üzere yüzlerce eklentiden sadece birkaçı ele alındı. Herkes beğenisine göre bir şeyler bulacak. Deneyin, bir göz atın ve pişman olmayacaksınız.

Şekil 5. Winamp kontrol eklentisi ayarları penceresi.

Önemli

Eklentilerin nasıl kurulacağı aşağıda tartışılacaktır. Ancak, eklentileri yüklemeden önce onları indirmeniz gerekir. Winamp geliştiricisinin sitesinde birçok ilginç eklenti var http://www.winamp.com/plugins. Bunları başka sitelerden de indirebilirsiniz.
MPEG-4 video dosyalarını görüntülemeye yönelik Video Nesnesi Eklentisi örneğini kullanarak eklentiyi kurmak için eylem sırasını ele alalım.
1. Çoğu zaman, eklentileri yüklemek için dosyalar programlar şeklinde yapılır. Eklenti simgesine çift tıklayın. Ekranda, sabit sürücüde eklentinin kurulacağı konumu belirtmenizi isteyen bir pencere belirir.
2. Winamp kurulumu sırasında kurulum yerini değiştirmediyseniz, "Yükle" düğmesine tıklayın. Kurulum yeri farklı ise "Gözat ..." butonuna tıklayarak belirtmelisiniz, çıkan pencerede Winamp'ın kurulu olduğu klasörü seçip "Tamam" butonuna tıklayarak seçimi onaylamalısınız. Bundan sonra, tekrar "Yükle" düğmesine tıklayın.
3. Şimdi geriye "Kapat" butonunun bulunduğu pencerenin ekranda görünmesini beklemek kalıyor, bundan sonra bu butona tıklayabilirsiniz. Yükleme tamamlandı.
4. Geriye sadece Winamp'ı başlatmak ve eklentiyi yapılandırmak kalıyor.

Sözlük
Eklenti - İngilizce'den. Eklenti. Programa yeni özellikler ekleyen bir eklenti.
MIDI dosyaları - özel dosyalar sadece müzik içerir, sesin yeniden üretilmesine izin vermez.
Ekran çözünürlüğü - Noktalar halinde monitör ekranındaki görüntünün geometrik boyutu. Örneğin, 800x600 nokta. Her monitörün farklı bir nokta boyutu vardır. Çözünürlük ne kadar yüksek olursa, ekrandaki nesneler o kadar küçük olur.

Winamp'ın yetenekleri, eklenti teknolojisi kullanılarak önemli ölçüde genişletilebilir. Eklentiler, Winamp'a bağlanan ve onunla çalışan ek, özel olarak tasarlanmış programlardır. Bu, bazılarını monitör ekranında (müziğe) görüntüleyen bir program olabilir. grafik bilgi(görselleştirme modülleri), ses efektleri ekleyen bir program (DSP modülleri - Dijital Ses İşleme) veya Genel Amaçlı eklentiler - örneğin, görev çubuğuna oynatıcı kontrol düğmeleri ekleyin. Standart olmayan dosya türlerini açmak için özel modüller, örneğin VQF dosyaları ve ayrıca standart olmayan cihazlardan ses çıkışı için modüller vardır (örneğin, sesi MP3'ten WAV formatına dönüştürürken).

Not

2.09 sürümünden itibaren, Winamp dağıtım dosyası artık görselleştirme ve ses işleme (vis / dsp) için eklentiler içermemektedir. Şimdi ayrı olarak indirilmeleri ve kurulmaları gerekiyor. Tabii ki, programın yeni sürümü bir öncekinin üzerine kurulursa, önceden kurulmuş tüm modüller korunur.

Modüllerin kurulumu basittir. En basit haliyle, eklentiler, adının başlangıcı amaçlarını yansıtan küçük dll dosyalarıdır (vis - görselleştirme modülü, dsp - ses işleme modülü, gen - genel amaçlı modül, giriş / çıkış için giriş / çıkış) . Kural olarak, modüller paketlenmiş olarak depolanır. Arşivi \ Winamp \ Plugins \ dizinine açmanız gerekir.

Ardından Winamp'ı başlatın ve modülü yapılandırın. Bunu yapmak için Tercihler penceresini açın ( +

), uygun modülü seçin ve ayarlarını yapılandırın.

Winamp eklentileri İnternet'teki çeşitli sitelerde bulunabilir. Özellikle, resmi web sitesinde yaklaşık yüz farklı modül bulunmaktadır. http://www.winamp.com.

En ilginç görselleştirme modüllerinden biri, çok sayıda ışık ve müzik efekti uygulayan Cthugha modülüdür (Şekil 7.17).

Pirinç. 7.17. Cthugha oluşturucu penceresi

Cthugha modülü ile ilgili bilgiler aşağıdaki sitelerden edinilebilir: http://www.afn.org/~ctugha http://islands.zesoi.fer.hr/~kpisacic/ctugha http://www.geocities.com/SiliconValley/Lab/6531


Doğru fırlatma ile Rusça / İngilizce versiyonu!

FxSound Geliştirici(eski adıyla DFX Audio Enhancer) - AIMP3, Winamp oynatıcılarının sesini iyileştirmek için bir ses eklentisi. Bu eklentinin amacı olan frekans tepkisi geliştirilerek ses kalitesi önemli ölçüde iyileştirilir. Kullanarak FxSound Geliştirici iki ana dezavantaj ortadan kaldırılır - yüksek frekansların kesilmesi ve stereo tabanın ve derinliğinin yetersiz ayrılması ve ayrıca surround ve süper bas modları eklenir.
Bu enstrüman ile en yüksek ses kalitesine sahip olacak ve müziği salonda oturuyormuş gibi netlikte duyabileceksiniz. konser Salonu ya da bir müzisyenin yanında. Tüm FxSound Enhancer ayarlarının araç arayüzünün bir penceresinde yer aldığını belirtmekte fayda var. Eklenti, hoş ve kullanımı kolay bir kullanıcı arayüzüne sahiptir. FxSound sürücüsünde sanal olarak çalışır ses kartı(playback aleti).

Sistem gereksinimleri:
Windows Vista | 7 | 8 | 8.1 | on

AIMP3 için Torrent Sound eklentisi, Winamp - FxSound Enhancer 13.007 RePack by KpoJIuK ayrıntılı olarak:
DFX, oynatma sesini aşağıdaki şekillerde iyileştirir:
· Harmonic Fidelity Restoration - dosya boyutunu küçültmek için kodlama sırasında kesilen yüksek frekansların telafisi;
· Ambiyans İşleme - ses derinliğini telafi eder ve sözde uygular. bir müzik bestesi çalarken "surround efekti";
· 3D Surround İşleme - işlev, çalınan kompozisyonları değiştirmenin doğası gereği öncekine benzer, ancak sözde üç boyutlu ses oluşturmaya "odaklanır" iyi kalite iki hoparlörlü ses sistemlerinde bile;
· Dinamik Kazanç Artırma - çalınan sesin "sıkışması" için telafi, ona "dinamik" bir bileşen vererek ve sesin yoğunluğunu artırarak; 3DNews dosya bölümünün yöneticisinin bakış açısından, bu DFX işlevsel modülü ses çalma üzerinde en az etkiye sahiptir;
HyperBass Boost - işlevsel bir bakış açısından, bu Harmonic Fidelity Restoration'ın antipodudur, daha düşük frekansları telafi eder ve çalınan parçaya derin ve zengin bas eklemekten sorumludur;
Kulaklık Çıkışı Optimizasyonu - kullanıcı kulaklık aracılığıyla müzik dinliyorsa kullanılır, modül sesi, kişinin ses kaynağının doğrudan kulaklara "oturmadığı", ancak önünde bulunduğu yanılsamasına sahip olacağı şekilde değiştirir. subjektif sesi daha hoş, doğal ve daha az stresli hale getirir.

Yeni özellikler ve iyileştirmeler:
İlişkili şarkılardaki ön ayarların otomatik seçimi
Kendi ön ayarlarınızı yedekleyin ve geri yükleyin
10 bantlı ses spektrum analizörü
Geliştirilmiş kullanıcı kontrolü
Yeni kullanıcı arayüzü
64 bit Windows desteği

Montaj özellikleri:
·Bir çeşit: Kurulum
·Diller: Rus ingilizcesi
· Aktivasyon: SiCaril

Komut satırı parametreleri:
Rus versiyonunun sessiz kurulumu:/ S / RU
İngilizce versiyonun sessiz kurulumu:/ YOU ARE
Kurulum yeri seçimi:/ D = YOL

/ D = PATH parametresi en son olarak belirtilmelidir.
Örneğin: FxSound.Enhancer.v13.007.exe / S / RU / D = C: \ Programım

Not!!! Kurulum sırasında, yükleyicinin ilk sayfasında, değiştirmeniz istenecektir. ana sayfa tarayıcı. Kutunun işaretini kaldırmayı unutmayın.

Merhaba havalı hacker! Enerjiniz - evet
barışçıl amaçlar 🙂 O halde yapacağız
sevgilinin aranjmanı (umarım) mp3
Winamp oyuncusu. Winamp eklentisi - normal DLL
kesin olarak tanımlanmış bir arayüz ile. Genel olarak,
eklentileri destekleyen herhangi bir program,
için kendi standart arayüzüne sahiptir.
onlara hitap ediyor. Bu yazıda, biz
DSP arayüzünü düşünün (oluşturmak için
ses efektleri gibi: hızlanma / yavaşlama
ses, “etraftaki ses” [aka surround] vb.).
Surround efektinin uygulanması çok kolaydır,
bu yüzden örnek olarak seçtim. V
stereo sinyal iki kanal - sol ve sağ
olarak, hoparlörlere antifazda beslenir.
hacimsel bir etki sağlar.

Şimdi uygulamanın yazılım kısmı hakkında. V
"dsp.h" dosyası dahili olarak bildirdi
modül başlık yapısı (winampDSPModule) ve
eklenti başlığı (winampDSPHeader). Ayrıca bir
işlev (winampDSPGetHeader2) "dışa aktarma için" bildirildi
(“dsp.def” dosyasına bakın) - Winamp'ın yaptığı budur
plugin'a yüklenirken. ona verir
bir bağlantı içeren bir başlık
modül seçim fonksiyonuna. işte bu
Winamp'ın eklentili iletişim arayüzü. Ve işte o
kaynak (Visual C++ 6.0):

:

#define DSP_HDRVER 0x20 // Başlık sürümü: 0x20 == 0.20 ==
winamp 2.0

typedef struct winampDSPModule
{
karakter * açıklama; // Açıklama
HWND hwndParent; // Çağıran programın penceresi (bizim
kasa WinAmp)
HINSTANCE hDllInstance; // DLL'mizin tanıtıcısı (WinAmp ile doldurulmuş)

// Eklenti yapılandırması için pencere işlevi
void (* Config) (struct winampDSPModule * this_mod);
// Başlatma (başarılıysa 0 döndürür)
int (* init) (struct winampDSPModule * this_mod);
// Örnekleri değiştir (sayıyı döndürür
işlenmiş numuneler)
int (* ModifySamples) (struct winampDSPModule * this_mod,
kısa int * örnekler, int sayısal örnekler,
int bps, int nch, int srate);
// "Boşaltma" sırasında çağrılan işlev
Eklenti
void (* Çık) (struct winampDSPModule * this_mod);

geçersiz * userData; // Kullanıcı verileri (genellikle
kullanılmış)
) winampDSPModule;

typedef yapısı
{
int versiyonu; // WinAmp'a'nın hangi sürümü için (DSP_HDRVER)
karakter * açıklama; // Açıklama (eklentinin ne yaptığı veya
Kim tarafından)
// Bir modül döndüren bir işlev (bir
eklenti bunlardan birkaçı olabilir)
winampDSPModule * (* getModule) (int);
) winampDSPHader;

typedef winampDSPHeader * (* winampDSPGetHeaderType) ();

#Dahil etmek
#"dsp.h"yi dahil et

// "Ana" DLL işlevi - gerekir
her DLL'de bulunur
BOOL WINAPI _DllMainCRTStartup (HANDLE hInst, ULONG ul_reason_for_call,
LPVOID lp Ayrılmış)
{
DOĞRU döndür;
}

// Modüllerden birini döndüren bir fonksiyon
Eklenti
winampDSPModule * getModule (int olan);

void yapılandırması (struct winampDSPModule * this_mod);
int init (struct winampDSPModule * this_mod);
void çıkış (struct winampDSPModule * this_mod);

int sayısal örnekler, int bps, int nch, int srate);

// Aşağıdakileri içeren modül başlığı:
sürüm, açıklama,
// modülü "veren" fonksiyonun adresi
WinAmp
winampDSPHeader hdr = (DSP_HDRVER,
"Harika XAKEP surround eklentisi :)",
getModule);

winampDSPModule modu =
{
"Çevre sesi",
NULL, // hwndParent (WinAmp ile doldurulmuş)
NULL, // hDllInstance (WinAmp tarafından doldurulur)
yapılandırma,
içinde,
değiştir_örnekler,
çıkış yapmak,
BOŞ
};

// Bu, dışa aktarılan tek işlevdir (bkz.
"dsp.def")
// Hakkında tüm bilgileri içeren başlığı döndürür
Eklenti
winampDSPHeader * winampDSPGetHeader2 ()
{
dönüş
}

// Modülü WinAmp'a yayınlama işlevi (NULL döndürür,
istek yanlışsa)
winampDSPModule * getModule (int hangisi)
{
if (hangisi == 0)
dönüş
Başka
NULL döndür;
}

// Konfigürasyon işlevi (herkes için ortak
eklentideki modüller)
void yapılandırması (struct winampDSPModule * this_mod)
{
Mesaj Kutusu (BOŞ,
"Bu modülün Telif Hakkı (C) 1999 Starlight'a aittir",
"Yapılandırma", MB_OK);
}

// Başlatma (içinde bu durumda gerek yok)
int init (struct winampDSPModule * this_mod)
{
0 döndür;
}

// "Boşaltma" sırasında çağrılan işlev
// Eklenti pencereleri oluşturduysa - burayı silin
void çıkış (struct winampDSPModule * this_mod)
{
}

// Surround burada yapılır 🙂
int change_samples (struct winampDSPModule * this_mod, kısa int * örnekler,
int sayısal örnekler, int bps, int nch, int srate)
{
int x;
if (bps == 16 && nch == 2 / * eğer stereo * /)
için (x = 0; x< numsamples*nch; x += 2) {
// sinyal "ters çevrilmiş" kanallardan birine gidiyor
int s = -örnekler [x];
örnekler [x] = (s> 32767? 32767: s<-32768 ? -32768: s);
}
dönüş örnekleri;
}

:

KÜTÜPHANE
İHRACAT
winampDSPGetHeader2 = winampDSPGetHeader2

:
@cl / LD / MD / GD6f / Ox / Os / ID: \ DS \ VC98 \ dsp.c dahil D: \ DS \ VC98 \ Lib \ UUID.LIB D: \ DS \ VC98 \ Lib \ MSVCRT.LIB
D: \ DS \ VC98 \ Lib \ USER32.LIB D: \ DS \ VC98 \ Lib \ KERNEL32.LIB / link /def:dsp.def
/ tercih: şimdi98
@del dsp.obj> boş
@del dsp.exp> boş
@del dsp.lib> boş
(Yollarınızı VC++'a yazmanız yeterli 🙂

Hepsi bu - sağlık için kullanın 🙂

not Anshkin Oleg aka Starlight'a özel teşekkürler.

P.P.S. Ne tür bir müzik bilmeniz gerekiyorsa
arkadaşın/tanıdığın kovalıyor yazabilirsin
her şeyle ilgili uygun bir eklenti
nestuch ... genel olarak, sizi bilgilendirecek
onun için yeni taksi mp3'lerinin ortaya çıkışı 🙂

SimpleKeys eklentisi örneğini kullanarak popüler WinAmp oynatıcısı için eklenti geliştirmenin temel ilkelerinin kısa bir açıklaması - keyfi tuş kombinasyonları kullanarak WinAmp'ı kontrol etmek için basit bir program.

Sorunun formülasyonu

Başlangıçta kendime basit bir görev belirledim: WinAmp'ı artık klavyelerde çok yaygın olan standart multimedya tuşlarını kullanarak kontrol etmek. Bu anahtarlar Windows'ta yerleşik desteğe sahiptir (ancak Win2k'den başlayarak kendi tarama kodlarına sahiptirler), standart Media Player bunları destekleyebilir, ancak WinAmp'ı kontrol etmek için ek yazılıma ihtiyaç duyar.

Yazılım aramak için Web'e gittim. Hemen kendim için ana kriterleri belirledim: ilk önce değerlendirme dışı bıraktım bağımsız programlar... Tepside yer kaplarlar, oynatıcı çalışmıyorken bile bellekte kalırlar, sistem başlangıcında yüklenirler ve bu zaten yavaş olan süreci uzatırlar. Bu, WinAmp'ın kendisi için eklentiler olduğu anlamına gelir. İki şekilde arama yaptım: WinAmp web sitesinde kendi eklenti aramasıyla ve Google'da. Yaklaşık bir saat harcadıktan ve birkaç eklenti indirdikten sonra (buradaki açıklamalar ayrıntılı olarak günah işlemez, bu yüzden yazılımın uygun olup olmadığını anlamak için indirmeniz gerekir), uygun bir şey bulamadım. En yakın eklenti KeyControl v1.0 beta idi, ancak multimedya anahtarlarıyla çalışmayı reddetti ve üreticinin web sitesine bağlantıda sadece yeni sürümlerden değil, genel olarak programlardan söz etmedim. Bir kum. Gerisi daha da kötü - anlaşılmaz fare, joystick ve neredeyse telepatik kontrol yeteneklerine sahip birçok süslü eklenti, ancak çoğunlukla harici programlar, ancak klavye kontrolü için basit bir eklenti yok ...

Daha fazla arama yaparak zaman kaybetmemeye karar vererek, ilk sorunu yeniden formüle etti: "WinAmp'ı standart multimedya anahtarlarını kullanarak kontrol edecek" bir eklenti yazmaya çalışın. önceki versiyon görevler:)). Sonunda, eklentinizi yazdıktan sonra, ana sorunu çözmenin yanı sıra, başkalarının programlarını indirerek elde edilemeyen bazı yeni bilgi ve beceriler kazanılacaktır.

SDK ve arayüz

WinAmp web sitesinde kendi eklentilerinizi yazmak için üç şeye sahip olmanız gerektiği söyleniyor (ücretsiz çevirimde): C ++ bilgisi (böylece yazacak bir şeyiniz olsun), bu dilden bir derleyici (yani derleyecek bir şeyiniz olduğunu) ve Windows'u (böylece başlatmaktan daha fazlasını kullanabilirsiniz). Her şey orada görünüyor, o yüzden devam et.

İlk önce WinAmp SDK'yı indirmeniz gerekiyor. SDK, bence, bu arşiv için çok yüksek bir isim, ancak ... Orada tüm olası eklenti türleri için şablonlar olan örnekler ve ayrıca eklentiler oluşturmak için yapıları ve sabitleri açıklayan bir dizi H dosyası var. . Belgelerle biraz sıkı, sadece kaynak koddaki yorumlar. Anlayacağız.

Sözde "jenerik eklenti" ile ilgileniyoruz. giriş (yani farklı formatlardaki dosyalardan müzik okuma) veya çıkış (oynatma) ile ilgilenmeyeceğiz. farklı cihazlar), ses işleme yok, işleme yok. Çok basit, ancak sorunun ne olduğunu bilmiyorsanız size çok zaman kaybettirebilecek ilginç bir özelliği hemen not edeceğim: WinAmp, eklentinin türünü adıyla belirler. Özellikle genel amaçlı bir eklenti için DLL adı gen_ ile başlamalıdır. Bir eklenti farklı şekilde adlandırılırsa, "genel eklenti" olarak yüklenmez.

Bu tür eklentilerin arayüzü (belki diğerleri de bakmadım) oldukça basittir: dışa aktarılmış bir winampGetGeneralPurposePlugin işlevine sahip dinamik olarak yüklenmiş bir kitaplıktır (DLL). Bu işlev hiçbir argüman almaz, ancak aşağıdaki gibi bildirilen winampGeneralPurposePlugin türünde kısmen doldurulmuş bir yapıya bir işaretçi döndürür.

Typedef struct (int sürümü; // Yapının sürümü (0x10 değeri) char * açıklama; // Eklentinin açıklaması int (* init) (); // Başlatma işlevinin işaretçisi void (* config) (); // Yapılandırma işlevi void (* çıkış) (); // Sonlandırma işlevi için işaretçi HWND hwndParent; // WinAmp programının ana penceresinin tanıtıcısı HINSTANCE hDllInstance; // Yüklenen eklenti DLL'sinin tanıtıcısı) winampGeneralPurposePlugin;

Eklentinin WinAmp programıyla (bundan sonra kısaca "program" olarak anılacaktır) etkileşimi aşağıdaki gibidir: program eklentiyi yükler ve ondan winampGetGeneralPurposePlugin işlevini çağırır. Eklenti, winampGeneralPurposePlugin türünde bir yapı oluşturmalı, ileride kullanmak üzere bir işaretçiyi hatırlamalı, sürümü (sabit değer 0x10), açıklama, init, yapılandırma, çıkış alanlarını doldurmalı ve işaretçiyi döndürmelidir.

Eklenti bir dahaki sefere program kendi init fonksiyonunu çağırdığında kontrolü ele geçirdiğinde (yapıya bir işaretçi kaydettik). Bu noktada program, yapıda kalan iki alanı dolduracaktır: hwndParent ve hDllInstance. İnit işlevinde, eklenti çalışması için gerekli tüm başlatma işlemlerini gerçekleştirmeli ve başarı durumunda 0 döndürmelidir.

Program bittiğinde, çıkma işlevi çağrılır, burada varsaymak mantıklıdır, init "e'de kullanılan her şeyi serbest bırakmanız ve doğru sonuçlandırma için diğer tüm eylemleri gerçekleştirmeniz gerekir.

Üçüncü işlev olan config, kullanıcı program özellikleri iletişim kutusunda eklentiyi seçip "Yapılandır ..." düğmesine bastığında çağrılır.

Kullanıcı arayüzü

Yazılım geliştirme sürecini tanımlarken tutarlı olmak için, dahili uygulamadan bahsetmeden önce kullanıcı arayüzünden bahsetmeniz gerekir. Bu kadar basit bir eklenti için karmaşık bir arayüz bulmadım, işlevselliğe fazla zarar vermeden olabildiğince basit hale getirildi.

Eklentiyi başlattıktan hemen sonra çalışmaya başlar, sadece programdan kaldırarak kapatabilirsiniz. Çalışma sırasında, belirtilen tuşlara tüm basışlar, "Durdur", "Çal", "Duraklat", "Çal / Duraklat", "Sonraki şarkı", "Önceki şarkı" ilgili program işlevlerinin yürütülmesine neden olur.

Eklenti ayarları kayıt defterinde, HKEY_CURRENT_USER \ Software \ Winamp \ Plugins \ DenVo \ Simple_Keys dalında saklanır. Anahtar kodları ve değiştiricileri olan DWORD değerleridir ve adları gerçekleştirdikleri işlevlere karşılık gelir. Şu anda şu adlar / işlevler desteklenmektedir: "Stop", "Play", "Pause", "PlayPause", "PrevTrack", "NextTrack". Her ismin karşılık gelen bir işlevi vardır (adından hangisi olduğu açıktır). Kayıt defterine yazılan anahtar kodu bir çift kelimedir (4 bayt) iki bölümden oluşur: üstteki iki bayt, basma değiştiriciyi saklar (MOD_ALT, MOD_CTRL, MOD_SHIFT, MOD_WIN bayrakları) ve sanal anahtar kodunun kendisi iki kısımda yazılır. en az anlamlı bayt. Eklenti, yükleme sırasında ve ayarlar penceresindeki "Evet" düğmesini tıkladıktan sonra anahtar kodların listesini okur. Bu pencerenin kendisi basit bir MessageBox kısa bilgi eklenti hakkında.

Hazır eklentiyi indirin

İşte mantıklı bir an geldi, böylece eklentinin dahili uygulamasının incelikleriyle ilgilenmeyenler basitçe indirebilir, kurabilir ve kullanabilir. Bu üzerinde yapılabilir. Ayrıca birde şu var detaylı talimatlar kurulum prosedürünün bir açıklaması ile kullanıcı.

uygulama yöntemi

Programın ilk versiyonu, sisteme global bir kancanın kurulumunu kullandı. İyi çalıştı, ancak klavye filtresi bir nedenden dolayı işlenen anahtarın uygulamaya daha fazla aktarılmasını engellemedi, bu alfabe tuşları için hoş değildi :) Sonra böyle şeyler için sistem mesajları için bir filtre kullanılmasını önerdiklerini buldum, ama bu çözüm bana sistem için daha da yüklü geldi. Bu sürümde özellikle ilginç olan hiçbir şey yoktu: DLL'yi yüklerken parametreler için ortak bir bellek alanı oluşturuyoruz (çünkü DLL filtresi adres boşluklarında yürütülür). farklı süreçler), init yürütme sırasında filtrenin ayarlanması, filtre işlevi gelen anahtarları kontrol eder ve program komutlarının yürütülmesini çağırır, çık yürütüldüğünde filtre kaldırılır ve kitaplık kaldırıldığında, paylaşılan bellek serbest bırakılır. Eklentiye özgü şeyler kaldığından Yeni sürüm eklenti, eski kodu vermeyeceğim. Filtrelere ilgi olursa onlar hakkında ayrı bir yazı yazacağım, yorum yazacağım.

Yeni sürüm kısayol tuşları kullanılarak yazılmıştır. Bu yöntem bana programlamada daha basit görünüyor, ücretsiz yan etkiler işlenen anahtarın geçerli programa nüfuz etme türü ve sistem için daha az yüklü, çünkü klavye kullanımı Windows'ta kalır ve eklenti yalnızca kayıtlı tuş kombinasyonlarına basıldığında çağrılır.

Algoritmalar ve uygulama

Ortaya çıkan eklentinin blok şeması şekilde gösterilmiştir.

Basit işlevlerin kısa açıklaması:

  • Başlatma - filtrenin kurulumuna neden olur
  • Sonlandırma - filtrenin kaldırılmasını kaldırır
  • Ayarlar - düğmelerden birine basarak filtreyi kaldırıp yeniden yükleyebileceğiniz "Program hakkında" iletişim kutusunu görüntüler (bu durumda yapılandırma yeniden okunur, programı yeniden başlatmadan değiştirmenin tek yolu budur)

Şimdi anlamlı işlevler hakkında ayrıntılı olarak.

Eklenti kayıt işlevi winampGeneralPurposePlugin türünde bir yapıya bir işaretçi döndüren , bir özelliğe sahiptir: bir DLL'den dışa aktarılmalı ve ayrıca derleyicinin ada bağımsız değişkenler hakkında bilgi eklememesi için "C" stilinde bildirilmelidir. Böyle bir işlevin bildiriminde yazılacak tam "büyüler" derleyicinize bağlıdır. Visual C ++ için dış "C" __declspec (dllexport), Borland C ++ Builder için dış "C" winampGeneralPurposePlugin * __stdcall __declspec (dllexport) (iki parça arasına eklenen dönüş türünü not edin) harf harf kodlamak").

Filtreyi takmaüç aşamadan oluşur: kayıt defterinden yapılandırmanın okunması, program penceresinin işlevinin değiştirilmesi, "kısayol tuşlarının" kaydedilmesi.

Yapılandırmayı okuma zor bir şey içermez: gerekli kayıt defteri anahtarını açarız ve art arda ondan değerleri okumaya çalışırız. Açılmazsa, varsayılan değerleri yükleyin. Başarılı olursak, her eylem için anahtar kodların değerlerini sırayla okuruz. Hafızayı almamak için anahtarı kapatıyoruz.

HKEY kayıt anahtarı; if (ERROR_SUCCESS! = RegOpenKeyEx (HKEY_CURRENT_USER, SETTINGS_REG_KEY, 0, KEY_READ ve registerKey)) (için (imzasız n = 0; n)< ActionCount; ++ n) ActionList[n].KeyCode = ActionList[n].DefKeyCode; MessageBox(KeyControlPlugin.hwndParent, TEXT_NO_REGISTRY_KEYS, TEXT_PLUGIN_TITLE, MB_ICONEXCLAMATION); return true; } for(unsigned n = 0; n < ActionCount; ++ n) { DWORD value; DWORD valueSize = sizeof value; if(ERROR_SUCCESS == RegQueryValueEx(registryKey, ActionList[n].RegName, NULL, NULL, (char *)&value, &valueSize)) ActionList[n].KeyCode = value; else ActionList[n].KeyCode = 0; } RegCloseKey(registryKey);

Pencere işlevi değiştirme"Kısayol tuşlarına" basmakla ilgili mesaj tam olarak pencere işlevine geleceği ve standart olanın onlarla ne yapacağını bilmeyeceği için kullanılır. Yerine koymanın kendisi çok basittir - fonksiyonun eski işaretçisini okuruz ve SetWindowLong'a yapılan bir çağrıyla yenisini ayarlarız. "Kısayol tuşları" dışındaki tüm mesajları işlemek için eskisini kaydederiz.

OriginalWndProc = (WNDPROC) SetWindowLong (KeyControlPlugin.hwndParent, GWL_WNDPROC, (UZUN) HookWndProc);

"Kısayol tuşlarının" kaydedilmesi RegisterHotKey işlevi çağrılarak üretilir: WM_HOTKEY mesajını alacak olan pencere tanıtıcısı kendisine iletilir, uygulama içinde benzersiz bir tanımlayıcı " kısayol tuşu"(mesajda belirtilecektir, burada komut tanımlayıcısını" kısayol tuşu "tanımlayıcısı olarak kullanıyoruz), tuş değiştirici (tuşa tek başına mı yoksa Ctrl, Alt, Shift, Win ile mi basıldığını belirleyen bayraklar) ve sanal anahtar kodunun kendisi Fonksiyonun kendisi MSDN'de ayrıntılı olarak açıklanmıştır, bu yüzden benim kodumdan örnek yeterli olacaktır.Anahtar değiştiricilerin ayarları için kayıt defterinde ayrı anahtarlar olmaması için bunları üstteki iki baytta saklıyorum. anahtar kodu ve sanal anahtar kodunun kendisi - iki alt kodda.

Bool IsOk = doğru; for (işaretsiz n = 0; n< ActionCount; ++ n) { if(ActionList[n].KeyCode) { IsOk &= (RegisterHotKey(KeyControlPlugin.hwndParent, ActionList[n].Id, ActionList[n].KeyCode >> 16, ActionList [n] .KeyCode & 0xFFFF)! = 0); ))

Filtreyi çıkarma iki adımdan oluşur: pencere işlevini geri yüklemek ve kısayol tuşlarının kaydını silmek.

Pencere işlevini geri yükle ayarlarla aynı şekilde gerçekleştirilirse, SetWindowLong işlevine yalnızca orijinal pencere işlevine önceden kaydedilmiş işaretçi iletilir.

SetWindowLong (KeyControlPlugin.hwndParent, GWL_WNDPROC, (UZUN) OriginalWndProc);

Kısayol Tuşlarının Kaydını Silme olası tüm tanımlayıcılar için UnregisterHotKey çağrılarak gerçekleştirilir, böylece hangilerinin ayarlanıp hangilerinin ayarlanmadığını düşünmek zorunda kalmazsınız. Parametreler yine sezgiseldir: tuşların önceden kaydedildiği pencerenin tutacağı ve "kısayol tuşu" tanımlayıcısı. MSDN'deki işlevin açıklaması.

için (işaretsiz n = 0; n< ActionCount; ++ n) UnregisterHotKey(KeyControlPlugin.hwndParent, ActionList[n].Id);

Düşünmek pencere işlevi... Görevi, WM_HOTKEY mesajlarını "bizim" kısayol tuşu kimliklerimizle işlemek ve diğer tüm mesajlar için orijinal pencere işlevini çağırmaktır. Çözüm oldukça basit: program penceresi işlevine belirli bir düğmeye basılmasıyla ilgili WM_COMMAND mesajını gönderiyoruz. WINAMP_BUTTON1 .. WINAMP_BUTTON5 sabitleri, "önceki parça"dan "sonraki parçaya" kadar WinAmp panelindeki sırayla tam olarak aynı sırada düğme tanımlayıcılarıdır.

LRESULT CALLBACK HookWndProc (HWND hwnd, UINT mesajı, WPARAM wParam, LPARAM lParam) (if (mesaj == WM_HOTKEY) (HWND winAmpWnd = KeyControlPlugin.hwndParent; geçiş (wParam) (durum WA_ACTION_STOP4: Mesajı WMP:WMADWMPA-WMAD break; , WINAMP_BUTTON2, 0); ara; durum WA_ACTION_PAUSE: PostMessage (winAmpWnd, WM_COMMAND, WINAMP_BUTTON3, 0); ara; durum WA_ACTION_BUTTON3, 0); ara; durum WA_ACTION_BUTTON3, 0); durum WA_ACTION_PUTTON3, 0); kesinti; durum WA_ACTION_PUTTON_, PLAY = PLAY) WINAMP_BUTTON3: WINAMP_BUTTON2, 0); break; case WA_ACTION_PREV_TRACK: PostMessage (winAmpWnd, WM_COMMAND, WINAMP_BUTTON1, 0); break; case WA_ACTION_NEXT_TRACK: PostMessage; varsayılan: return CallWindowParamW; 1;) CallWindowProc'u döndür (OriginalWndProc, hwnd, message, wParam, lParam);)

WA_ACTION_PLAY_PAUSE kısayol tuşunun işlenmesine dikkat edin. Önce SendMessage (winAmpWnd, WM_WA_IPC, 0, IPC_ISPLAYING) çağrılır - bu, oynatıcının durumu için bir istektir. İşlev, müzik şimdi çalıyorsa 1, 3 - "duraklatılırsa", 0 - oynatma tamamen durdurulursa 0 döndürür. 1 döndürdüysek duraklıyoruz, başka bir şey varsa oynatmaya başlıyoruz.

Bu kısa özetin kapsamı dışında, hata işleme, çeşitli servis mesajlarının çıktısı ve algoritmanın uygulanmasını programdan ayıran diğer incelikler kaldı, ancak bunları kendi projenizde kendiniz uygulayabilirsiniz. Umarım bu makaleyi okuduktan sonra, WinAmp için eklentiler geliştirmek için faydalı tekniklerle programlama bilginizi tazelemişsinizdir, en azından şimdi nereden başlayacağınızı biliyorsunuzdur.