All Products
Search
Document Center

Alibaba Cloud Model Studio:SDK Python untuk Pengenalan Ucapan Real-time Paraformer

Last Updated:Mar 22, 2026

Panduan ini menjelaskan parameter dan antarmuka Kit Pengembangan Perangkat Lunak (SDK) Python untuk Pengenalan Ucapan Real-time Paraformer.

Penting

Dokumen ini hanya berlaku untuk wilayah China (Beijing). Untuk menggunakan model, Anda harus menggunakan API Key dari wilayah China (Beijing).

Panduan pengguna: Untuk deskripsi model dan panduan pemilihan, lihat Pengenalan ucapan real-time - Fun-ASR/Gummy/Paraformer.

Prasyarat

  • Anda telah mengaktifkan Model Studio dan membuat API key. Untuk mencegah risiko keamanan akibat kebocoran kode, jangan hard-code API key dalam kode Anda. Sebagai gantinya, ekspor sebagai Variabel lingkungan.

    Catatan

    Gunakan Token otentikasi sementara untuk memberikan akses sementara kepada aplikasi atau pengguna pihak ketiga, atau untuk mengontrol secara ketat operasi berisiko tinggi seperti mengakses atau menghapus data sensitif.

    Token otentikasi sementara lebih aman daripada API key jangka panjang karena kedaluwarsa dalam 60 detik. Masa berlaku singkat ini menjadikannya ideal untuk skenario panggilan sementara dan secara signifikan mengurangi risiko kompromi API key.

    Untuk menggunakan metode ini, ganti API key dalam kode Anda dengan token otentikasi sementara tersebut.

  • Instal versi terbaru SDK DashScope.

Daftar model

paraformer-realtime-v2

paraformer-realtime-8k-v2

Skenario

Streaming langsung dan rapat

Untuk pengenalan Audio 8 kHz dalam skenario seperti layanan pelanggan telepon dan pesan suara.

Laju sampel

Apa saja

8 kHz

Bahasa

Bahasa Tiongkok (termasuk Mandarin dan berbagai dialek), Inggris, Jepang, Korea, Jerman, Prancis, dan Rusia

Dialek Tiongkok yang didukung: Shanghainese, Wu, Minnan, Timur Laut, Gansu, Guizhou, Henan, Hubei, Hunan, Jiangxi, Ningxia, Shanxi, Shaanxi, Shandong, Sichuan, Tianjin, Yunnan, dan Kanton

Tiongkok

Prediksi tanda baca

✅ Didukung secara default.

✅ Didukung secara default.

Inverse Text Normalization (ITN)

✅ Didukung secara default.

✅ Didukung secara default.

Tentukan bahasa pengenalan

✅ Tentukan bahasa menggunakan parameter language_hints.

Pengenalan emosi

✅ (Klik untuk melihat penggunaan)

Batasan berikut berlaku untuk emo_tag dan emo_confidence:

  • Hanya tersedia untuk model paraformer-realtime-8k-v2.

  • Tanda baca semantik harus dinonaktifkan melalui parameter permintaan semantic_punctuation_enabled request parameter. Secara default dinonaktifkan.

  • Data emosi ini hanya dikembalikan ketika metode is_sentence_end objek Recognition result mengembalikan True.

Ambil emosi dan confidence untuk kalimat saat ini dari bidang emo_tag dan emo_confidence objek Sentence.

Memulai

Kelas Recognition menyediakan metode untuk panggilan non-streaming dan streaming dua arah. Pilih metode yang sesuai dengan kasus penggunaan Anda:

  • Panggilan non-streaming: Memproses file lokal dan mengembalikan hasil Pengenalan lengkap dalam satu respons. Mode ini ideal untuk mentranskripsikan audio yang telah direkam sebelumnya.

  • Panggilan streaming dua arah: Memproses aliran audio langsung dan mengembalikan hasil secara real time. Aliran audio dapat berasal dari perangkat seperti microphone atau dibaca dari file lokal. Mode ini ideal untuk aplikasi yang memerlukan umpan balik segera.

