Ignore:
Timestamp:
Apr 30, 2001, 11:06:56 PM (24 years ago)
Author:
sandervl
Message:

DirectAudio interface updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/dsound/waveoutdaud.cpp

    r5608 r5643  
    1 /* $Id: waveoutdaud.cpp,v 1.1 2001-04-27 17:39:49 sandervl Exp $ */
     1/* $Id: waveoutdaud.cpp,v 1.2 2001-04-30 21:06:37 sandervl Exp $ */
    22
    33/*
     
    3232#include "misc.h"
    3333#include "waveoutdaud.h"
    34 
     34#include <options.h>
    3535
    3636DWORD WIN32API DAudioThreadHandler(LPVOID pUserData);
     
    3939/******************************************************************************/
    4040/******************************************************************************/
    41 DAudioWaveOut::DAudioWaveOut(LPWAVEFORMATEX pwfx) : ulError(0), hDAudioDrv(0)
     41DAudioWaveOut::DAudioWaveOut(LPWAVEFORMATEX pwfx) :
     42        ulError(0), hDAudioDrv(0), fUnderrun(FALSE), State(STATE_STOPPED)
    4243{
    4344    APIRET          rc;
     
    4849    ULONG           ParmLength = 0, DataLength;
    4950
    50     fUnderrun = FALSE;
    51 
    5251    rc = DosOpen("DAUDIO1$", &hDAudioDrv, &action, 0,
    5352                 FILE_NORMAL, FILE_OPEN, OPEN_ACCESS_READWRITE |
     
    9190    DAUDIO_CMD cmd;
    9291
     92    if(State != STATE_STOPPED) {
     93        stop();
     94    }
    9395    if(hDAudioDrv) {
    9496        sendIOCTL(DAUDIO_CLOSE, &cmd);
     
    99101/******************************************************************************/
    100102/******************************************************************************/
    101 MMRESULT DAudioWaveOut::write(LPWAVEHDR pwh, UINT cbwh)
    102 {
    103     DAUDIO_CMD cmd;
    104 
    105     cmd.Buffer.lpBuffer       = (ULONG)pwh->lpData;
    106     cmd.Buffer.ulBufferLength = pwh->dwBufferLength;
     103MMRESULT DAudioWaveOut::write(LPVOID lpBuffer, UINT ulSize)
     104{
     105    DAUDIO_CMD cmd;
     106
     107    cmd.Buffer.lpBuffer       = (ULONG)lpBuffer;
     108    cmd.Buffer.ulBufferLength = ulSize;
    107109    if(sendIOCTL(DAUDIO_ADDBUFFER, &cmd)) {
    108110        dprintf(("Unable to add buffer!!!!!"));
     
    110112    }
    111113
    112     if(State == STATE_STOPPED) {//continue playback
    113         restart();
    114     }
    115     else
    116     if(fUnderrun) {
    117         dprintf(("Resume playback after underrun"));
    118         fUnderrun = FALSE;
    119         State = STATE_PLAYING;
    120 
    121         // Resume the playback.
    122         resume();
    123     }
    124114    return(MMSYSERR_NOERROR);
    125115}
     
    187177/******************************************************************************/
    188178/******************************************************************************/
    189 ULONG DAudioWaveOut::getPosition()
     179MMRESULT DAudioWaveOut::setProperty(int type, ULONG value)
     180{
     181    DAUDIO_CMD cmd;
     182
     183    dprintf(("DAudioWaveOut::setProperty %d %x", type, value));
     184
     185    cmd.SetProperty.type  = type;
     186    cmd.SetProperty.value = type;
     187    return sendIOCTL(DAUDIO_SETPROPERTY, &cmd);
     188}
     189/******************************************************************************/
     190/******************************************************************************/
     191MMRESULT DAudioWaveOut::setVolume(ULONG ulVol)
     192{
     193    DAUDIO_CMD cmd;
     194
     195    //Scale down from 0-64k-1 -> 0-100
     196    cmd.Vol.VolumeR = (((ulVol & 0xFFFF0000) >> 16)*100)/0xFFFF;
     197    cmd.Vol.VolumeL =  ((ulVol & 0x0000FFFF)       *100)/0xFFFF;
     198    return sendIOCTL(DAUDIO_SETVOLUME, &cmd);
     199}
     200/******************************************************************************/
     201/******************************************************************************/
     202ULONG DAudioWaveOut::getPosition(PULONG pulWritePos)
    190203{
    191204    DAUDIO_CMD cmd;
     
    196209        return 0xFFFFFFFF;
    197210    }
     211    *pulWritePos = cmd.Pos.ulWritePos;
    198212    return cmd.Pos.ulCurrentPos;
    199213}
     
    253267    HFILE           hDriver;
    254268
     269
    255270    if(!fTested) {
     271        if(PROFILE_GetOdinIniInt(SECTION_WINMM, KEY_DIRECTAUDIO, 1) == 0) {
     272            fTested = TRUE;
     273            return FALSE;
     274        }
    256275        rc = DosOpen("DAUDIO1$", &hDriver, &action, 0,
    257276                     FILE_NORMAL, FILE_OPEN, OPEN_ACCESS_READWRITE |
     
    270289/******************************************************************************/
    271290/******************************************************************************/
    272 MMRESULT DAudioWaveOut::setVolume(ULONG ulVol)
    273 {
    274     DAUDIO_CMD cmd;
    275 
    276     //Scale down from 0-64k-1 -> 0-100
    277     cmd.Vol.VolumeR = (((ulVol & 0xFFFF0000) >> 16)*100)/0xFFFF;
    278     cmd.Vol.VolumeL =  ((ulVol & 0x0000FFFF)       *100)/0xFFFF;
    279     return sendIOCTL(DAUDIO_SETVOLUME, &cmd);
    280 }
    281 /******************************************************************************/
    282 /******************************************************************************/
    283291MMRESULT DAudioWaveOut::sendIOCTL(ULONG cmd, DAUDIO_CMD *pDataPacket)
    284292{
Note: See TracChangeset for help on using the changeset viewer.