Anda di halaman 1dari 23

PENUGASAN KUIS PENGOLAHAN DATA

PENGOLAHAN SINYAL SUARA

Dosen Pengampu :
Dr.-Ing. Awang N. I. Wardana

Asisten Dosen :
Wahyu Tri Wicaksono (20/456735/TK/50559)

Disusun Oleh :
1. Zulfa Majidah (22/497060/TK/54465)
2. Maulidya Maharani (22/502903/TK/54917)

TEKNIK FISIKA
DEPARTEMEN TEKNIK NUKLIR DAN TEKNIK FISIKA
FAKULTAS TEKNIK
UNIVERSITAS GADJAH MADA
YOGYAKARTA
2023
A. Tujuan
Mahasiswa diharapkan dapat memahami dan menerapkan
konsep-konsep dasar dalam pengolahan sinyal suara.
B. Hardware dan Software
Untuk melakukan pengolahan sinyal suara ini, kami membutuhkan
hardware dan software yang mendukung yaitu handphone sebagai alat
perekam suara serta laptop yang telah ter-install Python dengan beberapa
library yang mendukung proses pengolahan sinyal suara.
C. Prosedur
Untuk menyelesaikan pengolahan sinyal suara, dilakukan beberapa
langkah diantaranya sebagai berikut :
1. Menyiapkan peralatan perekaman suara serta lokasi perekaman yang
hening.
2. Hasil rekaman suara disimpan dalam format WAV. File suara laki-laki
dinamai “SuaraCowo.wav”, sedangkan file suara perempuan dinamai
“SuaraCewe.wav”.
3. Untuk mengolah sinyal suara pada 2 file tersebut, kami menggunakan
bantuan software yaitu Python. Kami menerapkan beberapa operasi dasar
signal processing seperti pemberian gain, filtering, dan normalisasi.
4. Menerapkan Fast Fourier Transform (FFT) pada file suara cowok. FFT
diterapkan dengan tujuan untuk mengonversi sinyal waktu ke domain
frekuensi. Kemudian dilakukan analisis spektrum frekuensi dari suara
cowok.
5. Menerapkan transformasi Z pada sinyal suara cowok untuk menganalisis
respons frekuensi sistem.
6. Langkah ke-4 dan ke-5 diulangi untuk file suara cewek.
7. Melakukan perubahan pitch dari suara cewek ke suara cowok. Begitu
juga sebaliknya, kami juga melakukan perubahan pitch dari suara cowok
ke suara cewek.
8. Dilakukan analisis hasil grafik spektrum frekuensi, respons frekuensi
dengan transformasi Z, serta kesimpulan mengenai perbedaan
karakteristik suara cowok dan cewek.
9. Membuat kesimpulan berdasarkan analisis pengolahan sinyal suara.
10. Menyusun hasil pengolahan sinyal suara ke dalam bentuk laporan
D. Hasil
● Cell 1 : Analisis Suara Cowok
# Zulfa Majidah dan Maulidya Maharani_12/08/2023
# Analisis Suara Cowo

# Mengimport library yang dibutuhkan


import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.signal import freqz

# Fungsi untuk membaca file audio


def read_audio(file_path):
fs, data = wavfile.read(file_path)
return fs, data

# Fungsi untuk menampilkan grafik audio


def plot_audio(fs, data, title):
plt.figure(figsize=(12, 4))
plt.plot(data, color='b', linestyle='-',
linewidth=1.5, alpha=0.7)
plt.xlabel('Waktu')
plt.ylabel('Amplitudo')
plt.title(title, fontsize=16, fontweight='bold')

# Menambahkan garis horizontal pada nilai nol untuk


menyorot osilasi
plt.axhline(0, color='black', linewidth=0.8,
linestyle='--', alpha=0.7)

# Menambahkan grid untuk mempermudah pembacaan grafik


plt.grid(True, linestyle='--', alpha=0.5)

# Menambahkan label sumbu x dan y dengan warna yang


berbeda
plt.xlabel('Waktu', fontsize=12, color='green')
plt.ylabel('Amplitudo', fontsize=12, color='purple')

# Menambahkan shadow di bawah kurva


plt.fill_between(range(len(data)), data,
color='skyblue', alpha=0.3)

plt.show()

# Fungsi untuk melakukan FFT