Panggilan non-streaming

Metode ini mengirimkan satu tugas pengenalan ucapan. Metode ini memproses file lokal secara sinkron, memblokir eksekusi hingga mengembalikan hasil Pengenalan lengkap.

image

Buat instance kelas Recognition dan ikat parameter permintaan. Panggil metode call untuk melakukan pengenalan atau terjemahan dan mendapatkan hasil pengenalan (RecognitionResult).

Klik untuk melihat contoh lengkap

File audio yang digunakan dalam contoh adalah: asr_example.wav.

from http import HTTPStatus
from dashscope.audio.asr import Recognition

# Jika Anda belum mengonfigurasi API key sebagai variabel lingkungan,
# hapus komentar baris berikut dan ganti "apiKey" dengan kunci aktual Anda.
# import dashscope
# dashscope.api_key = "apiKey"

recognition = Recognition(model='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # Parameter "language_hints" hanya didukung oleh model paraformer-realtime-v2.
                          language_hints=['zh', 'en'],
                          callback=None)
result = recognition.call('asr_example.wav')
if result.status_code == HTTPStatus.OK:
    print('Hasil pengenalan:')
    print(result.get_sentence())
else:
    print('Error: ', result.message)
    
print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

Panggilan streaming dua arah

Metode ini mengirimkan satu tugas pengenalan ucapan real-time. Metode ini mengalirkan hasil pengenalan secara real time melalui antarmuka callback yang Anda implementasikan.

image
  1. Mulai pengenalan ucapan streaming

    Buat instance kelas Recognition, ikat parameter permintaan dan antarmuka callback (RecognitionCallback), lalu panggil metode start untuk memulai pengenalan ucapan streaming.

  2. Kirim data audio

    Panggil berulang kali metode send_audio_frame dari kelas Recognition untuk mengirim aliran audio biner dari file lokal atau perangkat, seperti mikrofon, ke server dalam segmen.

    Saat mengirim data audio, server menggunakan metode on_event dari antarmuka callback RecognitionCallback untuk mengembalikan hasil pengenalan ke klien secara real time.

    Untuk kinerja optimal, kami menyarankan mengirim potongan audio dengan durasi sekitar 100 milidetik (ukuran 1 KB hingga 16 KB).

  3. Hentikan pemrosesan

    Panggil metode stop dari kelas Recognition untuk menghentikan pengenalan ucapan.

    Metode ini memblokir thread saat ini hingga callback on_complete atau on_error dari antarmuka callback (RecognitionCallback) dipicu.

Klik untuk melihat contoh lengkap

Mikrofon

import os
import signal  # Menangani event keyboard (tekan "Ctrl+C" untuk menghentikan perekaman).
import sys

import dashscope
import pyaudio
from dashscope.audio.asr import *

mic = None
stream = None

# Atur parameter perekaman
sample_rate = 16000  # laju pengambilan sampel (Hz)
channels = 1  # saluran mono
dtype = 'int16'  # tipe data
format_pcm = 'pcm'  # Format data audio.
block_size = 3200  # jumlah frame per buffer


def init_dashscope_api_key():
    """
        Tetapkan API-key DashScope Anda. Informasi lebih lanjut:
        https://github.com/aliyun/alibabacloud-bailian-speech-demo/blob/master/PREREQUISITES.md
    """

    if 'DASHSCOPE_API_KEY' in os.environ:
        dashscope.api_key = os.environ[
            'DASHSCOPE_API_KEY']  # Muat API key dari variabel lingkungan DASHSCOPE_API_KEY.
    else:
        dashscope.api_key = '<your-dashscope-api-key>'  # tetapkan API-key secara manual


# Callback pengenalan ucapan real-time
class Callback(RecognitionCallback):
    def on_open(self) -> None:
        global mic
        global stream
        print('RecognitionCallback open.')
        mic = pyaudio.PyAudio()
        stream = mic.open(format=pyaudio.paInt16,
                          channels=1,
                          rate=16000,
                          input=True)

    def on_close(self) -> None:
        global mic
        global stream
        print('RecognitionCallback close.')
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

    def on_complete(self) -> None:
        print('RecognitionCallback completed.')  # pengenalan selesai

    def on_error(self, message) -> None:
        print('RecognitionCallback task_id: ', message.request_id)
        print('RecognitionCallback error: ', message.message)
        # Hentikan dan tutup aliran audio jika sedang berjalan
        if 'stream' in globals() and stream.active:
            stream.stop()
            stream.close()
        # Keluar dari program secara paksa
        sys.exit(1)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print('RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))


def signal_handler(sig, frame):
    print('Ctrl+C ditekan, hentikan pengenalan ...')
    # Hentikan pengenalan
    recognition.stop()
    print('Pengenalan dihentikan.')
    print(
        '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
        .format(
            recognition.get_last_request_id(),
            recognition.get_first_package_delay(),
            recognition.get_last_package_delay(),
        ))
    # Keluar dari program secara paksa
    sys.exit(0)


# fungsi utama
if __name__ == '__main__':
    init_dashscope_api_key()
    print('Menginisialisasi ...')

    # Buat callback pengenalan
    callback = Callback()

    # Panggil layanan pengenalan secara asinkron.
    # Anda dapat menyesuaikan parameter pengenalan, seperti model, format, dan sample_rate.
    recognition = Recognition(
        model='paraformer-realtime-v2',
        format=format_pcm,
        # Format yang didukung: 'pcm', 'wav', 'opus', 'speex', 'aac', 'amr'. Lihat dokumentasi untuk detailnya.
        sample_rate=sample_rate,
        # Laju sampel yang didukung: 8000, 16000.
        semantic_punctuation_enabled=False,
        callback=callback)

    # Mulai pengenalan
    recognition.start()

    signal.signal(signal.SIGINT, signal_handler)
    print("Tekan 'Ctrl+C' untuk menghentikan perekaman dan pengenalan...")
    # Loop untuk membaca audio dari mikrofon dan mengirimkannya untuk pengenalan.

    while True:
        if stream:
            data = stream.read(3200, exception_on_overflow=False)
            recognition.send_audio_frame(data)
        else:
            break

    recognition.stop()

File lokal

File audio yang digunakan dalam contoh adalah: asr_example.wav.

import os
import time
from dashscope.audio.asr import *

# Jika Anda belum mengonfigurasi API key sebagai variabel lingkungan,
# hapus komentar baris berikut dan ganti "apiKey" dengan kunci aktual Anda.
# import dashscope
# dashscope.api_key = "apiKey"

from datetime import datetime

def get_timestamp():
    now = datetime.now()
    formatted_timestamp = now.strftime("[%Y-%m-%d %H:%M:%S.%f]")
    return formatted_timestamp

class Callback(RecognitionCallback):
    def on_complete(self) -> None:
        print(get_timestamp() + ' Pengenalan selesai')  # Pengenalan selesai.

    def on_error(self, result: RecognitionResult) -> None:
        print('Tugas pengenalan: ', result.request_id)
        print('Error pengenalan: ', result.message)
        exit(0)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print(get_timestamp() + ' RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(get_timestamp() + 
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))


callback = Callback()

recognition = Recognition(model='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # Parameter "language_hints" hanya didukung oleh model paraformer-realtime-v2.
                          language_hints=['zh', 'en'],
                          callback=callback)

recognition.start()

try:
    audio_data: bytes = None
    f = open("asr_example.wav", 'rb')
    if os.path.getsize("asr_example.wav"):
        while True:
            audio_data = f.read(3200)
            if not audio_data:
                break
            else:
                recognition.send_audio_frame(audio_data)
            time.sleep(0.1)
    else:
        raise Exception(
            'File yang diberikan kosong (panjang nol byte)')
    f.close()
