AutoPlay Media Studio ile Müzik Hızlandırma ve Yavaşlatma – Lua Kodları

Arkadaşlar konu güncel, Autoplay Media Studio ile yapılan bir müzikçalarda müziğin temposu nasıl değiştirilir? nasıl kod yazılmalı ?
 
Merhaba Arkadaşlar
Hiç bir fikri olan yokmu, en azından bir yol gösterseniz, zaten programı pek bilmiyorum, aklıma gelen tüm işlemleri bildiğim kadarını denedim bir türlü beceremedim.
 
AutoPlay Media Studio’nun standart yerleşik ses oynatıcı nesnesi (Audio) doğrudan anlık tempo (playback speed / hız) değişimini desteklemez. Ancak bu sorunu çözmek ve slider ile müziğin hızını/temposunu dinamik olarak değiştirebilmek için iki temel yöntem izlenebilir:

  1. Harici Bir Ses Motoru / Plugin Kullanımı: AMS projelerinde DirectShow veya BASS.dll gibi gelişmiş ses kütüphaneleri (pluginleri) entegre edilerek ses frekansı ve çalma hızı (tempo) anlık olarak değiştirilebilir.
  2. Farklı Hızda Dosya Önbellekleme (Pratik Çözüm): Eğer çalınan müzik dosyası sabitse, önceden farklı hızlarda (örneğin %80, %100, %120) işlenmiş ses dosyaları hazırlayıp slider hareket ettikçe ilgili ses dosyasına geçiş yapılması sağlanabilir.
Görseldeki "Tempo" slider nesnesinin (Slider kontrolü) On Change veya On Released olayına yazılabilecek temel mantık betik yapısı şu şekildedir:

Örnek Slider (Tempo) Kod Mantığı:​

Kod:
-- Slider nesnesinden gelen değere göre tempo/hız ayarı
local slider_deger = Slider.GetPos("Slider_Tempo");

-- Slider değerine (örneğin 0 ile 100 arası) göre hız katsayısı belirleme
-- 50 normal hız (%100) kabul edilsin.
if (slider_deger < 40) then
-- Müziği yavaşlatma fonksiyonu veya yavaş dosya/frekans tetikleme
-- Audio.SetFrequency vb. plugin komutları buraya entegre edilebilir.
elseif (slider_deger > 60) then
-- Müziği hızlandırma fonksiyonu
else
-- Normal hız
end
 
Hazır dosya yöntemini AMS içinde gerçekten uygulanabilir bir sistem haline getirebiliriz. Burada en pratik yaklaşım, aynı müziğin farklı hızlarda hazırlanmış kopyalarını oluşturup slider değerine göre dosyalar arasında geçiş yapmak.
Merhaba,

Harici plugin kullanmadan yapmak istiyorsanız, en pratik yöntem aynı müziğin farklı hızlarda hazırlanmış ses dosyalarını kullanmak.

Örneğin klasör yapısını şöyle oluşturabilirsiniz:

Kod:
Muzikler
muzik_80.mp3
muzik_90.mp3
muzik_100.mp3
muzik_110.mp3
muzik_120.mp3

Burada:

  • 80 = %80 hız
  • 90 = %90 hız
  • 100 = normal hız
  • 110 = %110 hız
  • 120 = %120 hız
şeklinde düşünebilirsiniz.

1. Slider ayarı

Örneğin Slider_Tempo adında bir Slider oluşturalım.

Slider değerini 80 - 120 arasında ayarlayabilirsiniz.

2. Slider'ın On Change olayına

Kod:
local tempo = Slider.GetPos("Slider_Tempo");

local dosya = "";

if (tempo <= 84) then
dosya = "AutoPlay\Muzikler\muzik_80.mp3";

elseif (tempo <= 94) then
dosya = "AutoPlay\Muzikler\muzik_90.mp3";

elseif (tempo <= 104) then
dosya = "AutoPlay\Muzikler\muzik_100.mp3";

elseif (tempo <= 114) then
dosya = "AutoPlay\Muzikler\muzik_110.mp3";

else
dosya = "AutoPlay\Muzikler\muzik_120.mp3";
end

-- Mevcut müziği durdur
Audio.Stop(CHANNEL_BACKGROUND);

-- Yeni hızdaki müziği başlat
Audio.Play(CHANNEL_BACKGROUND, dosya, true, false);

3. Daha düzgün kullanım

Slider'ın üzerinde ayrıca mevcut değeri göstermek için bir Label kullanabilirsiniz.

Örneğin:

Label_Tempo

Kod:
local tempo = Slider.GetPos("Slider_Tempo");

Label.SetText(
"Label_Tempo",
"Tempo: %" .. tempo
);

Böylece slider hareket ettikçe kullanıcı:

Kod:
Tempo: %80
Tempo: %90
Tempo: %100
Tempo: %110
Tempo: %120

şeklinde değeri görebilir.

4. Önemli nokta

Bu yöntemde müzik gerçekten anlık olarak hızlandırılmıyor. Slider'ın konumuna göre önceden hazırlanmış farklı hızdaki dosyalardan biri seçilip oynatılıyor.

Bu nedenle çok fazla hız seçeneği oluşturursanız geçişler daha düzgün olur. Örneğin:

Kod:
%80
%85
%90
%95
%100
%105
%110
%115
%120

şeklinde 5'er puanlık dosyalar hazırlanabilir.

5. Daha kullanışlı bir yöntem

Eğer müzik sürekli çalarken slider değiştirilecekse, her değişimde müziğin baştan başlaması yerine mevcut konumu da takip etmek gerekir.

Örneğin:

Kod:
local pozisyon = Audio.GetPosition(CHANNEL_BACKGROUND);

Audio.Stop(CHANNEL_BACKGROUND);

-- Yeni hızdaki dosyayı başlat
Audio.Play(
CHANNEL_BACKGROUND,
dosya,
true,
false
);

-- Uygun noktadan devam ettir
Audio.Seek(CHANNEL_BACKGROUND, pozisyon);

Ancak burada kullanılan Audio.GetPosition ve Audio.Seek komutlarının AMS sürümünüzde desteklenip desteklenmediğini kontrol etmek gerekir.

En basit ve sorunsuz çözüm:

Eğer müziğin baştan başlaması sizin için sorun değilse ilk verdiğim yöntem yeterli olacaktır.

Eğer amaç "müzik çalıyor → slider'ı hareket ettiriyorum → aynı müzik kaldığı yerden farklı tempoda devam ediyor" şeklindeyse, o zaman projedeki mevcut müzik çalar yapısına göre kodu biraz daha farklı kurmak gerekir.
 

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.
 
Geri
Yukarı