def fft_analyze(data, fs):
n = len(data)
fft_data = np.fft.fft(data)
freq = np.fft.fftfreq(n, d=1.0 / fs)
return freq, np.abs(fft_data)

# Fungsi untuk melakukan Transformasi Z


def z_transform(data, fs):
z, h = freqz([1], a=[1, -0.9], worN=len(data), fs=fs)
return h, z

# Path file audio


file_path = "SuaraCowo.wav"

# Baca file audio


fs, data = read_audio(file_path)

# Plot audio asli


plot_audio(fs, data, "Audio Asli")

# Plot FFT
freq, fft_result = fft_analyze(data, fs)
plot_audio(fs, np.abs(fft_result), "FFT")

# Plot Transformasi Z
h, z = z_transform(data, fs)
plot_audio(fs, np.abs(h), "Transformasi Z")

# Tampilkan grafik
plt.tight_layout()
plt.show()
● Cell 2 : Analisis Suara Cewe
# Zulfa Majidah dan Maulidya Maharani_12/08/2023
# Analisis Suara Cewe

# Mengimport library yang dibutuhkan


import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.signal import freqz

# Fungsi untuk membaca file audio


def read_audio(file_path):
fs, data = wavfile.read(file_path)
return fs, data

# Fungsi untuk menampilkan grafik audio


def plot_audio(fs, data, title):
plt.figure(figsize=(12, 4))
plt.plot(data, color='b', linestyle='-',
linewidth=1.5, alpha=0.7)
plt.xlabel('Waktu')
plt.ylabel('Amplitudo')
plt.title(title, fontsize=16, fontweight='bold')

# Menambahkan garis horizontal pada nilai nol untuk


menyorot osilasi
plt.axhline(0, color='black', linewidth=0.8,
linestyle='--', alpha=0.7)

# Menambahkan grid untuk mempermudah pembacaan grafik


plt.grid(True, linestyle='--', alpha=0.5)

# Menambahkan label sumbu x dan y dengan warna yang


berbeda
plt.xlabel('Waktu', fontsize=12, color='green')
plt.ylabel('Amplitudo', fontsize=12, color='purple')

# Menambahkan shadow di bawah kurva


plt.fill_between(range(len(data)), data,
color='skyblue', alpha=0.3)

plt.show()

# Fungsi untuk melakukan FFT


def fft_analyze(data, fs):
n = len(data)
fft_data = np.fft.fft(data)
freq = np.fft.fftfreq(n, d=1.0 / fs)
return freq, np.abs(fft_data)

# Fungsi untuk melakukan Transformasi Z


def z_transform(data, fs):
z, h = freqz([1], a=[1, -0.9], worN=len(data), fs=fs)
return h, z

# Path file audio


file_path = "SuaraCewe.wav"

# Baca file audio


fs, data = read_audio(file_path)

# Plot audio asli


plot_audio(fs, data, "Audio Asli")

# Plot FFT
freq, fft_result = fft_analyze(data, fs)
plot_audio(fs, np.abs(fft_result), "FFT")

# Plot Transformasi Z
h, z = z_transform(data, fs)
plot_audio(fs, np.abs(h), "Transformasi Z")

# Tampilkan grafik
plt.tight_layout()
plt.show()
● Cell 3 : Perubahan pitch suara cewe ke suara cowo
# Zulfa Majidah dan Maulidya Maharani_12/08/2023
# Perubahan pitch suara cewe ke suara cowo

# Mengimport library yang dibutuhkan


import librosa
import librosa.display
import numpy as np
import scipy.signal
import scipy.io.wavfile
import matplotlib.pyplot as plt
import sounddevice as sd
import soundfile as sf

# Membaca file audio cowo dan cewe


