![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |