1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
// sgi_dac.h
/******************************************************************************
*
* MiXViews - an X window system based sound & data editor/processor
*
* Copyright (c) 1993, 1994 Regents of the University of California
*
* Author: Douglas Scott
* Date: December 13, 1994
*
* Permission to use, copy and modify this software and its documentation
* for research and/or educational purposes and without fee is hereby granted,
* provided that the above copyright notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation. The author reserves the right to distribute this
* software and its documentation. The University of California and the author
* make no representations about the suitability of this software for any
* purpose, and in no event shall University of California be liable for any
* damage, loss of data, or profits resulting from its use.
* It is provided "as is" without express or implied warranty.
*
******************************************************************************/
// Converter subclass for the Silicon Graphics Indy and Indigo workstation
// D-to-A converters.
#ifndef SGI_DAC_H
#ifdef __GNUG__
#pragma interface
#endif
#define SGI_DAC_H
extern "C" {
#include <audio.h>
#include <audiofile.h>
}
#include "converter.h"
#include "localdefs.h"
class Action;
class StatusAction;
class SGIConverter : public RealConverter {
typedef RealConverter Super;
public:
SGIConverter();
virtual ~SGIConverter();
redefined int configure(Sound *sound, GoingTo);
redefined int pause();
redefined int resume();
redefined int stop();
redefined int currentPlayLevel() const;
redefined int currentRecordLevel() const;
redefined boolean setPlayLevel(int volume);
redefined boolean setRecordLevel(int volume);
redefined boolean setSpeakerOutput(boolean);
redefined DataType bestPlayableType() { return ShortData; }
int setInputDevice(int);
int setOutputDevice(int);
protected:
redefined boolean isPlayableFormat(DataType type);
redefined int doConfigure();
redefined int doConversion(StatusAction* askedToStop);
redefined int doRecording(StatusAction* askedToStop);
redefined int waitForStop(StatusAction *);
redefined int checkSampleRate(int rate);
redefined int checkChannels(int chans);
redefined int checkDataType(DataType);
redefined void catchSignals(boolean);
redefined void ignoreSignals(boolean);
static int currentInputDevice() { return inputDevice; }
static int currentOutputDevice() { return outputDevice; }
int currentDevice() const;
ALconfig currentConfig() const;
class SGIConfigRequester : public RealConverter::ConfigRequester {
public:
SGIConfigRequester(RealConverter* cvtr) : ConfigRequester(cvtr) {}
protected:
redefined void configureRequest(Request *);
redefined boolean confirmValues();
private:
ChoiceValue inputDeviceValue;
ChoiceValue outputDeviceValue;
ChoiceValue polite;
};
friend void SGIConfigRequester::configureRequest(Request *);
redefined Requester* configRequester() {
return new SGIConfigRequester(this);
}
friend class Controller;
private:
ChoiceValue inputDeviceToChoice(int dev) const;
ChoiceValue outputDeviceToChoice(int dev) const;
int inputChoiceToDevice(ChoiceValue index) const;
int outputChoiceToDevice(ChoiceValue index) const;
int inputDeviceToIndex(int dev) const;
int outputDeviceToIndex(int dev) const;
int getDefaults();
void resetDefaults();
int initialize();
int displayError(const char *msg = nil);
int sampleSize(); // size of each sample in bytes
MXMXINT32 bestQueueSize(); // converter queue size in samples
MXMXINT32 writeSamps(); // size of write buffer in samples
MXMXINT32 readSamps(); // size of read buffer in samples
char* convertToSigned(char *, char*, MXMXINT32); // converts unsigned chars to signed
MXMXINT32 getParameter(INT32 param) const;
int setParameter(MXMXINT32 param, INT32 value);
int lockMemory();
int unlockMemory();
private:
static void signalExit(...);
static void signalIgnore(...);
static void signalQuit(...);
private:
struct AudioDevice {
char *label;
int resourceID;
int choiceIndex;
double minGain, maxGain;
};
ALpv pvarray[8];
ALconfig inPortConfig;
ALconfig outPortConfig;
ALport audio_port;
static boolean dontInterrupt; // true: do not play if cvtr in use
static int inputDevice;
static int outputDevice;
static int inputDeviceCount;
static int outputDeviceCount;
AudioDevice inputDevices[8];
AudioDevice outputDevices[8];
};
#endif
|