home *** CD-ROM | disk | FTP | other *** search
- =head1 NAME
-
- Mac::Sound - Macintosh Toolbox Interface to Sound Manager
-
- =head1 SYNOPSIS
-
-
- =head1 DESCRIPTION
-
- Access to Inside Macintosh is essential for proper use of these functions.
- Explanations of terms, processes and procedures are provided there.
- Any attempt to use these functions without guidance can cause severe errors in
- your machine, including corruption of data. B<You have been warned.>
-
- =cut
-
- use strict;
-
- package Mac::Sound;
-
- BEGIN {
- use Exporter ();
- use DynaLoader ();
- use Mac::Memory();
-
- use vars qw(@ISA @EXPORT);
-
- @ISA = qw(Exporter DynaLoader);
- @EXPORT = qw(
- twelfthRootTwo
- soundListRsrc
- rate48khz
- rate44khz
- rate22050hz
- rate22khz
- rate11khz
- rate11025hz
- squareWaveSynth
- waveTableSynth
- sampledSynth
- MACE3snthID
- MACE6snthID
- kMiddleC
- kSimpleBeepID
- kFullVolume
- kNoVolume
- stdQLength
- dataOffsetFlag
- kUseOptionalOutputDevice
- notCompressed
- fixedCompression
- variableCompression
- twoToOne
- eightToThree
- threeToOne
- sixToOne
- sixToOnePacketSize
- threeToOnePacketSize
- stateBlockSize
- leftOverBlockSize
- firstSoundFormat
- secondSoundFormat
- dbBufferReady
- dbLastBuffer
- sysBeepDisable
- sysBeepEnable
- sysBeepSynchronous
- unitTypeNoSelection
- unitTypeSeconds
- stdSH
- extSH
- cmpSH
- nullCmd
- initCmd
- freeCmd
- quietCmd
- flushCmd
- reInitCmd
- waitCmd
- pauseCmd
- resumeCmd
- callBackCmd
- syncCmd
- availableCmd
- versionCmd
- totalLoadCmd
- loadCmd
- freqDurationCmd
- restCmd
- freqCmd
- ampCmd
- timbreCmd
- getAmpCmd
- volumeCmd
- getVolumeCmd
- clockComponentCmd
- getClockComponentCmd
- waveTableCmd
- phaseCmd
- soundCmd
- bufferCmd
- rateCmd
- continueCmd
- doubleBufferCmd
- getRateCmd
- rateMultiplierCmd
- getRateMultiplierCmd
- sizeCmd
- convertCmd
- waveInitChannelMask
- waveInitChannel0
- waveInitChannel1
- waveInitChannel2
- waveInitChannel3
- initChan0
- initChan1
- initChan2
- initChan3
- outsideCmpSH
- insideCmpSH
- aceSuccess
- aceMemFull
- aceNilBlock
- aceBadComp
- aceBadEncode
- aceBadDest
- aceBadCmd
- initChanLeft
- initChanRight
- initNoInterp
- initNoDrop
- initMono
- initStereo
- initMACE3
- initMACE6
- initPanMask
- initSRateMask
- initStereoMask
- initCompMask
- siActiveChannels
- siActiveLevels
- siAGCOnOff
- siAsync
- siAVDisplayBehavior
- siChannelAvailable
- siCompressionAvailable
- siCompressionFactor
- siCompressionHeader
- siCompressionNames
- siCompressionParams
- siCompressionType
- siContinuous
- siDeviceBufferInfo
- siDeviceConnected
- siDeviceIcon
- siDeviceName
- siHardwareBalance
- siHardwareBalanceSteps
- siHardwareBass
- siHardwareBassSteps
- siHardwareBusy
- siHardwareFormat
- siHardwareMute
- siHardwareTreble
- siHardwareTrebleSteps
- siHardwareVolume
- siHardwareVolumeSteps
- siHeadphoneMute
- siHeadphoneVolume
- siHeadphoneVolumeSteps
- siInputAvailable
- siInputGain
- siInputSource
- siInputSourceNames
- siLevelMeterOnOff
- siModemGain
- siMonitorAvailable
- siMonitorSource
- siNumberChannels
- siOptionsDialog
- siPlayThruOnOff
- siPostMixerSoundComponent
- siPreMixerSoundComponent
- siQuality
- siRateMultiplier
- siRecordingQuality
- siSampleRate
- siSampleRateAvailable
- siSampleSize
- siSampleSizeAvailable
- siSetupCDAudio
- siSetupModemAudio
- siSlopeAndIntercept
- siSoundClock
- siSpeakerMute
- siSpeakerVolume
- siSSpCPULoadLimit
- siSSpLocalization
- siSSpSpeakerSetup
- siStereoInputGain
- siSubwooferMute
- siTwosComplementOnOff
- siVolume
- siVoxRecordInfo
- siVoxStopInfo
- siWideStereo
- siCloseDriver
- siInitializeDriver
- siPauseRecording
- siUserInterruptProc
- kNoSoundComponentType
- kSoundComponentType
- kSoundComponentPPCType
- kRate8SubType
- kRate16SubType
- kConverterSubType
- kSndSourceSubType
- kMixerType
- kMixer8SubType
- kMixer16SubType
- kSoundOutputDeviceType
- kClassicSubType
- kASCSubType
- kDSPSubType
- kAwacsSubType
- kGCAwacsSubType
- kSingerSubType
- kSinger2SubType
- kWhitSubType
- kSoundBlasterSubType
- kSoundCompressor
- kSoundDecompressor
- kSoundEffectsType
- kSSpLocalizationSubType
- kSoundNotCompressed
- kOffsetBinary
- kMACE3Compression
- kMACE6Compression
- kCDXA4Compression
- kCDXA2Compression
- kIMACompression
- kULawCompression
- kALawCompression
- kLittleEndianFormat
- kFloat32Format
- kFloat64Format
- kTwosComplement
- k8BitRawIn
- k8BitTwosIn
- k16BitIn
- kStereoIn
- k8BitRawOut
- k8BitTwosOut
- k16BitOut
- kStereoOut
- kReverse
- kRateConvert
- kCreateSoundSource
- kHighQuality
- kNonRealTime
- kSourcePaused
- kPassThrough
- kNoSoundComponentChain
- kNoMixing
- kNoSampleRateConversion
- kNoSampleSizeConversion
- kNoSampleFormatConversion
- kNoChannelConversion
- kNoDecompression
- kNoVolumeConversion
- kNoRealtimeProcessing
- kScheduledSource
- kBestQuality
- kInputMask
- kOutputMask
- kOutputShift
- kActionMask
- kSoundComponentBits
- kAVDisplayHeadphoneRemove
- kAVDisplayHeadphoneInsert
- kAVDisplayPlainTalkRemove
- kAVDisplayPlainTalkInsert
- audioAllChannels
- audioLeftChannel
- audioRightChannel
- audioUnmuted
- audioMuted
- audioDoesMono
- audioDoesStereo
- audioDoesIndependentChannels
- siCDQuality
- siBestQuality
- siBetterQuality
- siGoodQuality
- siDeviceIsConnected
- siDeviceNotConnected
- siDontKnowIfConnected
- siReadPermission
- siWritePermission
-
- SysBeep
- SndDoCommand
- SndDoImmediate
- SndNewChannel
- SndDisposeChannel
- SndPlay
- SndControl
- SndSoundManagerVersion
- SndStartFilePlay
- SndPauseFilePlay
- SndStopFilePlay
- SndChannelStatus
- SndManagerStatus
- SndGetSysBeepState
- SndSetSysBeepState
- MACEVersion
- Comp3to1
- Exp1to3
- Comp6to1
- Exp1to6
- GetSysBeepVolume
- SetSysBeepVolume
- GetDefaultOutputVolume
- SetDefaultOutputVolume
- GetSoundHeaderOffset
- UnsignedFixedMulDiv
- GetCompressionInfo
- SetSoundPreference
- GetSoundPreference
- GetCompressionName
- SPBVersion
- SndRecord
- SndRecordToFile
- SPBSignInDevice
- SPBSignOutDevice
- SPBGetIndexedDevice
- SPBOpenDevice
- SPBCloseDevice
- SPBRecord
- SPBRecordToFile
- SPBPauseRecording
- SPBResumeRecording
- SPBStopRecording
- SPBGetRecordingStatus
- );
- }
-
- bootstrap Mac::Sound;
-
- =head2 Constants
-
- =over 4
-
- =cut
-
- sub twelfthRootTwo () { 1.05946309435; }
- sub soundListRsrc () { 'snd '; }
- sub rate48khz () { 48000.00000; }
- sub rate44khz () { 44100.00000; }
- sub rate22050hz () { 22050.00000; }
- sub rate22khz () { 22254.54545 ; }
- sub rate11khz () { 11127.27273; }
- sub rate11025hz () { 11025.00000; }
- sub squareWaveSynth () { 1; }
- sub waveTableSynth () { 3; }
- sub sampledSynth () { 5; }
- sub MACE3snthID () { 11; }
- sub MACE6snthID () { 13; }
- sub kMiddleC () { 60; }
- sub kSimpleBeepID () { 1; }
- sub kFullVolume () { 0x0100; }
- sub kNoVolume () { 0; }
- sub stdQLength () { 128; }
- sub dataOffsetFlag () { 0x8000; }
- sub kUseOptionalOutputDevice () { -1; }
- sub notCompressed () { 0; }
- sub fixedCompression () { -1; }
- sub variableCompression () { -2; }
- sub twoToOne () { 1; }
- sub eightToThree () { 2; }
- sub threeToOne () { 3; }
- sub sixToOne () { 4; }
- sub sixToOnePacketSize () { 8; }
- sub threeToOnePacketSize () { 16; }
- sub stateBlockSize () { 64; }
- sub leftOverBlockSize () { 32; }
- sub firstSoundFormat () { 0x0001; }
- sub secondSoundFormat () { 0x0002; }
- sub dbBufferReady () { 0x00000001; }
- sub dbLastBuffer () { 0x00000004; }
- sub sysBeepDisable () { 0x0000; }
- sub sysBeepEnable () { (1 << 0); }
- sub sysBeepSynchronous () { (1 << 1); }
- sub unitTypeNoSelection () { 0xFFFF; }
- sub unitTypeSeconds () { 0x0000; }
- sub stdSH () { 0x00; }
- sub extSH () { 0xFF; }
- sub cmpSH () { 0xFE; }
- sub nullCmd () { 0; }
- sub initCmd () { 1; }
- sub freeCmd () { 2; }
- sub quietCmd () { 3; }
- sub flushCmd () { 4; }
- sub reInitCmd () { 5; }
- sub waitCmd () { 10; }
- sub pauseCmd () { 11; }
- sub resumeCmd () { 12; }
- sub callBackCmd () { 13; }
- sub syncCmd () { 14; }
- sub availableCmd () { 24; }
- sub versionCmd () { 25; }
- sub totalLoadCmd () { 26; }
- sub loadCmd () { 27; }
- sub freqDurationCmd () { 40; }
- sub restCmd () { 41; }
- sub freqCmd () { 42; }
- sub ampCmd () { 43; }
- sub timbreCmd () { 44; }
- sub getAmpCmd () { 45; }
- sub volumeCmd () { 46; }
- sub getVolumeCmd () { 47; }
- sub clockComponentCmd () { 50; }
- sub getClockComponentCmd () { 51; }
- sub waveTableCmd () { 60; }
- sub phaseCmd () { 61; }
- sub soundCmd () { 80; }
- sub bufferCmd () { 81; }
- sub rateCmd () { 82; }
- sub continueCmd () { 83; }
- sub doubleBufferCmd () { 84; }
- sub getRateCmd () { 85; }
- sub rateMultiplierCmd () { 86; }
- sub getRateMultiplierCmd () { 87; }
- sub sizeCmd () { 90; }
- sub convertCmd () { 91; }
- sub waveInitChannelMask () { 0x07; }
- sub waveInitChannel0 () { 0x04; }
- sub waveInitChannel1 () { 0x05; }
- sub waveInitChannel2 () { 0x06; }
- sub waveInitChannel3 () { 0x07; }
- sub initChan0 () { waveInitChannel0; }
- sub initChan1 () { waveInitChannel1; }
- sub initChan2 () { waveInitChannel2; }
- sub initChan3 () { waveInitChannel3; }
- sub outsideCmpSH () { 0; }
- sub insideCmpSH () { 1; }
- sub aceSuccess () { 0; }
- sub aceMemFull () { 1; }
- sub aceNilBlock () { 2; }
- sub aceBadComp () { 3; }
- sub aceBadEncode () { 4; }
- sub aceBadDest () { 5; }
- sub aceBadCmd () { 6; }
- sub initChanLeft () { 0x0002; }
- sub initChanRight () { 0x0003; }
- sub initNoInterp () { 0x0004; }
- sub initNoDrop () { 0x0008; }
- sub initMono () { 0x0080; }
- sub initStereo () { 0x00C0; }
- sub initMACE3 () { 0x0300; }
- sub initMACE6 () { 0x0400; }
- sub initPanMask () { 0x0003; }
- sub initSRateMask () { 0x0030; }
- sub initStereoMask () { 0x00C0; }
- sub initCompMask () { 0xFF00; }
- sub siActiveChannels () { 'chac'; }
- sub siActiveLevels () { 'lmac'; }
- sub siAGCOnOff () { 'agc '; }
- sub siAsync () { 'asyn'; }
- sub siAVDisplayBehavior () { 'avdb'; }
- sub siChannelAvailable () { 'chav'; }
- sub siCompressionAvailable () { 'cmav'; }
- sub siCompressionFactor () { 'cmfa'; }
- sub siCompressionHeader () { 'cmhd'; }
- sub siCompressionNames () { 'cnam'; }
- sub siCompressionParams () { 'cmpp'; }
- sub siCompressionType () { 'comp'; }
- sub siContinuous () { 'cont'; }
- sub siDeviceBufferInfo () { 'dbin'; }
- sub siDeviceConnected () { 'dcon'; }
- sub siDeviceIcon () { 'icon'; }
- sub siDeviceName () { 'name'; }
- sub siHardwareBalance () { 'hbal'; }
- sub siHardwareBalanceSteps () { 'hbls'; }
- sub siHardwareBass () { 'hbas'; }
- sub siHardwareBassSteps () { 'hbst'; }
- sub siHardwareBusy () { 'hwbs'; }
- sub siHardwareFormat () { 'hwfm'; }
- sub siHardwareMute () { 'hmut'; }
- sub siHardwareTreble () { 'htrb'; }
- sub siHardwareTrebleSteps () { 'hwts'; }
- sub siHardwareVolume () { 'hvol'; }
- sub siHardwareVolumeSteps () { 'hstp'; }
- sub siHeadphoneMute () { 'pmut'; }
- sub siHeadphoneVolume () { 'pvol'; }
- sub siHeadphoneVolumeSteps () { 'hdst'; }
- sub siInputAvailable () { 'inav'; }
- sub siInputGain () { 'gain'; }
- sub siInputSource () { 'sour'; }
- sub siInputSourceNames () { 'snam'; }
- sub siLevelMeterOnOff () { 'lmet'; }
- sub siModemGain () { 'mgai'; }
- sub siMonitorAvailable () { 'mnav'; }
- sub siMonitorSource () { 'mons'; }
- sub siNumberChannels () { 'chan'; }
- sub siOptionsDialog () { 'optd'; }
- sub siPlayThruOnOff () { 'plth'; }
- sub siPostMixerSoundComponent () { 'psmx'; }
- sub siPreMixerSoundComponent () { 'prmx'; }
- sub siQuality () { 'qual'; }
- sub siRateMultiplier () { 'rmul'; }
- sub siRecordingQuality () { 'qual'; }
- sub siSampleRate () { 'srat'; }
- sub siSampleRateAvailable () { 'srav'; }
- sub siSampleSize () { 'ssiz'; }
- sub siSampleSizeAvailable () { 'ssav'; }
- sub siSetupCDAudio () { 'sucd'; }
- sub siSetupModemAudio () { 'sumd'; }
- sub siSlopeAndIntercept () { 'flap'; }
- sub siSoundClock () { 'sclk'; }
- sub siSpeakerMute () { 'smut'; }
- sub siSpeakerVolume () { 'svol'; }
- sub siSSpCPULoadLimit () { '3dll'; }
- sub siSSpLocalization () { '3dif'; }
- sub siSSpSpeakerSetup () { '3dst'; }
- sub siStereoInputGain () { 'sgai'; }
- sub siSubwooferMute () { 'bmut'; }
- sub siTwosComplementOnOff () { 'twos'; }
- sub siVolume () { 'volu'; }
- sub siVoxRecordInfo () { 'voxr'; }
- sub siVoxStopInfo () { 'voxs'; }
- sub siWideStereo () { 'wide'; }
- sub siCloseDriver () { 'clos'; }
- sub siInitializeDriver () { 'init'; }
- sub siPauseRecording () { 'paus'; }
- sub siUserInterruptProc () { 'user'; }
- sub kNoSoundComponentType () { '****'; }
- sub kSoundComponentType () { 'sift'; }
- sub kSoundComponentPPCType () { 'nift'; }
- sub kRate8SubType () { 'ratb'; }
- sub kRate16SubType () { 'ratw'; }
- sub kConverterSubType () { 'conv'; }
- sub kSndSourceSubType () { 'sour'; }
- sub kMixerType () { 'mixr'; }
- sub kMixer8SubType () { 'mixb'; }
- sub kMixer16SubType () { 'mixw'; }
- sub kSoundOutputDeviceType () { 'sdev'; }
- sub kClassicSubType () { 'clas'; }
- sub kASCSubType () { 'asc '; }
- sub kDSPSubType () { 'dsp '; }
- sub kAwacsSubType () { 'awac'; }
- sub kGCAwacsSubType () { 'awgc'; }
- sub kSingerSubType () { 'sing'; }
- sub kSinger2SubType () { 'sng2'; }
- sub kWhitSubType () { 'whit'; }
- sub kSoundBlasterSubType () { 'sbls'; }
- sub kSoundCompressor () { 'scom'; }
- sub kSoundDecompressor () { 'sdec'; }
- sub kSoundEffectsType () { 'snfx'; }
- sub kSSpLocalizationSubType () { 'snd3'; }
- sub kSoundNotCompressed () { 'NONE'; }
- sub kOffsetBinary () { 'raw '; }
- sub kMACE3Compression () { 'MAC3'; }
- sub kMACE6Compression () { 'MAC6'; }
- sub kCDXA4Compression () { 'cdx4'; }
- sub kCDXA2Compression () { 'cdx2'; }
- sub kIMACompression () { 'ima4'; }
- sub kULawCompression () { 'ulaw'; }
- sub kALawCompression () { 'alaw'; }
- sub kLittleEndianFormat () { 'sowt'; }
- sub kFloat32Format () { 'fl32'; }
- sub kFloat64Format () { 'fl64'; }
- sub kTwosComplement () { 'twos'; }
- sub k8BitRawIn () { (1 << 0); }
- sub k8BitTwosIn () { (1 << 1); }
- sub k16BitIn () { (1 << 2); }
- sub kStereoIn () { (1 << 3); }
- sub k8BitRawOut () { (1 << 8); }
- sub k8BitTwosOut () { (1 << 9); }
- sub k16BitOut () { (1 << 10); }
- sub kStereoOut () { (1 << 11); }
- sub kReverse () { (1 << 16); }
- sub kRateConvert () { (1 << 17); }
- sub kCreateSoundSource () { (1 << 18); }
- sub kHighQuality () { (1 << 22); }
- sub kNonRealTime () { (1 << 23); }
- sub kSourcePaused () { (1 << 0); }
- sub kPassThrough () { (1 << 16); }
- sub kNoSoundComponentChain () { (1 << 17); }
- sub kNoMixing () { (1 << 0); }
- sub kNoSampleRateConversion () { (1 << 1); }
- sub kNoSampleSizeConversion () { (1 << 2); }
- sub kNoSampleFormatConversion () { (1 << 3); }
- sub kNoChannelConversion () { (1 << 4); }
- sub kNoDecompression () { (1 << 5); }
- sub kNoVolumeConversion () { (1 << 6); }
- sub kNoRealtimeProcessing () { (1 << 7); }
- sub kScheduledSource () { (1 << 8); }
- sub kBestQuality () { (1 << 0); }
- sub kInputMask () { 0x000000FF; }
- sub kOutputMask () { 0x0000FF00; }
- sub kOutputShift () { 8; }
- sub kActionMask () { 0x00FF0000; }
- sub kSoundComponentBits () { 0x00FFFFFF; }
- sub kAVDisplayHeadphoneRemove () { 0; }
- sub kAVDisplayHeadphoneInsert () { 1; }
- sub kAVDisplayPlainTalkRemove () { 2; }
- sub kAVDisplayPlainTalkInsert () { 3; }
- sub audioAllChannels () { 0; }
- sub audioLeftChannel () { 1; }
- sub audioRightChannel () { 2; }
- sub audioUnmuted () { 0; }
- sub audioMuted () { 1; }
- sub audioDoesMono () { (1 << 0); }
- sub audioDoesStereo () { (1 << 1); }
- sub audioDoesIndependentChannels () { (1 << 2); }
- sub siCDQuality () { 'cd '; }
- sub siBestQuality () { 'best'; }
- sub siBetterQuality () { 'betr'; }
- sub siGoodQuality () { 'good'; }
- sub siDeviceIsConnected () { 1; }
- sub siDeviceNotConnected () { 0; }
- sub siDontKnowIfConnected () { -1; }
- sub siReadPermission () { 0; }
- sub siWritePermission () { 1; }
-
- =back
-
- =cut
-
- sub GetSoundPreference {
- my($theType, $name, $settings) = @_;
- $settings ||= Mac::Memory::NewHandle();
- _GetSoundPreference($theType, $name, $settings) && $settings;
- }
-
- sub SndPlay {
- my($chan, $snd, $async) = @_;
- if (!$chan) {
- my($ch) = 0;
- $chan = bless \$ch, "SndChannel";
- }
- $async ||= 0;
- _SndPlay($chan, $snd, $async);
- }
-
- =include Sound.xs
-
- =head1 BUGS/LIMITATIONS
-
- =head1 FILES
-
- =head1 AUTHOR(S)
-
- Matthias Ulrich Neeracher <neeri@iis.ee.ethz.ch>
-
- =cut
-
- 1;
-
- __END__
-