Memproses Data Audio

[Fitur yang terkait dengan halaman ini, Pemutar Media Windows SDK, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer. MediaPlayer telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer alih-alih Pemutar Media Windows SDK, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Implementasi default DoProcessOutput dimulai dengan mengambil pointer ke struktur WAVEFORMATEX yang valid, persis seperti yang dilakukan di AllocateStreamingResources. Kemudian menggunakan informasi dalam struktur tersebut untuk menghitung jumlah sampel dalam buffer input yang menunggu untuk diproses. Kode berikut berasal dari implementasi default:

// Get a pointer to the valid WAVEFORMATEX structure
// for the current media type.
WAVEFORMATEX *pWave = ( WAVEFORMATEX * ) m_mtInput.pbFormat;

// Calculate the number of samples to process.
DWORD dwSamplesToProcess = (*cbBytesProcessed / pWave->nBlockAlign) * pWave->nChannels;

Kemudian, kode memeriksa anggota wBitsPerSample untuk menentukan kedalaman bit audio. Nilai ini digunakan dalam pernyataan pengalih untuk menyediakan pemrosesan terpisah untuk audio 8-bit dan 16-bit.

Perbedaan Antara Audio 8-bit dan 16-bit

Ada perbedaan penting antara audio 8-bit dan 16-bit. Oleh karena itu, rutinitas pemrosesan untuk menciptakan efek gema berbeda. Dua format berbeda dengan cara berikut:

  • Setiap format memiliki ukuran sampel yang berbeda: sampel 8-bit masing-masing menempati satu byte memori, sementara sampel 16-bit masing-masing menempati dua byte.
  • Setiap format mewakili amplitudo audio secara berbeda. Audio 8-bit diwakili oleh bilangan bulat yang tidak ditandatangani dengan rentang dari 0 hingga 255; nilai 128 mewakili keheningan. Audio 16-bit diwakili oleh bilangan bulat bertanda tangan dengan rentang -32768 hingga 32767; nilai nol mewakili keheningan.

Meskipun proses pembuatan efek gema pada dasarnya identik untuk setiap format, detailnya harus sedikit berbeda.

Menerapkan CEcho::D oProcessOutput