This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold’un ses sistemi basit ama güçlüdür. Bilmeniz gereken yalnızca iki kavram vardır:
sound_fx grubu oluşturulabilir ve bu gruba ait herhangi bir ses, basit bir işlev çağrısıyla kısılabilir.Ses bileşenlerinin örnekleri yalnızca bir oyun nesnesi (game object) içinde yerinde oluşturulabilir. Yeni bir oyun nesnesi oluşturun, üzerine sağ tıklayıp Add Component ▸ Sound seçeneğini seçin ve OK düğmesine basın.

Oluşturulan bileşenin ayarlanması gereken bir dizi özelliği vardır:

master grubuna atanır.Bir ses bileşenini doğru şekilde ayarladığınızda, sound.play() işlevini çağırarak sesini oynatmasını sağlayabilirsiniz:
sound.play("go#sound", {delay = 1, gain = 0.5, pan = -1.0, speed = 1.25})
Ses bileşeninin ait olduğu oyun nesnesi silinse bile ses oynatılmaya devam eder. Sesi durdurmak için sound.stop() işlevini çağırabilirsiniz (aşağıya bakın).
Bileşene gönderilen her ileti, kullanılabilir ses arabelleği dolana ve motor konsola hatalar yazdırana kadar sesin başka bir örneğini oynatmasına neden olur. Ses oynatma aralığını sınırlayan (gating) ve sesleri gruplayan bir mekanizma uygulamanız önerilir.
Bir sesin oynatılmasını durdurmak istiyorsanız sound.stop() işlevini çağırabilirsiniz:
sound.stop("go#sound")

