![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
![]()
Привет! Давно искал но что то так и не нашел ответ на вопрос... Как правильно смешать ну допустим 2 звуковых сигнала синусоидальной формы разной частоты. При заполнении буферов структуры TWAVEFORMATEX на заполнение одного 16 битного сэмпла у нас есть диапазон -32768..32767. То есть максимум амплитуда у 1 синусоидального сигнала будет 32767 а минимум -32768. А если смешивать 2 сигнала с амплитудой 32767 то при их смешивании придется вылезать за диапазон. Есть ли алгоритм как сделать это грамотно и без тресков?)
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...в общем случае, берем по отсчету из каждого сигнала для заданного момента времени, складываем, делим пополам.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
![]()
так то оно так но это 2 сигнала... а если их например 10? тогда при проигрывании одного сигнала он поделится на 10 и будет один звучать совсем тихо.... просто я пытаюсь это сформировать в 1 потоке... пробовал запускать отдельными потоками и звуковая карта нормально все плюсует и никаких тресков и все играет с 1 установленной громкостью... но если так делать то чтобы услышать 3 частоты с 1 громкостью надо запустить 3 потока... а если их 20 или 100? тогда как?)
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
![]()
в общем выкладываю программу. В ней каждая одиночно звучащая нота звучит с урезанной громкостью в 10 раз... как сделать чтоб звучало при любом раскладе(и одиночно и одновременно и тд...) с максимальной громкостью?
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...разве не в 7?
![]() Код:
К примеру, складываем амплитуды 2-х каналов: |Am1| + |Am2| < 32767 К примеру, складываем амплитуды 5-х каналов: |Am1| + |Am2| + |Am3| + |Am4| + |Am5| < 32767 Тогда, максимальная амплитуда каждого из каналов: Amn = 32767 div n Это гарантирует, что сумма амплитуд всех каналов, звучащих на данный момент не превысит int16. А что мы видим в вашем коде выше, у вас это деление забито константой, т.е. звучит-не звучит канал из ваших семи, а амплитуда делится на всех. Ферштеен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
![]()
да так то оно так но смотрите.. по вашему методу (я его кстати уже думал раньше) выходит что если я нажимаю 1 клавишу то она звучит во весь диапазон... но если я затем нажимаю вторую то этим самым я сразу понижаю громкость первой в 2 раза и тд.. это очень некрасиво звучит... почему когда в разных потоках запускаю то звуковуха все нормально смешивает?
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Согласен, да, именно так - результирующая громкость будет в n-раз ниже. Однако никто не мешает опосля уровень при смешивании поднять общий в 200% (для двух сигналов).
Вот тут "Описание API вызова библиотеки MixerWAV.DLL" это можно делать с двумя WAV PCM одноканальными (работа непосредственно с отсчетами, уровень результирующий поднимаем-опускаем-регулирем скорость) Видео: ![]() http://www.youtube.com/watch?v=Lv0J2-WD2XE
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
![]()
Есть еще какие нибудь варианты как увеличить общую громкость после суммирования сигналов?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Трекерная музыка, воспроизведение нот(С++) | Chuguev | Помощь студентам | 9 | 02.08.2013 12:46 |
Получение нот из waf формата | aram111 | Помощь студентам | 8 | 05.10.2011 20:35 |
Смешивание | AngelOfDeathSX | Мультимедиа в Delphi | 1 | 16.10.2010 21:32 |
Пример кода для воспроизведения нот - частоты нот для 80-ти клавишного пианино | mutabor | Свободное общение | 8 | 09.01.2010 23:48 |
Воспроизведение Midi-нот | desperado | Общие вопросы Delphi | 2 | 26.06.2007 13:22 |