Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.049 c
2-1156939673
Neket
2006-08-30 16:07
2006.09.17
Qwery


1-1154434680
Darvin
2006-08-01 16:18
2006.09.17
Особенности поддержки стиля WinXP + Manifest


3-1153121773
dddd
2006-07-17 11:36
2006.09.17
Как в TQuery получить список имен полей, которые вернул запрос?


1-1154589474
Mechanic
2006-08-03 11:17
2006.09.17
TGraphicControl не принимает MouseWheel


15-1156998605
cyborg
2006-08-31 08:30
2006.09.17
Кто тут монитор хотел?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский