Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Работа со звуком: миксование


Автор: Veetkoosz 18.12.2009, 00:43
Доброго времени суток.

У меня 2 или более звуковых файлов (mp3/wav). 
Требуется смиксовать их если задана задержка для каждого следующего файла и коэффициент уровня.
То есть, например:
сначала звучит первый файл, через 1.5 сек к нему присоединяется(примешивается/суммируется/миксуется) второй файл с коэффициентом 0,8 (то есть его уровень/громкость мы уменьшаем на заданный коэффициент относительно его изначального звучания). Еще через 2,3 сек примешивается третий файл с коэффициентом 0.72 и т.д.

Подскажите, пожалуйста, с помощью каких классов/функций это можно сделать в C#.

Заранее спасибо.

Автор: Ivankult 22.12.2009, 14:53
Здравствуй. Сразу скажу-не знаю, сработает ли то, что я предложу, ибо не проверял. Про mp3 не знаю, а вот про wav  расскажу.

Как известно, wav файл состоит из 3 частей:
первые 40 байт это название и заголовок.
затем 4 байта - размер тела файла
и затем все это тело. Методом проб определил, что при абсолютной тишине байт равен 131, что примерно равно 2^6. Если вспомнить, как представляется звук в физике, то это функция амплитуды от времени, где в некоторый момент t амплитуда равна некоторому значению x, которое может быть как положительным, так и отрицательным. Это х равно [значение байта]-131. Как мы знаем из школьного курса физики, звук складывается путем сложения значений функций в опр момент времени. Т.е. складываются амплитуды в опр. момент времени. 

Принцип миксирования : читаем файл как массив байтов, читаем второй массив. Вычисляем значение для каждого байта нового(суммарного) массива так: ищем амплитуду в этот момент времени в первом файле и во втором. Затем складываем и обратно преобразуем в цифровую систему(прибавляем 131). олько надо учитывать, что полученное число не может быть больше 255. А коэфициент громкости-на это число умножаем амплитуду, перед сложением. 

В реализации много тонких моментов и подводных камней, и вообще не факт, что метод будет работать. напишите что получится, может пригодится. Да и интересно же!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)