# Project SVM Suara

Project ini mengklasifikasikan tingkat percaya diri dari file audio `.wav`
menggunakan ekstraksi fitur suara dengan `librosa` dan model SVM.

Folder `ml/` sekarang juga menjadi lokasi API prediksi untuk Flutter.

Gunakan Python 3.10 agar dependency audio seperti `librosa`, `numba`, dan
`llvmlite` lebih mudah terpasang.

## Struktur

```text
project_svm_suara/
├── data/
├── models/
├── features.py
├── audio_utils.py
├── train_model.py
├── predict.py
├── app.py
└── requirements.txt
```

## Format Dataset

Letakkan file `.wav` di folder `data/`.

- Nama file mengandung `_pd` untuk kelas `PD` atau Percaya Diri.
- Nama file mengandung `_tpd` untuk kelas `TPD` atau Tidak Percaya Diri.

Contoh:

```text
a_pd.wav
a_tpd.wav
```

## Cara Menjalankan

```bash
python3.10 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python train_model.py
python predict.py data/a_pd.wav
streamlit run app.py
```

## Menjalankan API untuk Flutter

```bash
cd ml
../cv_app/.venv/bin/python -m uvicorn api_app:app --host 0.0.0.0 --port 8000
```

Endpoint:

```text
POST /predict
GET /predictions
GET /model
```

Hasil prediksi disimpan ke MySQL/MariaDB agar bisa dilihat lewat phpMyAdmin:

```text
database: confivoice
table: prediction_results
```

Jika MySQL memakai port/user/password berbeda, atur environment sebelum
menjalankan API:

```bash
export CONFIVOICE_DB_DRIVER=mysql
export CONFIVOICE_MYSQL_HOST=127.0.0.1
export CONFIVOICE_MYSQL_PORT=3306
export CONFIVOICE_MYSQL_USER=root
export CONFIVOICE_MYSQL_PASSWORD=
export CONFIVOICE_MYSQL_DATABASE=confivoice
```

Aplikasi Streamlit menerima upload audio `WAV`, `MP3`, `M4A`, `OGG`, `FLAC`,
`WEBM`, dan `AAC`. File akan disiapkan menjadi WAV mono 22050 Hz sebelum fitur
suara diekstraksi.
