DSP Tangkapan Suara

Objek yang merangkum beberapa DSP yang terkait dengan pengambilan suara.

CLSID

CLSID_CWMAudioAEC

Antarmuka

Properti

Properti Deskripsi
MFPKEY_WMAAECMA_DEVICE_INDEXES Menentukan perangkat audio mana yang digunakan DMO untuk menangkap dan merender audio.
MFPKEY_WMAAECMA_DEVICEPAIR_GUID Mengidentifikasi kombinasi perangkat audio yang saat ini digunakan aplikasi.
MFPKEY_WMAAECMA_DMO_SOURCE_MODE Menentukan apakah DMO menggunakan mode sumber atau mode filter.
MFPKEY_WMAAECMA_FEATR_AES Menentukan berapa kali DMO melakukan supresi gema akustik (AES) pada sinyal sisa.
MFPKEY_WMAAECMA_FEATR_AGC Menentukan apakah DMO melakukan kontrol perolehan otomatis.
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP Menentukan apakah DMO melakukan pengklipan pusat.
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH Menentukan durasi gema yang dapat ditangani oleh algoritma pembatalan gema akustik (AEC).
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE Menentukan ukuran bingkai audio.
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM Menentukan sinar mana yang digunakan DMO untuk pemrosesan array mikrofon.
MFPKEY_WMAAECMA_FEATR_MICARR_MODE Menentukan bagaimana DMO melakukan pemrosesan array mikrofon.
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC Menentukan apakah DMO melakukan pra-pemrosesan array mikrofon.
MFPKEY_WMAAECMA_FEATR_NOISE_FILL Menentukan apakah DMO melakukan pengisian kebisingan.
MFPKEY_WMAAECMA_FEATR_NS Menentukan apakah DMO melakukan penekanan kebisingan.
MFPKEY_WMAAECMA_FEATR_VAD Menentukan jenis deteksi aktivitas suara yang dilakukan DMO.
MFPKEY_WMAAECMA_FEATURE_MODE Memungkinkan aplikasi untuk mengambil alih pengaturan default pada berbagai properti.
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER Menentukan apakah DMO menerapkan pembatas perolehan mikrofon.
MFPKEY_WMAAECMA_MICARRAY_DESCPTR Menentukan geometri array mikrofon.
MFPKEY_WMAAECMA_QUALITY_METRICS Mengambil metrik kualitas untuk AEC.
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS Menentukan apakah DMO menyimpan statistik stempel waktu dalam registri.
MFPKEY_WMAAECMA_SYSTEM_MODE Mengatur mode pemrosesan.

 

Keterangan

Tidak seperti DSP lainnya, objek pengambilan suara merangkum beberapa DSP dalam satu objek, dan objek hanya objek DMO (tidak mengimplementasikan IMFTransform). DMO tangkapan suara mencakup komponen DSP berikut:

  • Pembatalan gema akustik (AEC)
  • Pemrosesan array mikrofon
  • Penekanan kebisingan
  • Kontrol perolehan otomatis
  • Deteksi aktivitas suara

Aplikasi dapat mengaktifkan dan menonaktifkan setiap komponen satu per satu.

DMO tangkapan suara mendukung dua mode operasi, mode filter , dan mode sumber . Dalam mode filter, aplikasi mengirimkan sampel audio dari mikrofon dan dari baris speaker ke DMO, dan DMO menghasilkan output.

Dalam mode sumber, aplikasi tidak perlu mengirimkan sampel ke DMO. Sebaliknya, DMO mengelola semua operasi pada perangkat audio, termasuk menginisialisasi perangkat, menangkap dan menyinkronkan aliran audio, menghitung stempel waktu, dan mengambil geometri array mikrofon. Menggunakan mode sumber, aplikasi hanya mengonfigurasi DMO, dan output dari DMO adalah sinyal mikrofon yang bersih dan diproses. Mode sumber secara signifikan lebih mudah digunakan daripada mode filter, dan direkomendasikan untuk sebagian besar aplikasi.

Saat ini DMO tangkapan suara hanya mendukung pembatalan gema akustik saluran tunggal (AEC), sehingga output dari baris speaker harus satu saluran. Jika pemrosesan array mikrofon dinonaktifkan, input multi-saluran dilipat ke satu saluran untuk pemrosesan AEC. Jika pemrosesan array mikrofon dan pemrosesan AEC diaktifkan, AEC dilakukan pada setiap elemen mikrofon sebelum pemrosesan array mikrofon.

Pemrosesan Array Mikrofon

Array mikrofon adalah sekumpulan mikrofon yang diposisikan dengan erat. Array mikrofon mencapai arah yang lebih baik daripada satu mikrofon, karena gelombang akustik tiba di setiap mikrofon pada waktu yang sedikit berbeda. Untuk informasi selengkapnya tentang array mikrofon, lihat artikel web Dukungan Array Mikrofon di Windows Vista dan Cara Membangun dan Menggunakan Array Mikrofon untuk Windows Vista.

Menggunakan DSP Tangkapan Suara

Untuk menggunakan DSP Voice Capture, lakukan langkah-langkah berikut.

1. Menginisialisasi DMO

Buat DMO pengambilan suara dengan memanggil CoCreateInstance dengan CLSID_CWMAudioAEC CLSID. DSDP tangkapan suara hanya mengekspos antarmuka IMediaObject dan IPropertyStore , sehingga hanya dapat digunakan sebagai DMO.

DMO default ke mode sumber. Untuk memilih mode filter, atur properti MFPKEY_WMAAECMA_DMO_SOURCE_MODE ke VARIANT_FALSE.

Selanjutnya, konfigurasikan properti internal DMO dengan menggunakan antarmuka IPropertyStore . Satu-satunya properti yang harus ditetapkan aplikasi adalah properti MFPKEY_WMAAECMA_SYSTEM_MODE . Properti ini mengonfigurasi alur pemrosesan dalam DMO. Properti lainnya bersifat opsional.

2. Atur Format Input dan Output

Jika Anda menggunakan DMO dalam mode filter, atur format input dengan memanggil IMediaObject::SetInputType. Format input dapat berupa hampir semua jenis audio TITIK mengambang PCM atau IEEE yang tidak dikompresi yang valid. Jika format input tidak cocok dengan format output, DMO secara otomatis melakukan konversi laju sampel.

Jika Anda menggunakan DMO dalam mode sumber, jangan atur format input. DMO secara otomatis mengonfigurasi format input berdasarkan perangkat audio.

Dalam salah satu mode, atur format output dengan memanggil IMediaObject::SetOutputType. DMO dapat menerima format output berikut:

  • Subjenis: MEDIASUBTYPE_PCM atau MEDIASUBTYPE_IEEE_FLOAT
  • Blok format: WAVEFORMAT atau WAVEFORMATEX
  • Sampel per detik: 8.000; 11,025; 16,000; atau 22.050
  • Saluran: 1 untuk mode khusus AEC, 2 atau 4 untuk pemrosesan array mikrofon
  • Bit per sampel: 16

Kode berikut mengatur jenis output ke audio PCM saluran tunggal 16-bit:

DMO_MEDIA_TYPE mt;  // Media type.
mt.majortype = MEDIATYPE_Audio;
mt.subtype = MEDIASUBTYPE_PCM;
mt.lSampleSize = 0;
mt.bFixedSizeSamples = TRUE;
mt.bTemporalCompression = FALSE;
mt.formattype = FORMAT_WaveFormatEx;

// Allocate the format block to hold the WAVEFORMATEX structure.
hr = MoInitMediaType(&mt, sizeof(WAVEFORMATEX));
if (SUCCEEDED(hr))
{
    WAVEFORMATEX *pwav = (WAVEFORMATEX*)mt.pbFormat;
    pwav->wFormatTag = WAVE_FORMAT_PCM;
    pwav->nChannels = 1;
    pwav->nSamplesPerSec = 16000;
    pwav->nAvgBytesPerSec = 32000;
    pwav->nBlockAlign = 2;
    pwav->wBitsPerSample = 16;
    pwav->cbSize = 0;

    // Set the output type.
    if (SUCCEEDED(hr))
    {
        hr = pDMO->SetOutputType(0, &mt, 0); 
    }
    // Free the format block.
    MoFreeMediaType(&mt);
}

3. Memproses Data

Sebelum memproses data apa pun, disarankan untuk memanggil IMediaObject::AllocateStreamingResources. Metode ini mengalokasikan sumber daya yang digunakan secara internal oleh DMO. Panggil AllocateStreamingResources setelah langkah-langkah yang tercantum sebelumnya, bukan sebelumnya. Jika Anda tidak memanggil metode ini, DMO secara otomatis mengalokasikan sumber daya saat pemrosesan data dimulai.

Jika Anda menggunakan DMO dalam mode filter, Anda harus meneruskan data input ke DMO dengan memanggil IMediaObject::P rocessInput. Data audio dari mikrofon masuk ke streaming 0, dan data audio dari baris speaker masuk ke streaming 1. Jika Anda menggunakan DMO dalam mode sumber, Anda tidak perlu memanggil ProcessInput.

Untuk mendapatkan data output dari DSP, lakukan langkah-langkah berikut:

  1. Buat objek buffer untuk menyimpan data output. Objek buffer harus mengimplementasikan antarmuka IMediaBuffer . Ukuran buffer tergantung pada persyaratan aplikasi Anda. Mengalokasikan buffer yang lebih besar dapat mengurangi kemungkinan gangguan yang terjadi.
  2. Deklarasikan struktur DMO_OUTPUT_DATA_BUFFER dan atur anggota pBuffer untuk menunjuk ke objek buffer Anda.
  3. Teruskan struktur DMO_OUTPUT_DATA_BUFFER ke metode IMediaObject::P rocessOutput .
  4. Terus panggil metode ini selama DMO memiliki data output. DSP menandakan bahwa DSP memiliki lebih banyak output dengan mengatur bendera DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE di anggota dwStatus dari struktur DMO_OUTPUT_DATA_BUFFER .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2008 [hanya aplikasi desktop]
Header
Wmcodecdsp.h
DLL
Mfwmaaec.dll

Lihat juga

Prosesor Sinyal Digital