Bagikan melalui


Membuat Grafik Pengambilan Audio

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Langkah pertama untuk aplikasi pengambilan audio adalah membangun grafik filter. Konfigurasi grafik bergantung pada jenis file yang ingin Anda buat.

  • File AVI audio saja: Filter Pengambilan Audio ke filter AVI Mux , dan filter AVI Mux ke Penulis File .
  • File WAV: Filter Pengambilan Audio ke Sampel Filter WavDest ke Filter Penulis File
  • File Windows Media Audio (.wma): Filter Pengambilan Audio ke filter Penulis WM ASF .

Filter WavDest disediakan sebagai sampel SDK. Untuk menggunakannya, Anda harus membangun dan mendaftarkan filter.

Untuk menggunakan filter Penulis ASF, Anda harus menginstal Windows Media SDK dan mendapatkan kunci perangkat lunak untuk membuka kunci filter. Untuk informasi selengkapnya, lihat Menggunakan Media Windows di DirectShow.

Anda dapat membuat grafik filter menggunakan objek Capture Graph Builder , atau Anda dapat membuat grafik "secara manual"; artinya, minta aplikasi menambahkan dan menghubungkan setiap filter secara terprogram. Artikel ini menjelaskan pendekatan manual. Untuk informasi selengkapnya tentang menggunakan Capture Graph Builder, lihat Pengambilan Video. Sebagian besar informasi dalam artikel tersebut berlaku untuk grafik audio saja.

Menambahkan Perangkat Pengambilan Audio

Karena Filter Tangkapan Audio berkomunikasi dengan perangkat keras tertentu, Anda tidak bisa hanya memanggil CoCreateInstance untuk membuat filter. Sebagai gantinya, gunakan Enumerator Perangkat Sistem untuk menghitung semua perangkat dalam kategori "Sumber Tangkapan Audio", yang diidentifikasi oleh pengidentifikasi kelas CLSID_AudioInputDeviceCategory.

Enumerator Perangkat Sistem mengembalikan daftar moniker untuk perangkat; setiap nama ramah moniker sesuai dengan nama perangkat. Pilih salah satu moniker yang dikembalikan dan gunakan untuk membuat instans Filter Pengambilan Audio untuk perangkat tersebut. Tambahkan filter ke grafik filter. Perangkat perekaman audio pilihan pengguna muncul terlebih dahulu dalam daftar moniker. (Pengguna memilih perangkat pilihan dengan mengklik Suara dan Multimedia di Panel Kontrol.)

Untuk informasi selengkapnya, lihat Menggunakan Enumerator Perangkat Sistem.

Untuk menentukan input mana yang akan diambil, dapatkan antarmuka IAMAudioInputMixer dari filter Audio Capture dan panggil metode put_Enable untuk menentukan input. Namun, salah satu batasan dari metode ini adalah bahwa perangkat keras yang berbeda dapat menggunakan string yang berbeda untuk mengidentifikasi inputnya. Misalnya, satu kartu dapat menggunakan "Mikrofon" untuk mengidentifikasi input mikrofon dan kartu lain dapat menggunakan "Mikrofon". Untuk menentukan pengidentifikasi string untuk input tertentu, gunakan fungsi Multimedia Windows waveOutOpen, mixerOpen, dan mixerGetLineInfo. Lihat topik MSDN Kueri Perangkat Mixer untuk informasi selengkapnya.

Menambahkan Multiplexer dan Penulis File

Grafik pengambilan audio harus berisi multiplexer dan penulis file.

Multiplexer adalah filter yang menggabungkan satu atau beberapa aliran ke dalam satu aliran dengan format tertentu. Misalnya, filter AVI Mux menggabungkan aliran audio dan video ke dalam aliran AVI yang saling terjaga. Untuk pengambilan audio, biasanya hanya ada satu aliran audio, tetapi data audio masih harus dipaketkan ke dalam format yang dapat disimpan ke disk, yang memerlukan multiplexer. Pilihan multiplexer tergantung pada format target:

  • AVI: AVI Multiplexer
  • WAV: WavDest
  • WMA: Penulis ASF

Penulis file adalah filter yang menulis data masuk ke file. Untuk file AVI atau WAV, gunakan Filter Penulis File. Untuk file WMA, PENULIS ASF bertindak sebagai multiplexer dan penulis file.

Setelah Anda membuat filter dan menambahkannya ke grafik, sambungkan pin output Filter Pengambilan Audio ke pin input multiplexer, dan sambungkan pin output multiplekser ke pin input penulis filter (dengan asumsi ini adalah filter terpisah). Untuk menentukan nama file, kueri penulis file untuk antarmuka IFileSinkFilter dan panggil metode IFileSinkFilter::SetFileName .

Contoh Kode

Contoh berikut menunjukkan cara membuat grafik pengambilan audio menggunakan filter WavDest. Prinsip yang sama berlaku untuk jenis file lainnya.

IBaseFilter *pSrc = NULL, *pWaveDest = NULL, *pWriter = NULL;
IFileSinkFilter *pSink= NULL;
IGraphBuilder *pGraph;

// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
    IID_IGraphBuilder, (void**)&pGraph);

// This example omits error handling.

// Not shown: Use the System Device Enumerator to create the 
// audio capture filter.

// Add the audio capture filter to the filter graph. 
hr = pGraph->AddFilter(pSrc, L"Capture");

// Add the WavDest and the File Writer.
hr = AddFilterByCLSID(pGraph, CLSID_WavDest, L"WavDest", &pWaveDest);
hr = AddFilterByCLSID(pGraph, CLSID_FileWriter, L"File Writer", &pWriter);

// Set the file name.
hr = pWriter->QueryInterface(IID_IFileSinkFilter, (void**)&pSink);
hr = pSink->SetFileName(L"C:\\MyWavFile.wav", NULL);

// Connect the filters.
hr = ConnectFilters(pGraph, pSrc, pWaveDest);
hr = ConnectFilters(pGraph, pWaveDest, pWriter);

// Not shown: Release interface pointers.

Contoh ini menggunakan fungsi yang AddFilterByCLSID dijelaskan dalam Menambahkan Filter oleh CLSID, dan fungsi yang ConnectFilters dijelaskan dalam Sambungkan Dua Filter. Tidak satu pun dari ini adalah DIRECTShow API.

Pengambilan Audio