except Exception as e:
    raise e

recognition.stop()

print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

Panggilan konkuren

Dalam Python, Global Interpreter Lock (GIL) hanya memungkinkan satu thread mengeksekusi kode Python pada satu waktu, meskipun beberapa pustaka berorientasi kinerja dapat mengatasi keterbatasan ini. Untuk memanfaatkan prosesor multi-core secara lebih baik, gunakan multiprocessing atau concurrent.futures.ProcessPoolExecutor. Perhatikan bahwa di bawah konkurensi tinggi, Multi-threading dapat meningkatkan latensi panggilan SDK secara signifikan.

Parameter permintaan

Parameter permintaan diatur dalam konstruktor (__init__) kelas Recognition.

Parameter

Tipe

Default

Wajib

Deskripsi

model

str

-

Ya

Model untuk pengenalan ucapan real-time. Untuk informasi lebih lanjut, lihat Daftar model.

sample_rate

int

-

Ya

Laju sampel audio, dalam Hz.

Parameter ini bervariasi berdasarkan model:

  • paraformer-realtime-v2 mendukung laju sampel apa saja.

  • paraformer-realtime-8k-v2 hanya mendukung laju sampel 8000 Hz.

format

str

-

Ya

Format audio.

Format audio yang didukung: pcm, wav, mp3, opus, speex, aac, dan amr.

Penting

opus/speex memerlukan enkapsulasi Ogg.

wav memerlukan encoding PCM.

amr: Hanya tipe AMR-NB yang didukung.

disfluency_removal_enabled

bool

False

Tidak

Menentukan apakah akan memfilter kata-kata tidak lancar:

  • true: Memfilter kata-kata tidak lancar.

  • false (default): Tidak memfilter kata-kata tidak lancar.

language_hints

list[str]

["zh", "en"]

Tidak

Menentukan kode bahasa untuk pengenalan. Jika parameter ini tidak diatur, model akan secara otomatis mendeteksi bahasa.

Kode bahasa yang didukung:

  • zh: Bahasa Tiongkok

  • en: Inggris

  • ja: Jepang

  • yue: Kanton

  • ko: Korea

  • de: Jerman

  • fr: Prancis

  • ru: Rusia

Parameter ini hanya berlaku untuk model multibahasa. Untuk informasi lebih lanjut, lihat Daftar model.

semantic_punctuation_enabled

bool

False

Tidak

Menentukan apakah akan mengaktifkan segmentasi kalimat semantik.

  • true: Mengaktifkan segmentasi kalimat semantik dan menonaktifkan segmentasi berbasis Voice Activity Detection (VAD).

  • false (default): Mengaktifkan segmentasi berbasis VAD dan menonaktifkan segmentasi kalimat semantik.

Segmentasi kalimat semantik menawarkan akurasi lebih tinggi dan ideal untuk skenario transkripsi rapat. Segmentasi berbasis VAD memiliki latensi lebih rendah dan lebih cocok untuk skenario interaktif.

Dengan menyesuaikan parameter semantic_punctuation_enabled, Anda dapat mengubah metode tanda baca untuk pengenalan ucapan secara fleksibel agar sesuai dengan skenario berbeda.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

max_sentence_silence

int

800

Tidak

Menentukan ambang batas durasi diam untuk segmentasi berbasis VAD, dalam milidetik (ms).

Jika jeda dalam ucapan melebihi ambang batas ini, sistem menganggap kalimat telah selesai.

Rentang valid: 200 ms hingga 6000 ms. Default: 800 ms.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru ketika semantic_punctuation_enabled diatur ke false.

multi_threshold_mode_enabled

bool

False

Tidak

Jika true, parameter ini mencegah segmentasi berbasis VAD membuat kalimat yang terlalu panjang.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru ketika semantic_punctuation_enabled diatur ke false.

