Ignore:
Timestamp:
Apr 24, 2000, 9:45:21 PM (25 years ago)
Author:
sandervl
Message:

Fixed wave volume, recording gain + wave recording

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sbliveos2/trunk/drv16/ioctl.cpp

    r142 r147  
    131131         break;
    132132#if 0
    133       case AUDIOHW_FMSYNTH_CAPTURE:
    134       case AUDIOHW_FMSYNTH_PLAY:
    135       case AUDIOHW_MPU401_CAPTURE:
    136133      case AUDIOHW_MPU401_PLAY:
    137          pstream = new MIDISTREAM(HardwareType);
     134         pstream = new MIDISTREAM(HardwareType, prp->s.ioctl.usSysFileNum);
    138135         break;
    139136#endif
     
    204201   LPMCI_TRACK_INFO    pMasterVol;
    205202   PSTREAM             pStream;
     203   ULONG               volume;
    206204
    207205   if (p->usIOCtlRequest != AUDIO_CHANGE) {
     
    239237        pStream->SetBalance(pAudChange->lBalance);
    240238
    241    if(pAudChange->lVolume != AUDIO_IGNORE)
    242         pStream->SetVolume(pAudChange->lVolume);
     239   if(pAudChange->lVolume != AUDIO_IGNORE) {
     240        // stream volume ranges from 0 to 0x7FFFFFFF (linear)
     241        volume = pAudChange->lVolume >> 16UL;
     242        volume = (volume*100UL)/0x7FFFUL;
     243        dprintf(("Set stream volume of %x to %d", prp->s.ioctl.usSysFileNum, volume));
     244        pStream->SetVolume(MAKE_VOLUME_LR(volume, volume));
     245   }
    243246   
    244247   if(pMasterVol && pMasterVol->usMasterVolume != AUDIO_IGNORE) {
    245248        // master volume ranges from 0 to 0x7FFF (linear)
    246         ULONG volume = pMasterVol->usMasterVolume;
    247 
     249        volume = pMasterVol->usMasterVolume;
    248250        volume = (volume*100UL)/0x7FFFUL;               
    249251        if(volume > 100) {
    250252                volume = 100;
    251253        }
    252         volume = (((USHORT)volume << 16) | (USHORT)volume);
    253         pStream->SetMasterVol(volume);
    254    }
    255    for(int i=0;i<8;i++)
    256    {
    257         switch(pAudChange->rInputList[0].ulDevType) {
    258         case NULL_INPUT:
    259                 break; //continue;
    260         case STEREO_LINE_INPUT:
    261         case LEFT_LINE_INPUT:
    262         case RIGHT_LINE_INPUT:
    263                 pStream->SetInputSrc(MIX_RECSRC_LINE);
    264                 break;
    265 
    266         case MIC_INPUT:
    267         case BOOSTED_MIC_INPUT:
    268                 pStream->SetInputSrc(MIX_RECSRC_MIC);
    269                 break;
    270 
    271         case PHONE_LINE_INPUT:
    272         case HANDSET_INPUT:
    273         case SYNTH_INPUT:
    274         case DIGITAL_PHONE_LINE_INPUT:
    275         case DIGITAL_HANDSET_INPUT:
    276         case MIDI_IN_PORT:
    277 //      case LOOPBACK:
    278                 pStream->SetInputSrc(MIX_RECSRC_MIXER);
    279                 break;
    280         }
    281    }
    282    pStream->SetInputGain(pAudChange->lGain);
     254        dprintf(("Set mastervolume to %d", volume));
     255        pStream->SetMasterVol(MAKE_VOLUME_LR(volume, volume));
     256   }
     257   if(!fRecSrcIOCTL90) {
     258        for(int i=0;i<8;i++)
     259        {
     260                switch(pAudChange->rInputList[0].ulDevType) {
     261                case NULL_INPUT:
     262                        break; //continue;
     263                case STEREO_LINE_INPUT:
     264                case LEFT_LINE_INPUT:
     265                case RIGHT_LINE_INPUT:
     266                        pStream->SetInputSrc(MIX_RECSRC_LINE);
     267                        break;
     268       
     269                case MIC_INPUT:
     270                case BOOSTED_MIC_INPUT:
     271                        pStream->SetInputSrc(MIX_RECSRC_MIC);
     272                        break;
     273       
     274                case PHONE_LINE_INPUT:
     275                case HANDSET_INPUT:
     276                case SYNTH_INPUT:
     277                case DIGITAL_PHONE_LINE_INPUT:
     278                case DIGITAL_HANDSET_INPUT:
     279                case MIDI_IN_PORT:
     280//              case LOOPBACK:
     281                        pStream->SetInputSrc(MIX_RECSRC_MIXER);
     282                        break;
     283                }
     284        }
     285   }
     286   if(!fRecGainIOCTL90 && pAudChange->lGain != AUDIO_IGNORE) {
     287        // input ranges from 0 to 0x7FFFFFFF (linear)
     288        volume = pAudChange->lGain >> 16UL;
     289        volume = (volume*100UL)/0x7FFFUL;
     290        if(volume > 100) {
     291                volume = 100;
     292        }
     293        dprintf(("Set input gain of %x to %d", prp->s.ioctl.usSysFileNum, volume));
     294        pStream->SetInputGain(MAKE_VOLUME_LR(volume, volume));
     295   }
    283296}
    284297//******************************************************************************
     
    322335   switch(prp->s.ioctl.bCode) {
    323336   case MICSET:
    324         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETMICVOL, MAKE_VOLUME(VolumeL, VolumeR));
     337        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETMICVOL, MAKE_VOLUME_LR(VolumeL, VolumeR));
    325338        break;
    326339   case LINESET:
    327         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETLINEINVOL, MAKE_VOLUME(VolumeL, VolumeR));
     340        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETLINEINVOL, MAKE_VOLUME_LR(VolumeL, VolumeR));
    328341        break;
    329342   case CDSET:
    330         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETCDVOL, MAKE_VOLUME(VolumeL, VolumeR));
     343        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETCDVOL, MAKE_VOLUME_LR(VolumeL, VolumeR));
    331344        break;
    332345   case VIDEOSET:
    333         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETVIDEOVOL, MAKE_VOLUME(VolumeL, VolumeR));
     346        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETVIDEOVOL, MAKE_VOLUME_LR(VolumeL, VolumeR));
    334347        break;
    335348   case AUXSET:
    336         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETAUXVOL, MAKE_VOLUME(VolumeL, VolumeR));
     349        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETAUXVOL, MAKE_VOLUME_LR(VolumeL, VolumeR));
    337350        break;
    338351
    339352   case BASSTREBLESET:
    340         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETBASS, MAKE_VOLUME(VolumeL, VolumeL));
    341         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETTREBLE, MAKE_VOLUME(VolumeR, VolumeR));
     353        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETBASS, MAKE_VOLUME_LR(VolumeL, VolumeL));
     354        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETTREBLE, MAKE_VOLUME_LR(VolumeR, VolumeR));
    342355        break;
    343356#if 0
     
    349362        }
    350363        fStreamVolIOCTL90 = TRUE;
    351         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETMASTERVOL, MAKE_VOLUME(VolumeL, VolumeR));
     364        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETMASTERVOL, MAKE_VOLUME_LR(VolumeL, VolumeR));
    352365        break;
    353366#endif
     
    395408        }
    396409        fRecGainIOCTL90 = TRUE;
    397         OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETINPUTGAIN, MAKE_VOLUME(VolumeL, VolumeR));
     410        OSS16_SetGlobalVol(prp->s.ioctl.usSysFileNum, MIX_SETINPUTGAIN, MAKE_VOLUME_LR(VolumeL, VolumeR));
    398411        break;
    399412
     
    427440
    428441   case GETAPIMAP:
    429         if(DevHelp_VerifyAccess(SELECTOROF(pIoctlMap), 256, OFFSETOF(pIoctlMap), VERIFY_READWRITE))
     442        if(DevHelp_VerifyAccess(SELECTOROF(pIoctlMap), sizeof(SBLiveIOCTLMap), OFFSETOF(pIoctlMap), VERIFY_READWRITE))
    430443        {
    431444                dprintf(("Invalid IOCTL90 pointer %lx!!", (ULONG)pMixStruct));
Note: See TracChangeset for help on using the changeset viewer.