![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Veetkoosz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 30.12.2008 Репутация: нет Всего: нет |
Доброго времени суток.
У меня 2 или более звуковых файлов (mp3/wav). Требуется смиксовать их если задана задержка для каждого следующего файла и коэффициент уровня. То есть, например: сначала звучит первый файл, через 1.5 сек к нему присоединяется(примешивается/суммируется/миксуется) второй файл с коэффициентом 0,8 (то есть его уровень/громкость мы уменьшаем на заданный коэффициент относительно его изначального звучания). Еще через 2,3 сек примешивается третий файл с коэффициентом 0.72 и т.д. Подскажите, пожалуйста, с помощью каких классов/функций это можно сделать в C#. Заранее спасибо. |
|||
|
||||
| Ivankult |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Здравствуй. Сразу скажу-не знаю, сработает ли то, что я предложу, ибо не проверял. Про mp3 не знаю, а вот про wav расскажу.
Как известно, wav файл состоит из 3 частей: первые 40 байт это название и заголовок. затем 4 байта - размер тела файла и затем все это тело. Методом проб определил, что при абсолютной тишине байт равен 131, что примерно равно 2^6. Если вспомнить, как представляется звук в физике, то это функция амплитуды от времени, где в некоторый момент t амплитуда равна некоторому значению x, которое может быть как положительным, так и отрицательным. Это х равно [значение байта]-131. Как мы знаем из школьного курса физики, звук складывается путем сложения значений функций в опр момент времени. Т.е. складываются амплитуды в опр. момент времени. Принцип миксирования : читаем файл как массив байтов, читаем второй массив. Вычисляем значение для каждого байта нового(суммарного) массива так: ищем амплитуду в этот момент времени в первом файле и во втором. Затем складываем и обратно преобразуем в цифровую систему(прибавляем 131). олько надо учитывать, что полученное число не может быть больше 255. А коэфициент громкости-на это число умножаем амплитуду, перед сложением. В реализации много тонких моментов и подводных камней, и вообще не факт, что метод будет работать. напишите что получится, может пригодится. Да и интересно же! --------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |