============================================================================== Concepts of CyberSound audio subsystem (c) 1995 by Christian Buchner ============================================================================== WARNING: This information is preliminary and may change at any time. ------- Do not count on what you read here! Suggestions, improvements, critics, etc. welcome! EMAIL: flowerp@eikon.e-technik.tu-muenchen.de ============================================================================== Schematics of the new audio subsystem ------------------------------------- sound.datatype audio.device \ / \ / \ / \ / "channels" \ / \ / cybersound.library (administration, mixing channels) / \ / \ / \ / \ "stereo 16 bit audio stream" / \ / \ 14bit.driver toccata.driver ........driver | | | Amiga Hardware Toccata board other Hardware (DEVS:SoundDrivers) General ------- The CyberSound software interface is supposed to provide a new, easy, flexible and powerful way of playing and manipulating sounds in different formats. At the same time, the audio.device will be replaced by an emulation that allows more channels than before. 8 and 16 bit samples, signed, unsigned, a-law, y-law etc will probably be supported. Playing streams will be supported as well. You will also be able to reverse the play direction. Below is a list of possible library functions to provide this interface. This is only the result of a quick brainstorming. Tell me what you think of it and make suggestions. All actions are done via channel handles. These are "black boxes" that can only be accessed via Taglists, setting or changing attributes. I currently do not know how to provide a queueing mechanism similar to that of audio.device. This would be important in order to play a sample in several parts without an audible interruption - and of course this is very important for the audio.device emulation! cybersound.library ------------------ Channel functions: OpenChannel(TagList) : gets you a new channel handle SetChannelAttrs(TagList) : modifies the channels attributes GetChannelAttrs(TagList) : requests the channels attributes ResetChannel(TagList) : reset (just like after OpenChannel) CloseChannel() : delete the channel Replay functions: Start() : start playing (from the beginning) Stop() : stop playing Restart() : restart playing Reverse() : change replay direction (is this necessary? a tag will do) Release() : break the repeat, play the stuff after the repeat part Editing functions: Scale(From, To) : scale the sample Resample(FromFreq, ToFreq) : horizontal stretch Normalize(Flags) : vertical stretch (to use full dynamics) TypeConvert(ToType) : recalculation into other sample format Attribute Tags: SoundDriver : name of the sound driver for replay Left_Sample : pointer to first left sample word/byte Right_Sample : pointer to first right sample word/byte Sample_Length : number of sample words/bytes in the sample Sample_Type : 8 / 16 bit, signed/unsigned, etc.. Frequency : ... Volume : ... Direction : forward, backward LR_Panning : stereo panning FB_Panning : for DolbySurround (?) Repeat_Start : beginning of the repeat part Repeat_Length : size of the repeat part Repeat_Count : number of repeats Repeat_Method : normal repeat, ping-pong, etc.. Current_Offset : position in the sample Current_Status : playing, paused, stopped, etc... sound drivers ------------- *well-defined, but future-expandable layout as Amiga shared libraries *asynchronous design (via callback-routines), not necessarily linked to tasks - may use interrupt code/calls as well. CyberSound prefs program ------------------------ *every driver gets its own prefs ListView: sound driver selection Toggle: default sound driver Switch: adaptive sampling rate / constant rate Toggle: oversampling Slider: 8 bit boost (0-8) Slider: 16 bit drop (0-8) 14Bit Prefs program ------------------- D/A converter calibration CONTACT ADDRESS --------------- EMAIL: flowerp@eikon.e-technik.tu-muenchen.de FidoNet: 2:2480/465 SnailMail: Christian Buchner Ganghoferstraße 2 82110 Germering Germany Tel.: +49-(0)89/844872