summaryrefslogtreecommitdiff
path: root/include/cdio/audio.h
blob: 880cd541c17651f1a3d1e6b1339907a903b3aee7 (plain)
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
142
143
144
145
146
147
148
/* -*- c -*-
    $Id: audio.h,v 1.12 2008/03/25 15:59:08 karl Exp $

    Copyright (C) 2005, 2007, 2008 Rocky Bernstein <rocky@gnu.org>

    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 3 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, see <http://www.gnu.org/licenses/>.
*/

/** \file audio.h 
 *
 *  \brief The top-level header for CD audio-related libcdio
 *         calls.  These control playing of the CD-ROM through its 
 *         line-out jack.
 */
#ifndef __CDIO_AUDIO_H__
#define __CDIO_AUDIO_H__

#include <cdio/types.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

  /*! This struct is used by the cdio_audio_read_subchannel */
  typedef struct cdio_subchannel_s 
  {
    uint8_t format;
    uint8_t audio_status;
    uint8_t address:	4;
    uint8_t control:	4;
    uint8_t track;
    uint8_t index;
    msf_t   abs_addr;
    msf_t   rel_addr;
  } cdio_subchannel_t;
  
  /*! This struct is used by cdio_audio_get_volume and cdio_audio_set_volume */
  typedef struct cdio_audio_volume_s
  {
    uint8_t level[4];
  } cdio_audio_volume_t;
  

  /*! This struct is used by the CDROMPLAYTRKIND ioctl */
  typedef struct cdio_track_index_s
  {
    uint8_t	i_start_track;	/**< start track */
    uint8_t	i_start_index;	/**< start index */
    uint8_t	i_end_track;	/**< end track */
    uint8_t	i_end_index;	/**< end index */
  } cdio_track_index_t;

  /*!
    Get volume of an audio CD.
    
    @param p_cdio the CD object to be acted upon.
    @param p_volume place to put the list of volume outputs levels

    p_volume can be NULL in which case we return only whether the driver
    has the ability to get the volume or not.

  */
  driver_return_code_t cdio_audio_get_volume (CdIo_t *p_cdio,  /*out*/
					      cdio_audio_volume_t *p_volume);

  /*! 
    Return the number of seconds (discarding frame portion) of an MSF 
  */
  uint32_t cdio_audio_get_msf_seconds(msf_t *p_msf);

  /*!
    Pause playing CD through analog output

    @param p_cdio the CD object to be acted upon.
  */
  driver_return_code_t cdio_audio_pause (CdIo_t *p_cdio);

  /*!
    Playing CD through analog output at the given MSF.

    @param p_cdio the CD object to be acted upon.
    @param p_start_msf pointer to staring MSF
    @param p_end_msf pointer to ending MSF
  */
  driver_return_code_t cdio_audio_play_msf (CdIo_t *p_cdio, 
					    /*in*/msf_t *p_start_msf,
					    /*in*/ msf_t *p_end_msf);

  /*!
    Playing CD through analog output at the desired track and index

    @param p_cdio the CD object to be acted upon.
    @param p_track_index location to start/end.
  */
  driver_return_code_t cdio_audio_play_track_index 
  ( CdIo_t *p_cdio,  cdio_track_index_t *p_track_index);

  /*!
    Get subchannel information.

    @param p_cdio the CD object to be acted upon.
    @param p_subchannel place for returned subchannel information
  */
  driver_return_code_t cdio_audio_read_subchannel (CdIo_t *p_cdio, 
						   /*out*/ cdio_subchannel_t *p_subchannel);

  /*!
    Resume playing an audio CD.
    
    @param p_cdio the CD object to be acted upon.

  */
  driver_return_code_t cdio_audio_resume (CdIo_t *p_cdio);

  /*!
    Set volume of an audio CD.
    
    @param p_cdio the CD object to be acted upon.
    @param p_volume place for returned volume-level information

  */
  driver_return_code_t cdio_audio_set_volume (CdIo_t *p_cdio, /*out*/
					      cdio_audio_volume_t *p_volume);

  /*!
    Stop playing an audio CD.
    
    @param p_cdio the CD object to be acted upon.

  */
  driver_return_code_t cdio_audio_stop (CdIo_t *p_cdio);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __CDIO_AUDIO_H__ */