Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.01.2012, 10:45
verifikator verifikator вне форума
Прохожий
 
Регистрация: 18.01.2012
Сообщения: 1
Репутация: 10
По умолчанию Отключение звукового канала

Здравствуйте, уважаемые форумчане!
В процессе работы над дипломом встала задача: необходимо простейшим образом отключить один из каналов наушников. При воспроизведении аудиофайла звук должен идти только через левый наушник или только через правый.
Как мне представляется, это можно реализовать за счет регулировки баланса каналов или регулировки уровня громкости по разным каналам в отдельности.
Я использовал первый вариант с помощью библиотеки BASS 2.4 и функции:
BASS_ChannelSetAttribute(<имя_потока>, BASS_ATTRIB_PAN, -1);
//Насколько я умею пользоваться поиском: значение "-1" - играет левый канал; значение "+1" - правый; значение "0" - оба.
Но, в данном случае звук распределяется не "100%-0%", а, на слух, порядка "90%-10%".
Вот, очень бы хотелось решить данную загвоздку, чтобы второй канал оставался абсолютно чистым и не издавал никаких звуков
Возможно, это можно реализовать какой-нибудь одной строкой, просто отключив не нужный канал? Я чувствую, истина где-то рядом..
Заранее всем благодарен!
Ответить с цитированием
  #2  
Старый 18.01.2012, 11:06
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Одной строкой не получится, нужно играться с командами 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 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter