AutoPlay Media Studio – BASS.dll ile Anlık Tempo ve Hız Kontrolü
AutoPlay Media Studio'nun standart Audio nesnesi ile bir müzik dosyasının oynatma hızını gerçek zamanlı olarak değiştirmek mümkün değildir. Bunun için harici bir ses kütüphanesi kullanılabilir.
Bu yöntemde
BASS.dll ve tempo efektleri için
bass_fx.dll kullanılarak, bir Slider üzerinden müzik çalarken hızın değiştirilmesi hedeflenmektedir.
1. Gerekli DLL Dosyaları
Proje içerisinde örneğin şu klasör yapısı kullanılabilir:
Kod:
AutoPlay
Docs
bass.dll
bass_fx.dll
muzik.mp3
DLL dosyalarının kullandığınız BASS/BASS_FX sürümüyle uyumlu olması gerekir.
2. Çalışma Mantığı
Sistem genel olarak şu şekilde çalışır:
[]BASS ses sistemi başlatılır.
[]Müzik dosyası BASS üzerinden açılır.
[]Açılan stream, BASS_FX tempo stream'ine dönüştürülür.
[]Tempo stream'i oynatılır.
- Slider hareket ettirildiğinde tempo değeri değiştirilir.
Böylece müzik durdurulup başka bir dosya açılmadan, çalma sırasında hız değiştirilebilir.
3. Slider Ayarı
Örneğin Slider1 nesnesinin minimum ve maksimum değerlerini:
Kod:
Minimum : 50
Maximum : 150
Normal : 100
olarak ayarlayabiliriz.
Bu durumda:
[]50 → %50
[]75 → %75
[]100 → Normal hız
[]125 → %125
- 150 → %150
şeklinde bir kullanıcı arayüzü oluşturulabilir.
4. Tempo Değerinin Hesaplanması
Slider'ın mevcut değerini almak için:
Kod:
local slider_val = Slider.GetPos("Slider1");
-- 100 = normal hız
-- 100'ün altı = yavaşlatma
-- 100'ün üstü = hızlandırma
local tempo = slider_val - 100;
Paragraph.SetText("Label_Speed", "Hız: %" .. slider_val);
Örneğin Slider değeri 80 ise tempo değişimi -20, 100 ise 0, 120 ise +20 olacaktır.
5. BASS_FX ile Tempo Değişimi
BASS_FX tarafında tempo işlemi, normal BASS stream'i üzerinde doğrudan yapılmaz. Önce stream'in BASS_FX tempo stream'ine dönüştürülmesi gerekir.
Genel çalışma mantığı:
Kod:
-- Normal BASS stream
my_stream = ...
-- BASS_FX tempo stream
my_tempo_stream = ...
Daha sonra Slider değerine göre tempo niteliği değiştirilir:
Kod:
local slider_val = Slider.GetPos("Slider1");
local tempo = slider_val - 100;
-- BASS_FX tempo özelliğine tempo değerini gönder
-- BASS_ChannelSetAttribute(...)
Buradaki BASS_ChannelSetAttribute() çağrısının kesin DLL parametreleri, kullanılan BASS/BASS_FX sürümüne ve AMS içerisindeki DLL.CallFunction tanımına göre hazırlanmalıdır.
6. Önemli Nokta
Burada dikkat edilmesi gereken en önemli konu, BASS_FX'in normal BASS stream'inden farklı olarak
tempo stream'i oluşturmasıdır.
Bu nedenle aşağıdaki mantık doğrudan uygulanmamalıdır:
Kod:
BASS_ChannelSetAttribute(normal_stream, BASS_ATTRIB_TEMPO, tempo);
Tempo işlemi için önce BASS_FX tarafından oluşturulan tempo stream kullanılmalıdır.
Ayrıca BASS_ATTRIB_TEMPO sabiti ve DLL fonksiyonlarının parametre tipleri, kullanılan BASS_FX sürümünün belgelerine göre tanımlanmalıdır.
7. Sonuç
Bu yöntem hazır farklı hızlardaki MP3 dosyalarını değiştirmekten farklıdır. Kullanıcı müzik çalarken Slider'ı hareket ettirerek:
[]Müziği yavaşlatabilir,
[]Normal hıza getirebilir,
- Müziği hızlandırabilir.
Yani amaçlanan sistem:
Kod:
Slider
↓
Tempo değeri
↓
BASS_FX Tempo Stream
↓
Anlık hız değişimi
↓
Hoparlör
şeklinde çalışır.
Not: Tempo ile pitch aynı şey değildir. Tempo/hız değiştirilirken sesin tonunun (pitch) sabit kalması isteniyorsa BASS_FX'in tempo özellikleri kullanılabilir. Pitch'in ayrıca değiştirilmesi isteniyorsa bunun için ayrı BASS_FX özelliklerinin kullanılması gerekir.
Bu nedenle AutoPlay Media Studio'da gerçek zamanlı müzik hız kontrolü yapmak isteyenler için
BASS.dll + bass_fx.dll yaklaşımı, hazır farklı hızlarda MP3 kullanma yöntemine göre çok daha esnek bir çözüm sunabilir.