Откриване на сила на звука или тишина в Media Foundation

Работя върху разработването на медиен плейър, базиран на платформата Media Foundation на Microsoft. От жизненоважно значение за безпроблемната работа на програмата е тя да може да прави две неща: да открива всяка тишина в началото или края на файл и да извършва нормализиране на аудио файл. И двете неща включват откриване на "обем" или "сила на звука".

Въз основа на изследванията, които направих досега, това би включвало използването на IMFSourceReader за извличане на всички обекти IMFMediaSample и след това за всяка проба извличане на всеки и всички обекти IMFMediaBuffer.

При заключване на буфера ще имам байта данни, съдържащи се в него. Как да интерпретирам тези данни по такъв начин, че да определя "сила на звука" и след това да манипулирам данните, за да коригирам силата на звука?


person Michael Buckman    schedule 12.08.2014    source източник


Отговори (1)


За да анализирате файла, трябва само да създадете четец на източник за файла и след това прочетете всяка аудио-извадка.

За да промените стойностите във файла, има две опции, в зависимост от това какво искате да направите.

Можете да създадете MFT и го използвайте в MediaSession, за да промените стойностите по време на възпроизвеждане или прекодиране.

Или можете просто да внедрите кода в програмата си и да промените стойностите, които получавате от четеца на източника (като в режим на анализ) и да ги запишете на записващ запис. И в двата варианта работите с буферите на IMFSample.

person CPlusSharp    schedule 13.08.2014
comment
При заключване на IMFMediaBuffer ще имам байтовете данни, съдържащи се в него. Как да интерпретирам тези данни по отношение на силата на звука или силата на звука? По какъв начин мога да изчисля нова стойност на силата на звука въз основа на данните? - person Michael Buckman; 14.08.2014
comment
Форматът на байтовете в извадката зависи от Mediatype. Описание за PCM може да се намери на MSDN. - person CPlusSharp; 14.08.2014
comment
И така, за да използвам пример и да проверя разбирането си, нека вземем файловия формат MP3. Всеки MP3 образец или рамка има заглавка от 32 бита (или четири байта). Ако пренебрегна първите четири байта на IMFMediaSample и неговите буфери, а останалите байтове в извадката ще бъдат моите аудио данни, нали? - person Michael Buckman; 15.08.2014
comment
Бих работил със суровите PCM данни. Ако имате MP3 Audio, първо трябва да го декодирате. Ако използвате Source Reader или MFT, можете да го конфигурирате така, че да получавате декодираните данни. След това в PCM потока имате байтовите данни, както е описано в MSDN връзката в последния ми коментар. - person CPlusSharp; 15.08.2014
comment
И така, като използвате необработени PCM данни като база, по същество създавате общ знаменател и елиминирате нуждата от знания за различните формати, нали? - person Michael Buckman; 15.08.2014