Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со звуком: миксование 
:(
    Опции темы
Veetkoosz
Дата 18.12.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Доброго времени суток.

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

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

Заранее спасибо.
PM MAIL   Вверх
Ivankult
Дата 22.12.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



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

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

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

В реализации много тонких моментов и подводных камней, и вообще не факт, что метод будет работать. напишите что получится, может пригодится. Да и интересно же!
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.