Sigrid Solveig Haflínudóttirupdateea5b4b33 years agoHistory
209 lines · 7.5 KB · C
RawDownload
/*----------------------------------------------------------------------------  ChucK Concurrent, On-the-fly Audio Programming Language    Compiler and Virtual Machine   Copyright (c) 2004 Ge Wang and Perry R. Cook.  All rights reserved.    http://chuck.stanford.edu/    http://chuck.cs.princeton.edu/   This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  U.S.A.-----------------------------------------------------------------------------*/ //-----------------------------------------------------------------------------// name: chuck_audio.h// desc: chuck host digital audio I/O, using RtAudio (from Gary Scavone)//// author: Ge Wang (ge@ccrma.stanford.edu | gewang@cs.princeton.edu)//         Spencer Salazar (spencer@ccrma.stanford.edu)// RtAudio by: Gary Scavone// date: Spring 2004//-----------------------------------------------------------------------------#ifndef __CHUCK_AUDIO_H__#define __CHUCK_AUDIO_H__ #include "chuck_def.h"#include <string>#include "RtAudio/RtAudio.h"    //-----------------------------------------------------------------------------// define, defaults, forward references//-----------------------------------------------------------------------------#define NUM_CHANNELS_DEFAULT         2       // number of channels#define NUM_BUFFERS_DEFAULT          8       // number buffers// sample rate defaults by platform#if defined(__PLATFORM_LINUX__) || defined(__PLATFORM_OPENBSD__)  #define SAMPLE_RATE_DEFAULT      48000  #define BUFFER_SIZE_DEFAULT        256#elif defined(__PLATFORM_MACOSX__)  #define SAMPLE_RATE_DEFAULT      44100  #define BUFFER_SIZE_DEFAULT        256#else  #define SAMPLE_RATE_DEFAULT      44100  #define BUFFER_SIZE_DEFAULT        512#endif    // audio callback definitiontypedef void (* f_audio_cb)( SAMPLE * input, SAMPLE * output,    t_CKUINT numFrames, t_CKUINT numInChans, t_CKUINT numOutChans,    void * userData );    // real-time watch dogextern t_CKBOOL g_do_watchdog;// countermeasureextern t_CKUINT g_watchdog_countermeasure_priority;// watchdog timeoutextern t_CKFLOAT g_watchdog_timeout;    //-----------------------------------------------------------------------------// name: class ChuckAudioDriverInfo// desc: info pertaining to an audio driver//-----------------------------------------------------------------------------struct ChuckAudioDriverInfo{    // driver API ID; e.g., RtAudio::Api values    // RtAudio::MACOSX_CORE or RtAudio::WINDOWS_DS or RtAudio::UNIX_JACK    // (see RtAudio.h for full list)    t_CKUINT driver;    // a short name of the driver, e.g., "DS"    std::string name;    // a longer name of the driver, e.g., "DirectSound"    std::string userFriendlyName;     // constructor    ChuckAudioDriverInfo()        : driver(0),        name("(unspecified)"),        userFriendlyName("(unspecified driver")    {  }};    //-----------------------------------------------------------------------------// name: class ChuckAudio// desc: chuck host audio I/O//-----------------------------------------------------------------------------class ChuckAudio{public:    static t_CKBOOL initialize( t_CKUINT dac_device,                                t_CKUINT adc_device,                                t_CKUINT num_dac_channels,                                t_CKUINT num_adc_channels,                                t_CKUINT sample_rate,                                t_CKUINT buffer_size,                                t_CKUINT num_buffers,                                f_audio_cb callback,                                void * data,                                t_CKBOOL force_srate, // force_srate | 1.3.1.2 (added)                                const char * driver // NULL means default for build | 1.5.0.0 (added)                                );    static void shutdown();    static t_CKBOOL start();    static t_CKBOOL stop(); public: // watchdog stuff    static t_CKBOOL watchdog_start();    static t_CKBOOL watchdog_stop(); public: // driver related operations    // default audio driver number    static RtAudio::Api defaultDriverApi();    // default audio driver name    static const char * defaultDriverName();    // get API/driver enum from name    static RtAudio::Api driverNameToApi( const char * driver = NULL );    // get API/drive name from int assumed to be RtAudio::Api enum    static const char * driverApiToName( t_CKUINT driverNum );    // get number of compiled audio driver APIs    static t_CKUINT numDrivers();    // get info on a particular driver    static ChuckAudioDriverInfo getDriverInfo( t_CKUINT n ); public: // audio device related operations    // probe audio devices; NULL for driver means default for build    static void probe( const char * driver );    // get device number by name?    // 1.4.2.0: changed return type from t_CKUINT to t_CKINT    static t_CKINT device_named( const char * driver,                                 const std::string & name,                                 t_CKBOOL needs_dac = FALSE,                                 t_CKBOOL needs_adc = FALSE ); public:    static t_CKUINT srate() { return m_sample_rate; }    static t_CKUINT num_channels_out() { return m_num_channels_out; }    static t_CKUINT num_channels_in() { return m_num_channels_in; }    static t_CKUINT dac_num() { return m_dac_n; }    static t_CKUINT adc_num() { return m_adc_n; }    static t_CKUINT bps() { return m_bps; }    static t_CKUINT buffer_size() { return m_buffer_size; }    static t_CKUINT num_buffers() { return m_num_buffers; }    static RtAudio * audio() { return m_rtaudio; }     static void set_extern( SAMPLE * in, SAMPLE * out )        { m_extern_in = in; m_extern_out = out; }    static int cb( void * output_buffer, void * input_buffer, unsigned int buffer_size,        double streamTime, RtAudioStreamStatus status, void * user_data );#ifdef __OPENBSD_OPENAL__	static int alcb(void *userptr, void *output_buffer, int len);#endif public: // data    static t_CKBOOL m_init;    static t_CKBOOL m_start;    static t_CKBOOL m_go; // counter of # of times callback called    static t_CKBOOL m_silent; // if true, will output silence    static t_CKBOOL m_expand_in_mono2stereo; // 1.4.0.1 for in:1 out:2    static t_CKUINT m_num_channels_out;    static t_CKUINT m_num_channels_in;    static t_CKUINT m_num_channels_max; // the max of out/in    static t_CKUINT m_sample_rate;    static t_CKUINT m_bps;    static t_CKUINT m_buffer_size;    static t_CKUINT m_num_buffers;    static SAMPLE * m_buffer_out;    static SAMPLE * m_buffer_in;    static SAMPLE * m_extern_in; // for things like audicle    static SAMPLE * m_extern_out; // for things like audicle     static RtAudio * m_rtaudio;    static t_CKINT m_dac_n; // 1.5.0.3 (ge) changed to signed    static t_CKINT m_adc_n; // 1.5.0.3 (ge) changed to signed    static std::string m_dac_name;    static std::string m_adc_name;    static std::string m_driver_name;    static f_audio_cb m_audio_cb;    static void * m_cb_user_data;};    #endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t