fs_cowo, cowo_audio = scipy.io.wavfile.read(r'D:\Piranti
Kuis Pengolahan Data\SuaraCowo.wav')
fs_cewe, cewe_audio = scipy.io.wavfile.read(r'D:\Piranti
Kuis Pengolahan Data\SuaraCewe.wav')

# Fungsi untuk menaikkan atau menurunkan pitch


def change_pitch(audio, pitch_factor):
return librosa.effects.pitch_shift(audio, sr=rate,
n_steps=pitch_factor)

# Load the original audio


cewe_audio, rate = librosa.load(r'D:\Piranti Kuis
Pengolahan Data\SuaraCewe.wav', sr=None)

# Menurunkan pitch (misalnya, setengah oktaf)


pitch_factor = -4
cowo_audio = change_pitch(cewe_audio, pitch_factor)

# Menampilkan gelombang audio sebelum dan sesudah


perubahan pitch
plt.figure(figsize=(12, 8))

plt.subplot(2, 1, 1)
plt.plot(np.arange(len(cewe_audio)) / rate, cewe_audio)
plt.title('Gelombang Audio Cewek')

plt.subplot(2, 1, 2)
plt.plot(np.arange(len(cowo_audio)) / rate, cowo_audio)
plt.title('Gelombang Audio Cowok')

plt.tight_layout()
plt.show()

# Menyimpan audio cowok ke file baru


sf.write('AudioCowo.wav', cowo_audio, rate)

# Operasi dasar Signal Processing


cowo_audio = cowo_audio / np.max(np.abs(cowo_audio)) #
Normalisasi
cewe_audio = cewe_audio / np.max(np.abs(cewe_audio)) #
Normalisasi

# FFT (Fast Fourier Transform)


f_cowo, Pxx_cowo = scipy.signal.welch(cowo_audio,
fs=fs_cowo, nperseg=1024)
f_cewe, Pxx_cewe = scipy.signal.welch(cewe_audio,
fs=fs_cewe, nperseg=1024)

# Menukar suara cowo dan cewe pada domain frekuensi


cowo_audio_freq = np.fft.fft(cowo_audio)
cewe_audio_freq = np.fft.fft(cewe_audio)

# Transformasi Z
z_cowo = scipy.signal.tf2zpk(*scipy.signal.butter(4, 3000,
'highpass', fs=fs_cowo))
z_cewe = scipy.signal.tf2zpk(*scipy.signal.butter(4, 3000,
'highpass', fs=fs_cewe))

# Plot spektrum frekuensi dan respons frekuensi dengan


Transformasi Z
fig, axs = plt.subplots(3, 2, figsize=(10, 12))

axs[0, 0].semilogy(f_cowo, Pxx_cowo, label='Cowo')


axs[0, 0].semilogy(f_cewe, Pxx_cewe, label='Cewe')
axs[0, 0].set_xlabel('Frekuensi (Hz)')
axs[0, 0].set_ylabel('Spektral Power Density')
axs[0, 0].set_title('Spektrum Frekuensi Suara')
axs[0, 0].legend()

# Mengambil elemen-elemen pada tupel z_cowo dan z_cewe


z_cowo_real = np.real(z_cowo[0])
z_cowo_imag = np.imag(z_cowo[0])
z_cewe_real = np.real(z_cewe[0])
z_cewe_imag = np.imag(z_cewe[0])

axs[0, 1].scatter(z_cowo_real, z_cowo_imag, marker='x',


label='Cowo')
axs[0, 1].scatter(z_cewe_real, z_cewe_imag, marker='o',
label='Cewe')
axs[0, 1].set_xlabel('Real')
axs[0, 1].set_ylabel('Imaginary')
axs[0, 1].set_title('Pole-Zero Plot')
axs[0, 1].legend()

# Plot FFT sebelum menukar suara cowo dan cewe


axs[1, 0].semilogy(f_cowo,
np.abs(cowo_audio_freq)[:len(f_cowo)], label='Cowo')
axs[1, 0].semilogy(f_cewe,
np.abs(cewe_audio_freq)[:len(f_cewe)], label='Cewe')
axs[1, 0].set_xlabel('Frekuensi (Hz)')
axs[1, 0].set_ylabel('Spektral Power Density')
axs[1, 0].set_title('FFT Sebelum Menukar Suara')
axs[1, 0].legend()

# Plot respons frekuensi dengan Transformasi Z


axs[1, 1].semilogx(*scipy.signal.freqz_zpk(*z_cowo,
fs=fs_cowo), label='Cowo')
axs[1, 1].semilogx(*scipy.signal.freqz_zpk(*z_cewe,
fs=fs_cewe), label='Cewe')
axs[1, 1].set_xlabel('Frekuensi (Hz)')
axs[1, 1].set_ylabel('Fase (rad)')
axs[1, 1].set_title('Respons Fase dengan Transformasi Z')
axs[1, 1].legend()

# Plot FFT setelah menukar suara cowo dan cewe


axs[2, 0].semilogy(f_cowo,
np.abs(cewe_audio_freq)[:len(f_cowo)], label='Cewe
(Setelah Inversi)')
axs[2, 0].semilogy(f_cewe,
np.abs(cowo_audio_freq)[:len(f_cewe)], label='Cowo
(Setelah Inversi)')
axs[2, 0].set_xlabel('Frekuensi (Hz)')
axs[2, 0].set_ylabel('Spektral Power Density')
axs[2, 0].set_title('FFT Setelah Menukar Suara')
axs[2, 0].legend()

# Memainkan suara setelah menukar suara


output_audio_cewe = np.fft.ifft(cewe_audio_freq)
sd.play(output_audio_cewe.real, fs_cewe) # Memainkan
suara dengan frekuensi sampel yang benar
sd.wait() # Menunggu pemutaran selesai

# Memainkan suara setelah menukar suara


output_audio_cowo = np.fft.ifft(cowo_audio_freq)
sd.play(output_audio_cowo.real, fs_cowo) # Memainkan
suara dengan frekuensi sampel yang benar
sd.wait() # Menunggu pemutaran selesai

plt.tight_layout()
plt.show()
● Cell 4 : Perubahan pitch suara cowo ke suara cewe
# Zulfa Majidah dan Maulidya Maharani_12/08/2023
# Perubahan pitch suara cowo ke suara cewe

# Mengimport library yang dibutuhkan


import librosa
import librosa.display
import numpy as np
import scipy.signal
import scipy.io.wavfile
import matplotlib.pyplot as plt
import sounddevice as sd
import soundfile as sf

# Membaca file audio cewe dan cowo


fs_cewe, cewe_audio = scipy.io.wavfile.read(r'D:\Piranti
Kuis Pengolahan Data\SuaraCewe.wav')
fs_cowo, cowo_audio = scipy.io.wavfile.read(r'D:\Piranti
Kuis Pengolahan Data\SuaraCowo.wav')

# Fungsi untuk menaikkan atau menurunkan pitch


def change_pitch(audio, pitch_factor):
return librosa.effects.pitch_shift(audio, sr=rate,
n_steps=pitch_factor)

# Load the original audio


cowo_audio, rate = librosa.load(r'D:\Piranti Kuis
Pengolahan Data\SuaraCowo.wav', sr=None)

# Menaikkan pitch (misalnya, setengah oktaf)


pitch_factor = 8
cewe_audio = change_pitch(cowo_audio, pitch_factor)

# Menampilkan gelombang audio sebelum dan sesudah


perubahan pitch
plt.figure(figsize=(12, 8))

plt.subplot(2, 1, 1)
plt.plot(np.arange(len(cowo_audio)) / rate, cowo_audio)
plt.title('Gelombang Audio Cowok')
plt.subplot(2, 1, 2)
plt.plot(np.arange(len(cewe_audio)) / rate, cewe_audio)
plt.title('Gelombang Audio Cewek')

plt.tight_layout()
plt.show()

# Menyimpan audio cewek ke file baru


sf.write('AudioCewe.wav', cewe_audio, rate)

# Operasi dasar Signal Processing


cewe_audio = cewe_audio / np.max(np.abs(cewe_audio)) #
Normalisasi
cowo_audio = cowo_audio / np.max(np.abs(cowo_audio)) #
Normalisasi

# FFT (Fast Fourier Transform)


f_cewe, Pxx_cewe = scipy.signal.welch(cewe_audio,
fs=fs_cewe, nperseg=1024)
f_cowo, Pxx_cowo = scipy.signal.welch(cowo_audio,
fs=fs_cowo, nperseg=1024)

# Menukar suara cewe dan cowo pada domain frekuensi


cewe_audio_freq = np.fft.fft(cewe_audio)
cowo_audio_freq = np.fft.fft(cowo_audio)

# Transformasi Z
z_cewe = scipy.signal.tf2zpk(*scipy.signal.butter(4, 3000,
'highpass', fs=fs_cewe))
z_cowo = scipy.signal.tf2zpk(*scipy.signal.butter(4, 3000,
'highpass', fs=fs_cowo))

# Plot spektrum frekuensi dan respons frekuensi dengan


Transformasi Z
fig, axs = plt.subplots(3, 2, figsize=(10, 12))

axs[0, 0].semilogy(f_cewe, Pxx_cewe, label='Cewe')


axs[0, 0].semilogy(f_cowo, Pxx_cowo, label='Cowo')
axs[0, 0].set_xlabel('Frekuensi (Hz)')
axs[0, 0].set_ylabel('Spektral Power Density')
axs[0, 0].set_title('Spektrum Frekuensi Suara')
axs[0, 0].legend()

# Mengambil elemen-elemen pada tupel z_cewe dan z_cowo


z_cewe_real = np.real(z_cewe[0])
z_cewe_imag = np.imag(z_cewe[0])
z_cowo_real = np.real(z_cowo[0])
z_cowo_imag = np.imag(z_cowo[0])

axs[0, 1].scatter(z_cewe_real, z_cewe_imag, marker='x',


label='Cewe')
axs[0, 1].scatter(z_cowo_real, z_cowo_imag, marker='o',
label='Cowo')
axs[0, 1].set_xlabel('Real')
axs[0, 1].set_ylabel('Imaginary')
axs[0, 1].set_title('Pole-Zero Plot')
axs[0, 1].legend()

# Plot FFT sebelum menukar suara cewe dan cowo


axs[1, 0].semilogy(f_cewe,
np.abs(cewe_audio_freq)[:len(f_cowo)], label='Cewe')
axs[1, 0].semilogy(f_cowo,
np.abs(cowo_audio_freq)[:len(f_cewe)], label='Cowo')
axs[1, 0].set_xlabel('Frekuensi (Hz)')
axs[1, 0].set_ylabel('Spektral Power Density')
axs[1, 0].set_title('FFT Sebelum Menukar Suara')
axs[1, 0].legend()

# Plot respons frekuensi dengan Transformasi Z


axs[1, 1].semilogx(*scipy.signal.freqz_zpk(*z_cewe,
fs=fs_cewe), label='Cewe')
axs[1, 1].semilogx(*scipy.signal.freqz_zpk(*z_cowo,
fs=fs_cowo), label='Cowo')
axs[1, 1].set_xlabel('Frekuensi (Hz)')
axs[1, 1].set_ylabel('Fase (rad)')
axs[1, 1].set_title('Respons Fase dengan Transformasi Z')
axs[1, 1].legend()
# Plot FFT setelah menukar suara cewe dan cowo
axs[2, 0].semilogy(f_cewe,
np.abs(cowo_audio_freq)[:len(f_cewe)], label='Cowo
(Setelah Inversi)')
axs[2, 0].semilogy(f_cowo,
np.abs(cewe_audio_freq)[:len(f_cowo)], label='Cewe
(Setelah Inversi)')
axs[2, 0].set_xlabel('Frekuensi (Hz)')
axs[2, 0].set_ylabel('Spektral Power Density')
axs[2, 0].set_title('FFT Setelah Menukar Suara')
axs[2, 0].legend()

# Memainkan suara setelah menukar suara


output_audio_cowo = np.fft.ifft(cowo_audio_freq)
sd.play(output_audio_cowo.real, fs_cowo) # Memainkan
suara dengan frekuensi sampel yang benar
sd.wait() # Menunggu pemutaran selesai

# Memainkan suara setelah menukar suara


output_audio_cewe = np.fft.ifft(cewe_audio_freq)
sd.play(output_audio_cewe.real, fs_cewe) # Memainkan
suara dengan frekuensi sampel yang benar
sd.wait() # Menunggu pemutaran selesai

plt.tight_layout()
plt.show()
E. Analisis dan Pembahasan
Pada file Python yang kami buat, terdapat 4 cell yang memuat bahasa
pemrograman kami. Cell pertama merupakan analisis dari SuaraCowo.wav.
Pada cell ini, ditampikan grafik frekuensi suara, FFT, dan transformasi Z
berdasarkan analisis dari file SuaraCowo.wav. Cell kedua merupakan analisis
dari SuaraCewe.wav. Pada cell ini, ditampilkan grafik frekuensi suara, FFT,
dan transformasi Z berdasarkan analisis dari file SuaraCewe.wav. Cell ketiga
merupakan bahasa pemrograman yang berisi perubahan pitch dari suara
cewek ke suara cowok. Pada cell ini, akan diputar suara asli dari file
Suaracewe.wav dan suara hasil perubahan pitch. Cell keempat merupakan
bahasa pemrograman yang berisi perubahan pitch dari suara cowok ke suara
cewek. Pada cell ini, akan diputar suara asli dari file Suaracowo.wav dan
suara hasil perubahan pitch.
Dari semua cell di atas, telah ditampilkan beberapa grafik yang
diminta yaitu grafik spektrum frekuensi, grafik FFT, dan grafik transformasi
Z. Grafik spektrum frekuensi yang dihasilkan menunjukkan distribusi
frekuensi dalam sinyal audio. Grafik tersebut dapat membantu
mengidentifikasi pola frekuensi yang membedakan kedua sinyal audio
tersebut. Semakin tinggi amplitudo pada suatu frekuensi, semakin banyak
energi yang terkandung pada frekuensi tersebut dalam sinyal audio. Grafik
FFT yang dihasilkan menunjukkan magnitudo dari transformasi Fourier dari
sinyal audio. Semakin tinggi amplitudo pada suatu frekuensi, semakin banyak
energi yang terkandung pada frekuensi tersebut dalam sinyal audio. Dalam
bahasa Python di atas, fungsi fft_analyze digunakan untuk melakukan
FFT pada data audio dan menghasilkan grafik FFT. Berdasarkan cell 1 (suara
cowok), puncak frekuensi pada grafik menunjukkan nada yang rendah hingga
nada yang sedang dalam suara. Sedangkan berdasarkan cell 2 (suara cewek),
puncak frekuensi pada grafik menunjukkan nada tengah hingga nada sangat
tengah dalam suara. Grafik transformasi Z yang dihasilkan dapat digunakan
untuk membantu memahami karakteristik suara cewek dan cowok karena
memungkinkan untuk dilakukan analisis sinyal audio dalam domain waktu
dan frekuensi. Pada bahasa Python di atas, Transformasi Z digunakan untuk
menganalisis sinyal audio dari file "SuaraCewe.wav" dan "SuaraCowo.wav".
Dengan menggunakan transformasi Z, kami dapat mengidentifikasi puncak
frekuensi yang mewakili karakteristik suara khusus pada suara cewe dan
cowo. Puncak frekuensi yang tampak pada grafik spektrum frekuensi
merupakan bagian penting dari sinyal audio yang mencerminkan frekuensi
yang dominan pada suara. Dengan menganalisis puncak frekuensi ini, kami
dapat menemukan perbedaan dalam karakteristik suara antara cewe dan cowo.
Apabila cell 3 dan cell 4 dianalisis berdasarkan grafik spektrum
frekuensi, grafik FFT, dan grafik transformasi Z, dapat disimpulkan bahwa
perubahan pitch suara cewe ke suara cowo dapat dilakukan dengan
menurunkan frekuensi. Begitu juga sebaliknya, perubahan pitch suara cowo
ke suara cewe dapat dilakukan dengan menaikkan frekuensi.
F. Kesimpulan
Setelah kami melakukan pengolahan sinyal suara terhadap 2 file suara,
dapat disimpulkan bahwa perbedaan suara cowo dan suara cewe dapat
ditentukan melalui identifikasi puncak frekuensi yang ada pada grafik
transformasi spektrum frekuensi. Puncak frekuensi yang tampak pada grafik
spektrum frekuensi merupakan bagian penting dari sinyal audio yang
mencerminkan frekuensi yang dominan pada suara. Hal ini karena puncak
frekuensi pada grafik spektrum frekuensi menunjukkan karakteristik suara
khusus. Hasil identifikasinya berdasarkan data kami yaitu suara cewe
cenderung memiliki frekuensi yang lebih tinggi dibandingkan suara cowo.
Hal tersebut juga telah terbukti pada pengolahan sinyal suara yang kami buat.
G. Referensi
Untuk menyelesaikan tugas pengolahan sinyal suara, kami
menggunakan beberapa referensi yaitu stackoverflow, kaggle, dan perplexity.
H. Lampiran
Di bawah ini kami lampirkan link Google Drive yang berisi file
python pengolahan sinyal suara, file suara cowok, dan file suara cewek.
https://drive.google.com/drive/folders/1HkCk1V16LXtRQ5_FuildW1vi6opl
NSxF?usp=sharing

Anda mungkin juga menyukai