punctuation_prediction_enabled

bool

True

Tidak

Menentukan apakah akan menambahkan tanda baca secara otomatis ke hasil pengenalan:

  • true (default): Menambahkan tanda baca.

  • false: Tidak menambahkan tanda baca.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

heartbeat

bool

False

Tidak

Menentukan apakah akan mempertahankan koneksi persisten dengan server:

  • true: Mempertahankan koneksi bahkan saat terus-menerus mengirim audio diam.

  • false (default): Koneksi berakhir setelah timeout 60 detik, bahkan jika audio diam terus-menerus dikirim.

    Audio diam adalah file audio atau aliran data tanpa suara. Anda dapat menghasilkan audio diam menggunakan perangkat lunak pengeditan audio seperti Audacity atau Adobe Audition, atau dengan alat command-line seperti FFmpeg.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

Untuk menggunakan parameter ini, versi SDK Anda harus 1.23.1 atau lebih baru.

inverse_text_normalization_enabled

bool

True

Tidak

Menentukan apakah akan mengaktifkan Inverse Text Normalization (ITN).

Jika diaktifkan, angka Tiongkok dikonversi menjadi angka Arab.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

callback

RecognitionCallback

-

Tidak

Antarmuka RecognitionCallback untuk menangani hasil streaming.

Antarmuka utama

Kelas Recognition

Kelas Recognition diimpor menggunakan from dashscope.audio.asr import *.

Metode anggota

Signature metode

Deskripsi

call

def call(self, file: str, phrase_id: str = None, **kwargs) -> RecognitionResult

Menjalankan pengenalan non-streaming dari file lokal. Metode ini memblokir thread saat ini hingga seluruh file audio dibaca. File harus memiliki izin baca.

Mengembalikan objek RecognitionResult.

start

def start(self, phrase_id: str = None, **kwargs)

Memulai pengenalan ucapan.

Metode ini melakukan pengenalan streaming real-time berbasis callback. Metode ini tidak memblokir thread saat ini dan harus digunakan bersama send_audio_frame dan stop.

send_audio_frame

def send_audio_frame(self, buffer: bytes)

Untuk kinerja optimal, setiap paket audio harus memiliki durasi sekitar 100 ms dan ukuran antara 1 KB hingga 16 KB.

Hasil pengenalan dikembalikan melalui metode on_event dari Antarmuka RecognitionCallback.

stop

def stop(self)

Menghentikan pengenalan ucapan. Metode ini memblokir hingga server mengenali semua audio yang diterima dan tugas selesai.

get_last_request_id

def get_last_request_id(self)

Mendapatkan request_id. Metode ini dapat dipanggil setelah objek dibuat.

get_first_package_delay

def get_first_package_delay(self)

Mendapatkan First Packet Delay, yaitu latensi antara mengirim paket audio pertama dan menerima hasil pengenalan pertama. Panggil metode ini setelah tugas selesai.

get_last_package_delay

def get_last_package_delay(self)

Last Packet Delay adalah waktu yang berlalu dari mengirim perintah stop hingga pengiriman hasil pengenalan untuk paket terakhir. Metrik ini tersedia setelah tugas selesai.

Antarmuka RecognitionCallback

Selama Panggilan Streaming Dua Arah, server mengembalikan informasi proses utama dan data ke klien melalui callback. Anda harus mengimplementasikan metode callback untuk menangani data yang dikembalikan oleh server.

Klik untuk melihat contoh

class Callback(RecognitionCallback):
    def on_open(self) -> None:
        print('Koneksi berhasil')

    def on_event(self, result: RecognitionResult) -> None:
        # Implementasikan logika untuk menerima hasil pengenalan.

    def on_complete(self) -> None:
        print('Tugas selesai')

    def on_error(self, result: RecognitionResult) -> None:
        print('Terjadi pengecualian: ', result)

    def on_close(self) -> None:
        print('Koneksi ditutup')


callback = Callback()

Metode

Parameter

Nilai kembalian

Deskripsi

def on_open(self) -> None

None

None

Dipanggil segera setelah koneksi dengan server berhasil dibuat.

def on_event(self, result: RecognitionResult) -> None

result: Hasil Pengenalan

None

Dipanggil ketika server mengirim hasil pengenalan.

def on_complete(self) -> None

None

None

Dipanggil setelah semua hasil pengenalan telah dikembalikan.

def on_error(self, result: RecognitionResult) -> None

result: Hasil Pengenalan

None

Dipanggil ketika terjadi error.

def on_close(self) -> None

None

None

Dipanggil setelah server menutup koneksi.

Hasil respons

Hasil pengenalan (RecognitionResult)

Objek RecognitionResult merepresentasikan hasil dari satu pengenalan real-time dalam panggilan streaming dua arah atau panggilan non-streaming.

Metode

Signature metode

Deskripsi

get_sentence

def get_sentence(self) -> Union[Dict[str, Any], List[Any]]

Mengembalikan teks dan informasi timestamp untuk kalimat saat ini. Dalam callback, metode ini mengembalikan objek Dict[str, Any] untuk satu kalimat.

Untuk informasi lebih lanjut, lihat Sentence.

get_request_id

def get_request_id(self) -> str

Mengembalikan ID permintaan.

is_sentence_end

@staticmethod
def is_sentence_end(sentence: Dict[str, Any]) -> bool

Menentukan apakah kalimat yang diberikan lengkap.

Sentence (Sentence)

Kelas Sentence mencakup parameter berikut:

Parameter

Tipe

Deskripsi

begin_time

int

Waktu mulai kalimat, dalam milidetik (ms).

end_time

int

Waktu akhir kalimat, dalam milidetik (ms).

text

str

Teks yang dikenali.

words

Daftar objek Word

Menyediakan informasi timestamp tingkat kata.

emo_tag

str

Emosi kalimat saat ini:

  • positive: Merepresentasikan emosi positif, seperti kebahagiaan atau kepuasan.

  • negative: Merepresentasikan emosi negatif, seperti kemarahan atau kesedihan.

  • neutral: Merepresentasikan emosi netral atau tidak ekspresif.

Batasan berikut berlaku untuk emo_tag dan emo_confidence:

  • Hanya tersedia untuk model paraformer-realtime-8k-v2.

  • Tanda baca semantik harus dinonaktifkan melalui parameter permintaan semantic_punctuation_enabled request parameter. Secara default dinonaktifkan.

  • Data emosi ini hanya dikembalikan ketika metode is_sentence_end objek Recognition result mengembalikan True.

emo_confidence

float

Tingkat kepercayaan emosi yang dikenali, berkisar antara 0,0 hingga 1,0. Nilai yang lebih tinggi menunjukkan kepercayaan yang lebih besar.

Batasan berikut berlaku untuk emo_tag dan emo_confidence:

  • Hanya tersedia untuk model paraformer-realtime-8k-v2.

  • Tanda baca semantik harus dinonaktifkan melalui parameter permintaan semantic_punctuation_enabled request parameter. Secara default dinonaktifkan.

  • Data emosi ini hanya dikembalikan ketika metode is_sentence_end objek Recognition result mengembalikan True.

Word (Word)

Kelas Word mencakup parameter berikut:

Parameter

Tipe

Deskripsi

begin_time

int

Waktu mulai kata, dalam milidetik (ms).

end_time

int

Waktu akhir kata, dalam milidetik (ms).

text

str

Kata tersebut.

punctuation

str

Tanda baca.

Kode error

Jika terjadi error, lihat Pesan Error untuk troubleshooting.

Jika masalah berlanjut, bergabunglah dengan Grup Pengembang dan berikan Request ID untuk investigasi lebih lanjut.

Contoh lainnya

Untuk contoh lainnya, lihat GitHub.

FAQ

Fitur

