Python ile dijital ses dünyasını keşfedin. Bu rehber, ses analizi, sentezi, Librosa, SciPy gibi kütüphaneler ve pratik kod örneklerini kapsar.
Python Ses İşleme: Ses Analizi ve Sentezine Derinlemesine Bir Bakış
Ses, insan deneyiminin temel bir parçasıdır. Sevdiğimiz müzikten, tanıdığımız seslere, çevremizdeki ortam gürültülerine kadar, ses verileri zengin, karmaşık ve derinden anlamlıdır. Dijital çağda, bu verileri işleme ve anlama yeteneği; eğlence, yapay zeka ve bilimsel araştırma gibi çeşitli alanlarda kritik bir beceri haline gelmiştir. Geliştiriciler ve veri bilimcileri için Python, Sayısal Sinyal İşleme (DSP) için güçlü bir kütüphane ekosistemi sunarak bu görev için bir güç merkezi olarak ortaya çıkmıştır.
Ses işlemenin kalbinde iki tamamlayıcı disiplin yatar: ses analizi ve ses sentezi. Onlar dijital sesin yin ve yang'ıdır:
- Analiz, ayrıştırma sürecidir. Mevcut bir ses sinyalini alıp anlamlı bilgi çıkarmak için onu parçalara ayırmayı içerir. "Bu ses neyden oluşuyor?" sorusunu yanıtlar.
- Sentez, inşa etme sürecidir. Matematiksel modeller ve algoritmalar kullanarak sıfırdan bir ses sinyali oluşturmayı içerir. "Bu sesi nasıl oluşturabilirim?" sorusunu yanıtlar.
Bu kapsamlı rehber sizi her iki dünyada da bir yolculuğa çıkaracak. Teorik temelleri keşfedecek, temel Python araçlarını tanıtacak ve kendinizin çalıştırıp uyarlayabileceğiniz pratik kod örneklerini inceleyeceğiz. İster ses özelliklerini analiz etmek isteyen bir veri bilimci, ister algoritmik bestecilikle ilgilenen bir müzisyen, ister bir sonraki harika ses uygulamasını geliştiren bir geliştirici olun, bu makale size başlamak için ihtiyacınız olan temeli sağlayacaktır.
Bölüm 1: Ayrıştırma Sanatı: Python ile Ses Analizi
Ses analizi, bir dedektif olmaya benzer. Size bir delil—bir ses dosyası—verilir ve göreviniz, sırlarını ortaya çıkarmak için araçlarınızı kullanmaktır. Hangi notalar çalındı? Kim konuşuyordu? Ses ne tür bir ortamda kaydedildi? Ses analizinin bize yanıtlamakta yardımcı olduğu sorular bunlardır.
Dijital Sesin Temel Kavramları
Sesi analiz etmeden önce, bir bilgisayarda nasıl temsil edildiğini anlamamız gerekir. Analog bir ses dalgası sürekli bir sinyaldir. Dijital olarak depolamak için, örnekleme adı verilen bir süreçle dönüştürmeliyiz.
- Örnekleme Hızı: Bu, saniyede alınan ses sinyali örneklerinin (anlık görüntülerinin) sayısıdır. Hertz (Hz) cinsinden ölçülür. Müzik için yaygın bir örnekleme hızı 44.100 Hz (44.1 kHz)'dir, bu da saniyede sesin genliğinin 44.100 anlık görüntüsünün alındığı anlamına gelir.
- Bit Derinliği: Bu, her bir örneğin çözünürlüğünü belirler. Daha yüksek bir bit derinliği, daha geniş bir dinamik aralığa (en sessiz ve en gürültülü sesler arasındaki fark) olanak tanır. CD'ler için 16 bit derinliği standarttır.
Bu sürecin sonucu, dalga biçimi olarak temsil edebileceğimiz bir sayı dizisidir.
Dalga Biçimi: Genlik ve Zaman
Sesin en temel temsili dalga biçimidir. Genliğin (gürlük) zamana karşı iki boyutlu bir grafiğidir. Bir dalga biçimine bakmak, sesin dinamikleri hakkında genel bir fikir verebilir, ancak tonal içeriği hakkında pek bir şey söylemez.
Spektrum: Frekans ve Perde
Bir sesin tonal niteliklerini anlamak için, zaman alanından (dalga biçimi) frekans alanına geçmemiz gerekir. Bu, Hızlı Fourier Dönüşümü (FFT) adı verilen bir algoritma kullanılarak elde edilir. FFT, dalga biçiminin bir bölümünü, her biri belirli bir frekans ve genliğe sahip bileşen sinüs dalgalarına ayırır. Sonuç, genliğin frekansa karşı bir grafiği olan bir spektrumdur. Bu grafik, seste hangi frekansların (veya perdelerin) bulunduğunu ve ne kadar güçlü olduklarını ortaya koyar.
Tını: Sesin "Rengi"
Bir piyano ve bir gitar aynı notayı (aynı temel frekansı) çalarken neden bu kadar farklı ses çıkarır? Cevap tınıdır ("tam-ber" olarak telaffuz edilir). Tını, harmonikler veya üst tonlar—temel frekansın tam sayı katları olan ek frekansların—varlığı ve yoğunluğu tarafından belirlenir. Bu harmoniklerin benzersiz kombinasyonu, bir enstrümana karakteristik ses rengini veren şeydir.
Ses Analizi İçin Temel Python Kütüphaneleri
Python'ın gücü, kapsamlı üçüncü taraf kütüphane koleksiyonunda yatar. Ses analizi için birkaçı öne çıkıyor.
- Librosa: Bu, Python'daki ses ve müzik analizi için önde gelen kütüphanedir. Ses yükleme, görselleştirme ve tempo, perde ve kromatik temsil gibi çok çeşitli üst düzey özellikleri çıkarma için geniş bir araç takımı sağlar.
- SciPy: Bilimsel Python yığınının temel bir kütüphanesi olan SciPy, güçlü bir `signal` modülü içerir. Filtreleme, Fourier dönüşümleri ve spektrogramlarla çalışma gibi alt düzey DSP görevleri için mükemmeldir. Ayrıca `.wav` dosyalarını okumak ve yazmak için basit bir yol sağlar.
- pydub: Üst düzey, basit manipülasyonlar için `pydub` harikadır. Sesleri dilimlemenize, birleştirmenize, üst üste bindirmenize ve çok sezgisel bir API ile basit efektler uygulamanıza olanak tanır. Ön işleme görevleri için harikadır.
- NumPy & Matplotlib: Ses odaklı olmasalar da, bunlar vazgeçilmezdir. NumPy, ses verilerini tutmak için temel veri yapısını (N boyutlu dizi) sağlarken, Matplotlib çizim ve görselleştirme için standarttır.
Pratik Analiz: Dalga Biçimlerinden İçgörülere
Hadi işe koyulalım. Öncelikle, gerekli kütüphanelerin kurulu olduğundan emin olun:
pip install librosa matplotlib numpy scipy
Çalışmak için bir ses dosyasına da ihtiyacınız olacak. Bu örnekler için, `audio_sample.wav` adında bir dosyanız olduğunu varsayacağız.
Ses Yükleme ve Görselleştirme
İlk adımımız her zaman ses verilerini bir NumPy dizisine yüklemektir. Librosa bunu inanılmaz derecede basit hale getirir.
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# Define the path to your audio file
file_path = 'audio_sample.wav'
# Load the audio file
# y is the audio time series (a numpy array)
# sr is the sampling rate
y, sr = librosa.load(file_path)
# Plot the waveform
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr)
plt.title('Audio Waveform')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()
Bu kod, ses dosyanızı yükler ve dalga biçimini görüntüler. Kaydın zaman içinde daha yüksek ve daha sessiz kısımlarını hemen görebilirsiniz.
Frekans İçeriğini Açma: Spektrogram
Bir dalga biçimi yararlıdır, ancak bir spektrogram bize çok daha zengin bir görünüm sunar. Bir spektrogram, bir sinyalin spektrumunu zamanla nasıl değiştiğini görselleştirir. Yatay eksen zamanı, dikey eksen frekansı ve renk, belirli bir zamanda belirli bir frekansın genliğini temsil eder.
# Compute the Short-Time Fourier Transform (STFT)
D = librosa.stft(y)
# Convert amplitude to decibels (a more intuitive scale)
DB = librosa.amplitude_to_db(np.abs(D), ref=np.max)
# Plot the spectrogram
plt.figure(figsize=(14, 5))
librosa.display.specshow(DB, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-Frequency Power Spectrogram')
plt.show()
Bir spektrogram ile, bir müzik parçasındaki notaları, bir kişinin konuşmasındaki formantları veya bir makinenin uğultusunun karakteristik frekans imzasını kelimenin tam anlamıyla görebilirsiniz.
Anlamlı Özellikleri Çıkarma
Genellikle, karmaşık ses sinyalini temel özelliklerini tanımlayan birkaç sayıya veya vektöre indirgemek isteriz. Bunlara özellikler denir ve ses için makine öğrenimi modellerinin can damarıdırlar.
Sıfır Geçiş Hızı (ZCR): Bu, sinyalin işaretini (pozitiften negatife veya tam tersi) değiştirdiği orandır. Yüksek bir ZCR genellikle gürültülü veya vurmalı sesleri (zil veya statik gibi) gösterirken, düşük bir ZCR tonal, melodik sesler (flüt veya söylenen bir ünlü gibi) için tipiktir.
zcr = librosa.feature.zero_crossing_rate(y)
print(f"Average Zero-Crossing Rate: {np.mean(zcr)}")
Spektral Merkez: Bu özellik, spektrumun "kütle merkezini" temsil eder. Bir sesin parlaklığının bir ölçüsüdür. Yüksek bir spektral merkez, daha yüksek frekans içeriğine sahip bir sesi (trompet gibi) gösterirken, düşük bir merkez daha koyu bir sesi (çello gibi) gösterir.
spectral_centroids = librosa.feature.spectral_centroid(y=y, sr=sr)[0]
# Plotting the spectral centroid over time
frames = range(len(spectral_centroids))
t = librosa.frames_to_time(frames, sr=sr)
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr, alpha=0.4)
plt.plot(t, spectral_centroids, color='r') # Display spectral centroid in red
plt.title('Spectral Centroid')
plt.show()
Mel-Frekans Sepstral Katsayıları (MFCC'ler): Bu, özellikle konuşma tanıma ve müzik türü sınıflandırması gibi ses sınıflandırma görevleri için tartışmasız en önemli özelliktir. MFCC'ler, frekansın doğrusal olmayan bir Mel ölçeğinde logaritmik güç spektrumunun doğrusal bir kosinüs dönüşümüne dayanan, bir sesin kısa vadeli güç spektrumunun kompakt bir temsilidir. Bu uzun bir ifade olsa da, temel fikir, insan işitsel algısını modellemek için tasarlandıkları ve bu nedenle insan benzeri anlayışın istendiği görevler için oldukça etkili olduklarıdır.
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# Visualize the MFCCs
plt.figure(figsize=(14, 5))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCCs')
plt.show()
Perde ve Temponun Algılanması
Librosa ayrıca müziğe özgü analizler için üst düzey işlevler sunar.
Tempo ve Vuruş Takibi: Global tempoyu (dakikadaki vuruş sayısı cinsinden) kolayca tahmin edebilir ve sesdeki vuruşların konumlarını belirleyebiliriz.
# Estimate tempo and find beat frames
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print(f'Estimated tempo: {tempo:.2f} beats per minute')
# Convert beat frames to time
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
Bu sadece buzdağının görünen kısmı. Librosa, ritim, armoni ve tonallığı analiz etmek için onlarca özellik sunarak, Müzik Bilgi Erişimi (MIR) için inanılmaz derecede güçlü bir araçtır.
Bölüm 2: Yaratım Sanatı: Python ile Ses Sentezi
Analiz, bir şeyleri parçalara ayırmakla ilgiliyse, sentez onları sıfırdan inşa etmekle ilgilidir. Python ile, sadece birkaç satır kodla daha önce hiç var olmamış sesler yaratabilen dijital bir luthier olabilirsiniz. Temel fikir, çalındığında tasarladığınız ses dalgasını oluşturan bir NumPy değerleri dizisi üretmektir.
Temel Sentez Teknikleri
Ses sentezlemenin birçok yolu vardır, her birinin kendine özgü bir karakteri vardır. İşte birkaç temel yaklaşım.
- Eklemeli Sentez: En basit ve en sezgisel yöntem. Fourier teoremini temel alır; herhangi bir karmaşık periyodik dalga formunun basit sinüs dalgalarının (harmoniklerin) toplamı olarak temsil edilebileceğini belirtir. Farklı frekans, genlik ve fazlara sahip sinüs dalgalarını ekleyerek inanılmaz derecede zengin ve karmaşık tınılar oluşturabilirsiniz.
- Çıkarımlı Sentez: Bu, eklemelinin tam tersidir. Harmonik açıdan zengin bir dalga formu (kare dalga veya testere dişi dalga gibi) ile başlarsınız ve ardından frekansları oyarak veya çıkararak filtreler kullanırsınız. Bu, çoğu klasik analog sentezleyicinin temelidir.
- Frekans Modülasyonu (FM) Sentezi: Bir osilatörün ("taşıyıcı") frekansının başka bir osilatörün ("modülatör") çıkışı tarafından modüle edildiği oldukça verimli ve güçlü bir tekniktir. Bu, çok karmaşık, dinamik ve genellikle metalik veya zil benzeri sesler oluşturabilir.
Ses Sentezi İçin Temel Python Kütüphaneleri
Sentez için araç setimiz daha basit ama daha az güçlü değildir.
- NumPy: Bu mutlak çekirdektir. Ses dalgalarımızı temsil eden sayı dizilerini oluşturmak ve manipüle etmek için NumPy'ı kullanacağız. Matematiksel işlevleri, sinüs, kare ve üçgen dalgalar gibi dalga formları oluşturmak için çok önemlidir.
- SciPy: NumPy dizilerimizi herhangi bir medya oynatıcı tarafından çalınabilen standart `.wav` ses dosyalarına kaydetmek için SciPy'ın `scipy.io.wavfile.write` işlevini kullanacağız.
Pratik Sentez: Koddan Ses Yaratma
Ses yaratmaya başlayalım. SciPy ve NumPy'ın hazır olduğundan emin olun.
Saf Bir Ton Oluşturma (Sinüs Dalgası)
Yaratabileceğimiz en basit ses, belirli bir frekansta sadece bir sinüs dalgası olan saf bir tondur.
import numpy as np
from scipy.io.wavfile import write
# --- Synthesis Parameters ---
sr = 44100 # Sample rate
duration = 3.0 # seconds
frequency = 440.0 # Hz (A4 note)
# Generate a time array
# This creates a sequence of numbers from 0 to 'duration', with 'sr' points per second
t = np.linspace(0., duration, int(sr * duration), endpoint=False)
# Generate the sine wave
# The formula for a sine wave is: amplitude * sin(2 * pi * frequency * time)
amplitude = np.iinfo(np.int16).max * 0.5 # Use half of the max 16-bit integer value
data = amplitude * np.sin(2. * np.pi * frequency * t)
# Convert to 16-bit data and write to a .wav file
write('sine_wave_440hz.wav', sr, data.astype(np.int16))
print("Generated 'sine_wave_440hz.wav' successfully.")
Bu kodu çalıştırırsanız, aynı dizinde bir `.wav` dosyası oluşturacaktır. Açın ve mükemmel bir A4 notası duyacaksınız!
Zarflarla Sesi Şekillendirme (ADSR)
Saf tonumuz biraz sıkıcı; aniden başlıyor ve aniden duruyor. Gerçek dünya seslerinin dinamik bir şekli vardır. Bunu bir zarf kullanarak kontrol edebiliriz. En yaygın tür ADSR zarfıdır:
- Atak (Attack): Sesin sıfırdan zirve seviyesine yükselmesi için geçen süre.
- Çürüme (Decay): Sesin zirveden sürdürme seviyesine düşmesi için geçen süre.
- Sürdürme (Sustain): Notalar aktifken sesin tutulduğu seviye.
- Bırakma (Release): Notalar bırakıldıktan sonra sesin sıfıra düşmesi için geçen süre.
Sinüs dalgamıza basit bir doğrusal atak ve bırakma uygulayalım.
# --- Envelope Parameters ---
attack_time = 0.1 # seconds
release_time = 0.5 # seconds
# Create the envelope
attack_samples = int(sr * attack_time)
release_samples = int(sr * release_time)
sustain_samples = len(t) - attack_samples - release_samples
attack = np.linspace(0, 1, attack_samples)
# For simplicity, we'll skip decay and make sustain level 1
sustain = np.ones(sustain_samples)
release = np.linspace(1, 0, release_samples)
envelope = np.concatenate([attack, sustain, release])
# Apply the envelope to our sine wave data
enveloped_data = data * envelope
# Write the new sound to a file
write('enveloped_sine_wave.wav', sr, enveloped_data.astype(np.int16))
print("Generated 'enveloped_sine_wave.wav' successfully.")
Bu yeni ses sorunsuz bir şekilde yükselip nazikçe düşecek, bu da onu çok daha müzikal ve doğal hale getirecektir.
Eklemeli Sentez ile Karmaşıklık Oluşturma
Şimdi, harmonikler ekleyerek daha zengin bir tını oluşturalım. Örneğin bir kare dalga, bir temel frekanstan ve tüm tek harmoniklerinden, genlikleri orantılı olarak azalarak oluşur. Bir tanesini yaklaşık olarak oluşturalım.
# --- Additive Synthesis ---
fundamental_freq = 220.0 # A3 note
# Start with the fundamental tone
final_wave = np.sin(2. * np.pi * fundamental_freq * t)
# Add odd harmonics
num_harmonics = 10
for i in range(3, num_harmonics * 2, 2):
harmonic_freq = fundamental_freq * i
harmonic_amplitude = 1.0 / i
final_wave += harmonic_amplitude * np.sin(2. * np.pi * harmonic_freq * t)
# Normalize the wave to prevent clipping (amplitude > 1)
final_wave = final_wave / np.max(np.abs(final_wave))
# Apply our envelope from before
rich_sound_data = (amplitude * final_wave) * envelope
# Write to file
write('additive_synthesis_sound.wav', sr, rich_sound_data.astype(np.int16))
print("Generated 'additive_synthesis_sound.wav' successfully.")
Bu yeni dosyayı dinleyin. Basit sinüs dalgasından çok daha zengin ve karmaşık ses çıkaracak, kare dalganın vızıldayan sesine doğru eğilim gösterecektir. Az önce eklemeli sentez gerçekleştirdiniz!
Bölüm 3: Ortak Yaşam İlişkisi: Analiz ve Sentezin Birleştiği Nokta
Analiz ve sentezi ayrı konular olarak ele almış olsak da, gerçek güçleri birlikte kullanıldığında ortaya çıkar. Anlamanın yaratmayı bilgilendirdiği ve yaratmanın anlamak için yeni materyal sağladığı bir geri bildirim döngüsü oluştururlar.
Dünyalar Arasındaki Köprü: Yeniden Sentez (Resynthesis)
İkisinin buluştuğu en heyecan verici alanlardan biri yeniden sentezdir (resynthesis). Süreç şu şekilde işler:
- Analiz Et: Gerçek dünya sesi alın (örneğin, bir keman kaydı) ve onun temel akustik özelliklerini—harmonik içeriğini, perde dalgalanmalarını, genlik zarfını—çıkarın.
- Model Oluştur: Bu özelliklere dayalı matematiksel bir model oluşturun.
- Sentezle: Sentez motorunuzu kullanarak bu modele dayalı yeni bir ses oluşturun.
Bu, son derece gerçekçi sentetik enstrümanlar oluşturmanıza veya bir sesin özelliklerini alıp başka birine uygulamanıza (örneğin, insan sesinin spektral zarfını bir gitara uygulayarak bir gitarın "konuşuyormuş" gibi ses çıkarmasını sağlamak) olanak tanır.
Ses Efektleri Oluşturma
Neredeyse tüm dijital ses efektleri—yankı, gecikme, bozulma, koro—analiz ve sentezin bir karışımıdır.
- Gecikme/Yankı (Delay/Echo): Bu basit bir süreçtir. Sistem gelen sesi analiz eder, bir arabellekte (bir bellek parçası) saklar ve ardından daha sonraki bir zamanda, genellikle azaltılmış bir genlikle, çıkış akışına geri sentezler.
- Bozulma (Distortion): Bu efekt, giriş sinyalinin genliğini analiz eder. Belirli bir eşiği aşarsa, dalga biçimini kırpan veya değiştiren, zengin yeni harmonikler ekleyen matematiksel bir işlev ("waveshaper") uygulayarak yeni bir çıktı sentezler.
- Yankı (Reverb): Bu, fiziksel bir alanın sesini simüle eder. Gerçek bir odanın akustik özelliklerinin analizine dayanarak modellenen binlerce küçük, bozulan yankının (yansımaların) karmaşık bir sentez sürecidir.
Bu Sinerjinin Gerçek Dünya Uygulamaları
Analiz ve sentez arasındaki etkileşim, sektör genelinde yeniliği yönlendirir:
- Konuşma Teknolojisi: Metin-Konuşma (TTS) sistemleri, genellikle çok miktarda kaydedilmiş insan konuşmasının derinlemesine analiziyle eğitilmiş, insan benzeri konuşmayı sentezler. Tersine, Otomatik Konuşma Tanıma (ASR) sistemleri, bir kullanıcının sesini metne dönüştürmek için analiz eder.
- Müzik Bilgi Erişimi (MIR): Spotify gibi sistemler, müzik kataloglarının derinlemesine analizini kullanarak şarkıların özelliklerini (tempo, tür, ruh hali) anlar. Bu analiz daha sonra yeni çalma listeleri sentezlemek veya müzik önermek için kullanılabilir.
- Üretken Sanat ve Müzik: Modern yapay zeka modelleri, büyük müzik veya ses veri kümelerini analiz edebilir ve ardından aynı tarzda tamamen yeni, orijinal parçalar sentezleyebilir. Bu, analiz-sonra-sentez paradigmasının doğrudan bir uygulamasıdır.
- Oyun Sesi: Gelişmiş oyun ses motorları sesleri gerçek zamanlı olarak sentezler. Oyunun fizik motorunu (örneğin, bir arabanın hızı) analiz edebilir ve bu parametreleri karşılık gelen bir motor sesi sentezlemek için kullanabilir, böylece mükemmel bir şekilde duyarlı ve dinamik bir ses deneyimi yaratabilir.
Sonuç: Dijital Seste Yolculuğunuz
Ayrıştırmadan inşaata, sesi anlamaktan yaratmaya doğru bir yolculuk yaptık. Ses analizinin derinlemesine dinleme, sesin geçici niteliklerini nicelendirme ve onları verilere dönüştürme araçlarını sağladığını gördük. Ayrıca ses sentezinin, matematiksel mantıktan başka hiçbir şey olmadan yeni ses dünyaları inşa etmek için bize bir sonik renk paleti sunduğunu da gördük.
Temel çıkarım, bunların karşıt güçler değil, aynı madalyonun iki yüzü olduğudur. En iyi ses uygulamaları, en derinlemesine araştırmalar ve en yaratıcı sanatsal girişimler genellikle bu iki alanın kesişim noktasında yer alır. Analiz yoluyla çıkardığımız özellikler, sentezleyicilerimiz için parametreler haline gelir. Sentezleyicilerle yarattığımız sesler, analiz modellerimiz için veri haline gelir.
Python ve Librosa, SciPy ve NumPy gibi inanılmaz kütüphane ekosistemi sayesinde, bu büyüleyici dünyayı keşfetmek için giriş engeli hiç bu kadar düşük olmamıştı. Bu makaledeki örnekler sadece bir başlangıç noktasıdır. Gerçek heyecan, bu teknikleri birleştirmeye, birinin çıktısını diğerinin girdisine beslemeye ve sesin doğası hakkında kendi sorularınızı sormaya başladığınızda başlar.
Öyleyse, ilginizi çeken bir sesi yükleyin. Spektrumunu analiz edin. Onu taklit eden bir ses sentezlemeye çalışın. Binlerce sesin yolculuğu, tek bir kod satırı ile başlar.