Ses sisteminde 4 kazanç düzeyi vardır:
sound.play() çağrısıyla başlatırken veya oynatılan ses örneğinin (voice) kazancını sound.set_gain() çağrısıyla değiştirirken ayarlanan kazanç.sound.set_group_gain() işlev çağrısıyla ayarlanan kazanç.master grubunda ayarlanan kazanç. Bu değer, sound.set_group_gain(hash("master"), gain) ile değiştirilebilir.Sound proje ayarlarında Use Linear Gain etkin olduğunda (varsayılan durum), çıkış kazancı bu dört kazancın çarpımının sonucudur. 1.0 kazancı, birim kazançtır (0 dB). Doğrusal kazanç devre dışı bırakıldığında Defold, sesleri karıştırırken doğrusal olmayan bir eğri uygular; bu nedenle aşağıdaki dört değerin doğrudan çarpımı ve desibele dönüştürülmesi, oluşan çıkış seviyesini açıklamaz.
Ses grubu adı belirtilen her ses bileşeni, o ada sahip bir ses grubuna yerleştirilir. Bir grup belirtmezseniz ses, master grubuna atanır. Ses bileşeninin grubunu açıkça master olarak da ayarlayabilirsiniz; bunun etkisi aynıdır.
Kullanılabilir tüm grupları ve dize biçimindeki adlarını almak, kazancı almak ve ayarlamak, RMS (bkz. http://en.wikipedia.org/wiki/Root_mean_square) ve tepe kazanç değerlerini almak için birkaç işlev vardır. Hedef cihazın müzik çalarının çalışıp çalışmadığını sınamanızı sağlayan bir işlev de vardır:
-- If sound playing on this iPhone/Android device, silence everything
if sound.is_music_playing() then
for i, group_hash in ipairs(sound.get_groups()) do
sound.set_group_gain(group_hash, 0)
end
end
Gruplar bir karma (hash) değeriyle tanımlanır. Dize biçimindeki ad, sound.get_group_name() ile alınabilir. Bu işlev, örneğin grup seviyelerini sınamak için kullanılan bir mikser gibi geliştirme araçlarında grup adlarını göstermek için kullanılabilir.

Yayıma yönelik derlemelerde bulunmadığından, bir ses grubunun dize değerine dayanan kod yazmanız önerilmez.
Use Linear Gain etkinken, pozitif bir kazanç değerini standart formülle desibele dönüştürün:
db = 20 \times \log \left( gain \right)
for i, group_hash in ipairs(sound.get_groups()) do
-- The name string is only available in debug. Returns "unknown_*" in release.
local name = sound.get_group_name(group_hash)
local gain = sound.get_group_gain(group_hash)
-- Convert to decibel.
local db = 20 * math.log10(gain)
-- Get RMS (gain Root Mean Square). Left and right channel separately.
local left_rms, right_rms = sound.get_rms(group_hash, 2048 / 65536.0)
left_rmsdb = 20 * math.log10(left_rms)
right_rmsdb = 20 * math.log10(right_rms)
-- Get gain peak. Left and right separately.
left_peak, right_peak = sound.get_peak(group_hash, 2048 * 10 / 65536.0)
left_peakdb = 20 * math.log10(left_peak)
right_peakdb = 20 * math.log10(right_peak)
end
-- Set the master gain to +6 dB (math.pow(10, 6/20)).
sound.set_group_gain("master", 1.995)
Defold 1.10.2, ses mikserinde uzun süredir var olan yaklaşık 3 dB’lik zayıflamayı düzeltti. Eski bir projenin ses karışımı bu zayıflamayı telafi edecek şekilde ayarlanmışsa ve yükseltme sonrasında daha yüksek ses veriyorsa, genel Sound ▸ Gain ayarını veya etkilenen grup kazançlarını yeniden ayarlayın.
Oyununuz bir olay gerçekleştiğinde aynı sesi oynatıyorsa ve bu olay sık tetikleniyorsa, aynı sesi neredeyse aynı anda iki veya daha fazla kez oynatma riski vardır. Bu durumda sesler arasında faz kayması (phase shift) oluşur ve bu da oldukça belirgin ses kusurlarına yol açabilir.

Bu sorunu çözmenin en kolay yolu, ses iletilerini filtreleyen ve belirlenen bir zaman aralığında aynı sesin birden fazla kez oynatılmasına izin vermeyen bir geçit (gate) oluşturmaktır:
-- Don't allow the same sound to be played within "gate_time" interval.
local gate_time = 0.3
function init(self)
-- Store played sound timers in a table and count down each frame until they have been
-- in the table for "gate_time" seconds. Then remove them.
self.sounds = {}
end
function update(self, dt)
-- Count down the stored timers
for k,_ in pairs(self.sounds) do
self.sounds[k] = self.sounds[k] - dt
if self.sounds[k] < 0 then
self.sounds[k] = nil
end
end
end
function on_message(self, message_id, message, sender)
if message_id == hash("play_gated_sound") then
-- Only play sounds that are not currently in the gating table.
if self.sounds[message.soundcomponent] == nil then
-- Store sound timer in table
self.sounds[message.soundcomponent] = gate_time
-- Play the sound
sound.play(message.soundcomponent, { gain = message.gain })
else
-- An attempt to play a sound was gated
print("gated " .. message.soundcomponent)
end
end
end
Geçidi kullanmak için ona bir play_gated_sound iletisi gönderip hedef ses bileşenini ve ses kazancını belirtmeniz yeterlidir. Geçit açıksa hedef ses bileşeniyle sound.play() işlevini çağırır:
msg.post("/sound_gate#script", "play_gated_sound", { soundcomponent = "/sounds#explosion1", gain = 1.0 })
Geçidin play_sound iletilerini dinlemesi işe yaramaz; bu ad Defold motoru tarafından ayrılmıştır. Ayrılmış ileti adlarını kullanırsanız beklenmedik davranışlarla karşılaşırsınız.
Sesleri çalışma sırasında çeşitli özellikler aracılığıyla değiştirebilirsiniz (kullanım için API belgelerine bakın). Aşağıdaki özellikler go.get() ve go.set() kullanılarak değiştirilebilir:
gainnumber).pannumber). Stereo konumunun -1 (sola -45 derece) ile 1 (sağa 45 derece) arasında bir değer olması gerekir.speednumber). 1.0 değeri normal hız, 0.5 yarı hız, 2.0 ise iki kat hızdır.soundhash). Kaynak yolunu kullanarak sesi resource.set_sound(path, buffer) ile değiştirebilirsiniz. Örnek:local boom = sys.load_resource("/sounds/boom.wav")
local path = go.get("#sound", "sound")
resource.set_sound(path, boom)
game.project dosyasında ses bileşenleriyle ilgili birkaç proje ayarı bulunur.
Akış yoluyla ses oynatma desteği sağlamak da mümkündür