T: Bagaimana cara mempertahankan koneksi persisten dengan server selama diam panjang?

Atur parameter permintaan heartbeat ke true, dan terus-menerus kirim audio diam ke server.

Audio diam adalah file audio atau aliran data tanpa suara. Anda dapat menghasilkan audio diam menggunakan perangkat lunak pengeditan audio seperti Audacity atau Adobe Audition, atau dengan alat command-line seperti FFmpeg.

T: Bagaimana cara mengonversi file audio ke format yang didukung?

Anda dapat menggunakan tool FFmpeg. Untuk informasi lebih lanjut, lihat situs web resmi FFmpeg.

# Perintah konversi dasar (templat universal)
# -i: Jalur file input. Contoh: audio.wav
# -c:a: Encoder audio. Contoh: aac, libmp3lame, pcm_s16le
# -b:a: Bit rate (mengontrol kualitas audio). Contoh: 192k, 320k
# -ar: Laju sampel. Contoh: 44100 (CD), 48000, 16000
# -ac: Saluran audio. Contoh: 1 (mono), 2 (stereo)
# -y: Menimpa file yang ada (tidak memerlukan nilai).
ffmpeg -i input_audio.ext -c:a encoder_name -b:a bit_rate -ar sample_rate -ac num_channels output.ext

# Contoh: Konversi WAV ke MP3 (mempertahankan kualitas asli)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# Contoh: Konversi MP3 ke WAV (format standar PCM 16-bit)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# Contoh: Konversi M4A ke AAC (ekstrak/konversi audio Apple)
ffmpeg -i input.m4a -c:a copy output.aac  # Ekstrak langsung tanpa re-encoding
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac  # Re-encode ke bit rate 256k
# Contoh: Konversi FLAC lossless ke Opus (kompresi tinggi)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus
T: Apakah saya dapat melihat rentang waktu untuk setiap kalimat?

Ya. Hasil pengenalan ucapan mencakup timestamp awal dan akhir untuk setiap kalimat, yang menentukan rentang waktunya.

T: Mengenali file audio lokal

Anda dapat mengenali file lokal dengan dua cara:

  • Langsung berikan jalur file lokal: Metode ini mengembalikan hasil pengenalan lengkap setelah memproses seluruh file. Gunakan pendekatan ini ketika umpan balik segera tidak diperlukan.

    Lihat panggilan non-streaming. Berikan jalur file ke metode call dari kelas Recognition untuk langsung mengenali file audio yang direkam.

  • Konversi file lokal menjadi aliran biner: Metode ini mengalirkan hasil pengenalan saat memproses file. Gunakan pendekatan ini untuk skenario yang memerlukan umpan balik segera.

    Lihat panggilan streaming dua arah. Gunakan metode send_audio_frame dari kelas Recognition untuk mengirim aliran biner ke server untuk pengenalan.

Troubleshooting

T: Mengapa saya tidak mendapatkan hasil pengenalan?

  1. Periksa apakah pengaturan format audio (format) dan laju sampel (sampleRate/sample_rate) sudah benar dan memenuhi batasan parameter. Berikut adalah contoh kesalahan umum:

    • File audio memiliki ekstensi .wav tetapi sebenarnya dalam format MP3, dan parameter permintaan format diatur ke mp3 (pengaturan parameter salah).

    • Laju sampel audio adalah 3.600 Hz, tetapi parameter permintaan sampleRate/sample_rate diatur ke 48.000 (pengaturan parameter salah).

    Anda dapat menggunakan tool ffprobe untuk mendapatkan informasi tentang properti file audio, seperti kontainer, encoding, laju sampel, dan saluran:

    ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx
  2. Saat Anda menggunakan model paraformer-realtime-v2, periksa bahwa bahasa yang ditentukan dalam language_hints sesuai dengan bahasa aktual audio.

    Contoh: audio sebenarnya dalam bahasa Tiongkok, tetapi language_hints diatur ke en (Inggris).