Форум: "Media";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизКак проиграть несколько звуков одновременно? Найти похожие ветки
← →
Sour Smile (2006-03-01 12:18) [0]Если извлекать звуки командой
sndPlaySound(Pointer(FileName), SND_ASYNC)
, то проигрывание предыдущего звука прерывается...
Один из вариантов я нашёл здесь: http://www.swissdelphicenter.ch/en/printcode.php?id=1643
Но подходит, только если оба звука должны начинаться в одно и то же время. Мне же нужно, чтобы звуки начинались в произвольное время, давая возможность звукам начавшимся ранее доиграть до конца (но и не ждать их завершения, т.е. самому звучать и другим не мешать :))).
Как это можно реализовать?
← →
Сергей М. © (2006-03-01 12:35) [1]
> Мне же нужно, чтобы звуки начинались в произвольное время
Ну так и вызывай соответствующие SendMCICommand("play", ..) в произвольное (нужное) тебе время !
В чем проблема-то ?
← →
Sour Smile (2006-03-01 14:41) [2]Да вобщем как бы и работает, но...
Если я говорю:SendMCICommand("play "C:\xyz\BackgroundMusic.wav"");
- начинает звучать.
Потом говорю:SendMCICommand("play "C:\xyz\AnotherMusic.wav"");
- действительно звучат вместе два звука.
Но вот пока не проиграет до концаAnotherMusic.wav
, вызовыSendMCICommand("play "C:\xyz\AnotherMusic.wav"");
бесполезны... Файл то ли блокируется на чтение... Не копировать же файлAnotherMusic.wav
под разными именами столько раз, сколько его копий должно звучать одновременно... :)
← →
Сергей М. © (2006-03-01 14:55) [3]
> Sour Smile (01.03.06 14:41) [2]
Ах вот ты о чем !
Ну тогда тебе прямая дорога в DirectSound
← →
Sour Smile (2006-03-01 15:22) [4]
> Сергей М. © (01.03.06 14:55) [3]
> > Sour Smile (01.03.06 14:41) [2]
> Ах вот ты о чем !
> Ну тогда тебе прямая дорога в DirectSound
:) Да хотелось бы обойтись без экстремала... :)))
Нет, если бы я действительно, что-то серьёзное писал - тогда да. А это я пишу знакомой девушке для диплома. Ей же потом прийдётся объяснять, чего "она" там наворотила... :)))
А я сам с DirectX знаком только на уровне DelphiX и то весьма отдалённо...
← →
Сергей М. © (2006-03-01 15:36) [5]
> Ей же потом прийдётся объяснять, чего "она" там наворотила
Ну а в противном случае ей придется объяснять, почему она ничего путного не "наворотила" из того что требовалось по теме диплома.
Без программного смешивания аудиопотоков (будь оно в недрах DSound, либо еще какой-либо спецбиблиотеки или прямо в аппликации) тут вряд ли обойтись.
Можно еще ASIO предложить, но это по сложности примерно из той же оперы что и DSound
← →
Sour Smile (2006-03-01 16:53) [6]
> Сергей М. © (01.03.06 15:36) [5]
> Без программного смешивания аудиопотоков (будь оно в недрах
> DSound, либо еще какой-либо спецбиблиотеки или прямо в аппликации)
> тут вряд ли обойтись.
Если уж речь зашла об этом, не мог бы ты чуть поподробнее расказать, по какому алгоритму смешивать два и более WAV"а (в формате PCM), для последующего вывода с помощью waveOutWrite? Насколько я знаю в PCM каждый байт это уровень громкости (сигнала) в данный момент времени от -127 до +127 (это для восьмибитного PCM, ну и плюс для каждого канала).
Обычное среднее арифметическое, или как то более хитро?
← →
Jeer © (2006-03-01 16:57) [7]s = a*X + (1-a)*Y
0=< a <=1 - коэфф. соотношения сигналов X и Y
← →
Sour Smile (2006-03-01 17:19) [8]
> Jeer © (01.03.06 16:57) [7]
> s = a*X + (1-a)*Y
> 0=< a <=1 - коэфф. соотношения сигналов X и Y
То есть, если я хочу что бы оба сигнала были равносильными я должен задать a=0.5 и тогда получается формула среднего арифметического. Но всё равно странно...
Допустим я сначала выводил всего один WAV-PCM один к одному (т.е. как прочитал из файла или памяти, так и вывел в waveOutWrite). Теперь допустим добавляется ещё один WAV-PCM который нужно смикшировать и я применяю формулу среднего арифметического. Но допустим второй WAV-PCM - тишина (все байты равны нулю), тогда получится: s = 0.5*X +0.5*Y = 0.5*X + 0.5*0 = 0.5*X , т.е. при добавлении "тишины" снижается в два раза уровень первого сигнала, а по идее тишина какбы не должна влиять на уровень звука... :(
← →
Jeer © (2006-03-01 18:34) [9]И что, в паузе между словами одного исполнителя должна в два раза увеличиваться громкость второго ?
А если и там и там пауза ?
Может надо довести уровень шума до максимума в это случае ?
Ты уж реши чего тебе надо - автоматическое управление общей громкостью или статическое микширование сигналов с заданным соотношением.
"Подумай, может и получится" (С)
← →
XProger © (2006-03-01 19:09) [10]http://xproger.mirgames.ru/?id=2&page=2 // Sound module v0.3
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c