|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.09.2013, 21:36 | #1 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
Аккорд (смешивание частот нот)
Привет! Давно искал но что то так и не нашел ответ на вопрос... Как правильно смешать ну допустим 2 звуковых сигнала синусоидальной формы разной частоты. При заполнении буферов структуры TWAVEFORMATEX на заполнение одного 16 битного сэмпла у нас есть диапазон -32768..32767. То есть максимум амплитуда у 1 синусоидального сигнала будет 32767 а минимум -32768. А если смешивать 2 сигнала с амплитудой 32767 то при их смешивании придется вылезать за диапазон. Есть ли алгоритм как сделать это грамотно и без тресков?)
|
04.09.2013, 23:32 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...в общем случае, берем по отсчету из каждого сигнала для заданного момента времени, складываем, делим пополам.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
05.09.2013, 00:09 | #3 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
так то оно так но это 2 сигнала... а если их например 10? тогда при проигрывании одного сигнала он поделится на 10 и будет один звучать совсем тихо.... просто я пытаюсь это сформировать в 1 потоке... пробовал запускать отдельными потоками и звуковая карта нормально все плюсует и никаких тресков и все играет с 1 установленной громкостью... но если так делать то чтобы услышать 3 частоты с 1 громкостью надо запустить 3 потока... а если их 20 или 100? тогда как?)
|
05.09.2013, 00:31 | #4 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
05.09.2013, 01:00 | #5 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
в общем выкладываю программу. В ней каждая одиночно звучащая нота звучит с урезанной громкостью в 10 раз... как сделать чтоб звучало при любом раскладе(и одиночно и одновременно и тд...) с максимальной громкостью?
|
05.09.2013, 09:59 | #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 |
12.09.2013, 02:11 | #7 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
да так то оно так но смотрите.. по вашему методу (я его кстати уже думал раньше) выходит что если я нажимаю 1 клавишу то она звучит во весь диапазон... но если я затем нажимаю вторую то этим самым я сразу понижаю громкость первой в 2 раза и тд.. это очень некрасиво звучит... почему когда в разных потоках запускаю то звуковуха все нормально смешивает?
|
12.09.2013, 10:58 | #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 |
17.09.2013, 18:15 | #9 | |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 112
|
Цитата:
|
|
25.09.2013, 23:10 | #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 |