Elaborazione dei dati audio

[La funzionalità associata a questa pagina, Lettore multimediale Windows SDK, è una funzionalità legacy. È stata sostituita da MediaPlayer. MediaPlayer è stato ottimizzato per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer anziché Lettore multimediale Windows SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

L'implementazione predefinita di DoProcessOutput inizia recuperando un puntatore a una struttura WAVEFORMATEX valida, esattamente come è stata eseguita in AllocateStreamingResources. Usa quindi le informazioni in tale struttura per calcolare il numero di campioni nel buffer di input in attesa di elaborazione. Il codice seguente proviene dall'implementazione predefinita:

// 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;

Il codice controlla quindi il membro wBitsPerSample per determinare la profondità di bit dell'audio. Questo valore viene usato in un'istruzione switch per fornire un'elaborazione separata per l'audio a 8 bit e a 16 bit.

Differenze tra audio a 8 bit e a 16 bit

Esistono differenze importanti tra audio a 8 bit e a 16 bit. Pertanto, le routine di elaborazione per creare l'effetto echo sono diverse. I due formati differiscono nei modi seguenti:

  • Ogni formato ha dimensioni di esempio diverse: ogni esempio a 8 bit occupa un byte di memoria, mentre ogni campione a 16 bit occupa due byte.
  • Ogni formato rappresenta l'ampiezza audio in modo diverso. L'audio a 8 bit è rappresentato da un intero senza segno con un intervallo compreso tra 0 e 255; un valore pari a 128 rappresenta il silenzio. L'audio a 16 bit è rappresentato da un intero con segno con un intervallo compreso tra -32768 e 32767; un valore pari a zero rappresenta il silenzio.

Anche se il processo di creazione dell'effetto echo è fondamentalmente identico per ogni formato, i dettagli devono essere leggermente diversi.

Implementazione di CEcho::D oProcessOutput