|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Отключение звукового канала
Здравствуйте, уважаемые форумчане!
В процессе работы над дипломом встала задача: необходимо простейшим образом отключить один из каналов наушников. При воспроизведении аудиофайла звук должен идти только через левый наушник или только через правый. Как мне представляется, это можно реализовать за счет регулировки баланса каналов или регулировки уровня громкости по разным каналам в отдельности. Я использовал первый вариант с помощью библиотеки BASS 2.4 и функции: BASS_ChannelSetAttribute(<имя_потока>, BASS_ATTRIB_PAN, -1); //Насколько я умею пользоваться поиском: значение "-1" - играет левый канал; значение "+1" - правый; значение "0" - оба. Но, в данном случае звук распределяется не "100%-0%", а, на слух, порядка "90%-10%". Вот, очень бы хотелось решить данную загвоздку, чтобы второй канал оставался абсолютно чистым и не издавал никаких звуков Возможно, это можно реализовать какой-нибудь одной строкой, просто отключив не нужный канал? Я чувствую, истина где-то рядом.. Заранее всем благодарен! |
#2
|
||||
|
||||
Одной строкой не получится, нужно играться с командами auxGetVolume, auxSetVolume.
Код:
type TVolumeType = record case Integer of 0: (LongVolume: Longint); 1: (LeftVolume, RightVolume : Word); end; var FSound : Integer; procedure VolumeInit; var AuxCaps : TAuxCaps; I : Integer; begin FSound := -1; for I := 0 to auxGetNumDevs - 1 do begin auxGetDevCaps(I, @AuxCaps, SizeOf(AuxCaps)); if ((AuxCaps.dwSupport and AUXCAPS_VOLUME) <> 0) and ((AuxCaps.wTechnology and AUXCAPS_CDAUDIO <> 0)) then begin FSound := I; Break; end; end; end; procedure SetVolume(Volume : Byte); var Vol : TVolumeType; begin Vol.LeftVolume := Volume shl 8; Vol.RightVolume := Vol.LeftVolume; auxSetVolume(FSound, Vol.LongVolume); end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |