Конференция "Media" » MediaPlayer [D7, WinXP]
 
  • Mr.Vlad (11.03.08 23:02) [0]
    Делаю прогу с MediaPlayer'ом, жизненно необходимо сделать регулировку звука, а как?
  • SonicUA (11.03.08 23:19) [1]
    uses
      MPlayer, MMSystem;

    const
      MCI_SETAUDIO = $0873;
      MCI_DGV_SETAUDIO_VOLUME = $4002;
      MCI_DGV_SETAUDIO_ITEM = $00800000;
      MCI_DGV_SETAUDIO_VALUE = $01000000;
      MCI_DGV_STATUS_VOLUME = $4019;

    type
      MCI_DGV_SETAUDIO_PARMS = record
        dwCallback: DWORD;
        dwItem: DWORD;
        dwValue: DWORD;
        dwOver: DWORD;
        lpstrAlgorithm: PChar;
        lpstrQuality: PChar;
      end;

    type
      MCI_STATUS_PARMS = record
        dwCallback: DWORD;
        dwReturn: DWORD;
        dwItem: DWORD;
        dwTrack: DWORD;
      end;

    procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer);
      { Volume: 0 - 1000 }
    var
      p: MCI_DGV_SETAUDIO_PARMS;
    begin
      { Volume: 0 - 1000 }
      p.dwCallback := 0;
      p.dwItem := MCI_DGV_SETAUDIO_VOLUME;
      p.dwValue := Volume;
      p.dwOver := 0;
      p.lpstrAlgorithm := nil;
      p.lpstrQuality := nil;
      mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
        MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));
    end;

    function GetMPVolume(MP: TMediaPlayer): Integer;
    var
       p: MCI_STATUS_PARMS;
    begin
      p.dwCallback := 0;
      p.dwItem := MCI_DGV_STATUS_VOLUME;
      mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p));
      Result := p.dwReturn;
      { Volume: 0 - 1000 }
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SetMPVolume(MediaPlayer1, 500);
    end;

    :)
  • Mr.Vlad (11.03.08 23:20) [2]
    А можно вообще отключить звук в MediaPlayer'e.
    З. Ы. Как выше понятно - 0, а как попроще.
  • Efir (11.03.08 23:49) [3]
    А ноль это разве так сложно?
  • Mr.Vlad (18.03.08 23:41) [4]
    Дело в том
  • Mr.Vlad (18.03.08 23:44) [5]
    что я хочу полностью разобраться в коде, но сам не смог. Может есть какая-нибудь функция типа Mute или как-нибудь ещё?
  • Евгений (14.08.08 16:03) [6]
    Это работает, если MediaPlayer-ом играть mp3 или avi файлы. А если играть wav файлы - то звук не регулируется. А в моей программе необхадима возможность проигрывать любые из этих файлов.
    Как регулировать звук в MediaPlayer-е, когда он проигрывает wav файлы?

    В этом месте:
    mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
       MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));

    MCI_DGV_SETAUDIO_VALUE означает digital video, и похоже, что WAV файл не относится к цифровому видео. В МСДН-е не указаны флаги для WAV устройств в топике для MCI_SETAUDIO :(
  • SonicUA (14.08.08 19:46) [7]
    const
      MCI_SETAUDIO = $0873;
      MCI_DGV_SETAUDIO_VOLUME = $4002;
      MCI_DGV_SETAUDIO_ITEM = $00800000;
      MCI_DGV_SETAUDIO_VALUE = $01000000;
      MCI_DGV_STATUS_VOLUME = $4019;

    type
      MCI_DGV_SETAUDIO_PARMS = record
        dwCallback: DWORD;
        dwItem: DWORD;
        dwValue: DWORD;
        dwOver: DWORD;
        lpstrAlgorithm: PChar;
        lpstrQuality: PChar;
      end;

    type
      MCI_STATUS_PARMS = record
        dwCallback: DWORD;
        dwReturn: DWORD;
        dwItem: DWORD;
        dwTrack: DWORD;
      end;

    procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer);
      { Volume: 0 - 1000 }
    var
      p: MCI_DGV_SETAUDIO_PARMS;
    begin
      { Volume: 0 - 1000 }
      p.dwCallback := 0;
      p.dwItem := MCI_DGV_SETAUDIO_VOLUME;
      p.dwValue := Volume;
      p.dwOver := 0;
      p.lpstrAlgorithm := nil;
      p.lpstrQuality := nil;
      mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
        MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));
    end;

    function GetMPVolume(MP: TMediaPlayer): Integer;
    var
       p: MCI_STATUS_PARMS;
    begin
      p.dwCallback := 0;
      p.dwItem := MCI_DGV_STATUS_VOLUME;
      mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p));
      Result := p.dwReturn;
      { Volume: 0 - 1000 }
    end;

  • SonicUA (14.08.08 19:48) [8]
    Упс,ошибся, не тот код.Вот правильный.
    function TForm1.GetWaveVolume: DWord;
    var
    Woc : TWaveOutCaps;
    Volume : DWord;
    begin  
    result:=0;
    if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =
    MMSYSERR_NOERROR then
    begin
     if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     begin
      WaveOutGetVolume(WAVE_MAPPER, @Volume);
      Result := Volume;
     end;
    end;
    end;

    procedure TForm1.SetWaveVolume(const AVolume: DWord);
    var
    Woc : TWaveOutCaps;
    begin  
    if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =
    MMSYSERR_NOERROR then
    begin
     if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     WaveOutSetVolume(WAVE_MAPPER, AVolume);
    end;
    end;

 
Конференция "Media" » MediaPlayer [D7, WinXP]
Есть новые Нет новых   [133926   +462][b:0][p:0.003]