1 #ifndef INCLUDED_AUDIOIO_FLAC_H
2 #define INCLUDED_AUDIOIO_FLAC_H
3 
4 #include <string>
5 #include <cstdio>
6 #include "audioio-buffered.h"
7 #include "audioio-forked-stream.h"
8 
9 /**
10  * Interface to FLAC decoders and encoders using UNIX pipe i/o.
11  *
12  * @author Kai Vehmanen
13  */
14 class FLAC_FORKED_INTERFACE : public AUDIO_IO_BUFFERED,
15 			      public AUDIO_IO_FORKED_STREAM {
16 
17  private:
18 
19   static std::string default_input_cmd;
20   static std::string default_output_cmd;
21 
22  public:
23 
24   static void set_input_cmd(const std::string& value);
25   static void set_output_cmd(const std::string& value);
26 
27  public:
28 
29   FLAC_FORKED_INTERFACE (const std::string& name = "");
30   virtual ~FLAC_FORKED_INTERFACE(void);
31 
clone(void)32   virtual FLAC_FORKED_INTERFACE* clone(void) const { return new FLAC_FORKED_INTERFACE(*this); }
new_expr(void)33   virtual FLAC_FORKED_INTERFACE* new_expr(void) const { return new FLAC_FORKED_INTERFACE(*this); }
34 
name(void)35   virtual std::string name(void) const { return("FLAC stream"); }
description(void)36   virtual std::string description(void) const { return("Interface to FLAC decoders and encoders using UNIX pipe i/o."); }
parameter_names(void)37   virtual std::string parameter_names(void) const { return("label"); }
locked_audio_format(void)38   virtual bool locked_audio_format(void) const { return(true); }
39 
supported_io_modes(void)40   virtual int supported_io_modes(void) const { return(io_read | io_write); }
supports_seeking(void)41   virtual bool supports_seeking(void) const { return(false); }
42 
43   virtual void open(void) throw(AUDIO_IO::SETUP_ERROR &);
44   virtual void close(void);
45 
46   virtual long int read_samples(void* target_buffer, long int samples);
47   virtual void write_samples(void* target_buffer, long int samples);
48 
finished(void)49   virtual bool finished(void) const { return(finished_rep); }
50 
51   virtual void set_parameter(int param, std::string value);
52   virtual std::string get_parameter(int param) const;
53 
54   virtual void start_io(void);
55   virtual void stop_io(void);
56 
57  protected:
58 
59   /* functions called by AUDIO_IO_FORKED_STREAM that require
60    * the use of AUDIO_IO methods */
61 
do_supports_seeking(void)62   virtual bool do_supports_seeking(void) const { return supports_seeking(); }
do_set_position_in_samples(SAMPLE_SPECS::sample_pos_t pos)63   virtual void do_set_position_in_samples(SAMPLE_SPECS::sample_pos_t pos) { set_position_in_samples(pos); }
64 
65  private:
66 
67   bool triggered_rep;
68   bool finished_rep;
69   long int bytes_rep;
70   int filedes_rep;
71   FILE* f1_rep;
72 
73   void fork_input_process(void);
74   void fork_output_process(void);
75 };
76 
77 #endif
78