Mercurial > octave
annotate libinterp/dldfcn/audiodevinfo.cc @ 19547:c5b8a91baec6
avoid unnecessary use of pointer in audio code
* audiodevinfo.cc (audioplayer::get_left): Return RowVector instead of
pointer to RowVector. Method is now const. Change all uses.
(audioplayer::get_right): Likewise. Handle case of single channel
audio here.
(portaudio_play_callback): Not here.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 08 Jan 2015 13:08:52 -0500 |
parents | 827394ba8eb2 |
children | 7c0e20def8e3 |
rev | line source |
---|---|
19500
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
1 /* |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
2 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
3 Copyright (C) 2013 Vytautas JanĨauskas |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
4 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
5 This file is part of Octave. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
6 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
7 Octave is free software; you can redistribute it and/or modify it |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
8 under the terms of the GNU General Public License as published by the |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
9 Free Software Foundation; either version 3 of the License, or (at your |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
10 option) any later version. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
11 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but WITHOUT |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
15 for more details. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
16 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
18 along with Octave; see the file COPYING. If not, see |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
19 <http://www.gnu.org/licenses/>. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
20 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
21 */ |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
22 |
19501
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19500
diff
changeset
|
23 #ifdef HAVE_CONFIG_H |
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19500
diff
changeset
|
24 #include <config.h> |
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19500
diff
changeset
|
25 #endif |
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19500
diff
changeset
|
26 |
19510 | 27 // <cstdint> requires c++11 |
28 #include <stdint.h> | |
29 | |
30 #include <string> | |
31 #include <vector> | |
32 | |
19511
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19510
diff
changeset
|
33 #include "defun-dld.h" |
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19510
diff
changeset
|
34 #include "error.h" |
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19510
diff
changeset
|
35 #include "gripes.h" |
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19510
diff
changeset
|
36 #include "oct-obj.h" |
19510 | 37 #include "ov.h" |
19511
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19510
diff
changeset
|
38 #include "ov-int32.h" |
19472
c2031ad6dbe7
Fix octave header includes in audiodevinfo
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19469
diff
changeset
|
39 #include "ov-struct.h" |
19510 | 40 #include "parse.h" |
41 | |
42 #if defined (HAVE_PORTAUDIO) | |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
43 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
44 #include <portaudio.h> |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
45 |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
46 PaSampleFormat |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
47 bits_to_format (int bits) |
19473
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
48 { |
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
49 if (bits == 8) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
50 return paInt8; |
19473
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
51 else if (bits == 16) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
52 return paInt16; |
19473
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
53 else if (bits == 24) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
54 return paInt24; |
19473
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
55 else if (bits == 32) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
56 return paInt32; |
19473
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
57 else if (bits == -1) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
58 return paFloat32; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
59 else |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
60 return 0; |
19473
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19472
diff
changeset
|
61 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
62 |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
63 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
64 |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
65 DEFUN_DLD (audiodevinfo, args, , |
19505
ce02743b6f2a
Fix texinfo docstring syntax for all audio functions
Mike Miller <mtmiller@ieee.org>
parents:
19503
diff
changeset
|
66 "-*- texinfo -*-\n\ |
ce02743b6f2a
Fix texinfo docstring syntax for all audio functions
Mike Miller <mtmiller@ieee.org>
parents:
19503
diff
changeset
|
67 @deftypefn {Loadable Function} {@var{devinfo} =} audiodevinfo ()\n\ |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
68 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
69 @deftypefnx {Loadable Function} {@var{devs} =} audiodevinfo (@var{io})\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
70 @deftypefnx {Loadable Function} {@var{name} =} audiodevinfo (@var{io}, @var{id})\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
71 @deftypefnx {Loadable Function} {@var{id} =} audiodevinfo (@var{io}, @var{name})\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
72 @deftypefnx {Loadable Function} {@var{id} =} audiodevinfo (@var{io}, @var{rate}, @var{bits}, @var{chans})\n\ |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
73 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
74 @deftypefnx {Loadable Function} {@var{supports} =} audiodevinfo (@var{io}, @var{id}, @var{rate}, @var{bits}, @var{chans})\n\ |
19498
0ac6a4e7369b
change docstrings in audio defundld cc files to work with new texinfo
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19483
diff
changeset
|
75 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
76 Return a structure with fields \"input\" and \"output\".\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
77 The value of each field is a structure array with fields\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
78 \"Name\", \"DriverVersion\" and \"ID\" describing an audio device.\n\ |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
79 \n\ |
19498
0ac6a4e7369b
change docstrings in audio defundld cc files to work with new texinfo
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19483
diff
changeset
|
80 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
81 If the optional argument @var{io} is 1, return information about input\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
82 devices only. If it is 0, return information about output devices only.\n\ |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
83 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
84 If the optional argument @var{id} is provided, return information about\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
85 corresponding device.\n\ |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
86 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
87 If the optional argument @var{name} is provided, return the id of the\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
88 named device.\n\ |
19498
0ac6a4e7369b
change docstrings in audio defundld cc files to work with new texinfo
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19483
diff
changeset
|
89 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
90 Given a sampling rate, bits per sample, and number of channels for\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
91 an input or output device, return the ID of the first device that\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
92 supports playback or recording using the specified parameters.\n\ |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
93 \n\ |
19516
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
94 If also given a device ID, return true if the device supports playback\n\ |
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19515
diff
changeset
|
95 or recording using those parameters.\n\ |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
96 @end deftypefn") |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
97 { |
19483
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19473
diff
changeset
|
98 octave_value retval; |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
99 |
19483
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19473
diff
changeset
|
100 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
101 |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
102 int nargin = args.length (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
103 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
104 octave_scalar_map devinfo; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
105 octave_value_list input; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
106 octave_value_list output; |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
107 |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
108 PaError err = Pa_Initialize (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
109 |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
110 if (err != paNoError) |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
111 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
112 error ("audiodevinfo: PortAudio initialization failed"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
113 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
114 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
115 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
116 int num_devices = Pa_GetDeviceCount (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
117 |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
118 if (num_devices < 0) |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
119 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
120 error ("audiodevinfo: no audio device found"); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
121 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
122 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
123 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
124 octave_idx_type numinput = 0, numoutput = 0; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
125 for (int i = 0; i < num_devices; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
126 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
127 const PaDeviceInfo *device_info = Pa_GetDeviceInfo (i); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
128 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
129 if (device_info->maxInputChannels != 0) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
130 numinput++; |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
131 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
132 if (device_info->maxOutputChannels != 0) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
133 numoutput++; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
134 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
135 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
136 Cell input_name (dim_vector (1, numinput)); |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
137 Cell input_driver_version (dim_vector (1, numinput)); |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
138 Cell input_id (dim_vector (1, numinput)); |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
139 Cell output_name (dim_vector (1, numoutput)); |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
140 Cell output_driver_version (dim_vector (1, numoutput)); |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
141 Cell output_id (dim_vector (1, numoutput)); |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
142 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
143 octave_idx_type idx_i = 0, idx_o = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
144 for (int i = 0; i < num_devices; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
145 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
146 const PaDeviceInfo *device_info = Pa_GetDeviceInfo (i); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
147 const char *driver; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
148 char name[128]; |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
149 driver = Pa_GetHostApiInfo (device_info->hostApi)->name; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
150 sprintf (name, "%s (%s)", device_info->name, driver); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
151 |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
152 if (device_info->maxInputChannels != 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
153 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
154 input_name(idx_i) = name; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
155 input_driver_version(idx_i) = driver; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
156 input_id(idx_i) = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
157 idx_i++; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
158 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
159 |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
160 if (device_info->maxOutputChannels != 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
161 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
162 output_name(idx_o) = name; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
163 output_driver_version(idx_o) = driver; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
164 output_id(idx_o) = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
165 idx_o++; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
166 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
167 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
168 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
169 octave_map inputdev, outputdev; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
170 inputdev.setfield ("Name", input_name); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
171 inputdev.setfield ("DriverVersion", input_driver_version); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
172 inputdev.setfield ("ID", input_id); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
173 outputdev.setfield ("Name", output_name); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
174 outputdev.setfield ("DriverVersion", output_driver_version); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
175 outputdev.setfield ("ID", output_id); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
176 devinfo.setfield ("input", inputdev); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
177 devinfo.setfield ("output", outputdev); |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
178 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
179 // Return information about input and output audio devices and |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
180 // their properties. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
181 if (nargin == 0) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
182 retval = devinfo; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
183 // Return the number of input or output devices |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
184 else if (nargin == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
185 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
186 if (args(0).int_value () == 0) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
187 retval = numoutput; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
188 else if (args(0).int_value () == 1) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
189 retval = numinput; |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
190 else |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
191 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
192 error ("audiodevinfo: please specify 0 for output and 1 for input devices"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
193 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
194 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
195 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
196 // Return device name when given id or id when given device name. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
197 else if (nargin == 2) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
198 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
199 bool found = false; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
200 int outin = args(0).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
201 if (args(1).is_string ()) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
202 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
203 if (outin == 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
204 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
205 for (int i = 0; i < numoutput; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
206 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
207 if (output_name(i).string_value () == args(1).string_value ()) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
208 { |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
209 retval = output_id(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
210 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
211 break; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
212 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
213 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
214 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
215 else if (outin == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
216 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
217 for (int i = 0; i < numinput; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
218 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
219 if (input_name(i).string_value () == args(1).string_value ()) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
220 { |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
221 retval = input_id(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
222 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
223 break; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
224 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
225 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
226 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
227 else |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
228 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
229 error ("audiodevinfo: please specify 0 for output and 1 for input devices"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
230 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
231 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
232 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
233 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
234 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
235 if (outin == 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
236 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
237 for (int i = 0; i < numoutput; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
238 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
239 if (output_id(i).int_value () == args(1).int_value ()) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
240 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
241 retval = output_name(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
242 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
243 break; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
244 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
245 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
246 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
247 else if (outin == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
248 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
249 for (int i = 0; i < numinput; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
250 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
251 if (input_id(i).int_value () == args(1).int_value ()) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
252 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
253 retval = input_name(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
254 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
255 break; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
256 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
257 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
258 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
259 else |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
260 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
261 error ("audiodevinfo: please specify 0 for output and 1 for input devices"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
262 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
263 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
264 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
265 if (not found) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
266 error ("audiodevinfo: no device meeting the specified criteria found"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
267 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
268 else if (nargin == 3) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
269 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
270 // FIXME: what was supposed to happen here? |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
271 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
272 // Return the id of the first device meeting specified criteria. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
273 else if (nargin == 4) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
274 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
275 int io = args(0).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
276 int rate = args(1).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
277 int bits = args(2).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
278 int chans = args(3).int_value (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
279 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
280 for (int i = 0; i < num_devices; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
281 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
282 PaStreamParameters stream_parameters; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
283 stream_parameters.device = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
284 stream_parameters.channelCount = chans; |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
285 PaSampleFormat format = bits_to_format (bits); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
286 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
287 if (format != 0) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
288 stream_parameters.sampleFormat = format; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
289 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
290 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
291 error ("audiodevinfo: no such bits per sample format"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
292 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
293 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
294 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
295 stream_parameters.suggestedLatency |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
296 = Pa_GetDeviceInfo (i)->defaultLowInputLatency; |
19518 | 297 stream_parameters.hostApiSpecificStreamInfo = 0; |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
298 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
299 if (io == 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
300 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
301 if (Pa_GetDeviceInfo (i)->maxOutputChannels < chans) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
302 continue; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
303 |
19518 | 304 err = Pa_IsFormatSupported (0, &stream_parameters, rate); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
305 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
306 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
307 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
308 retval = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
309 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
310 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
311 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
312 else if (io == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
313 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
314 if (Pa_GetDeviceInfo (i)->maxInputChannels < chans) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
315 continue; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
316 |
19518 | 317 err = Pa_IsFormatSupported (&stream_parameters, 0, rate); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
318 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
319 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
320 retval = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
321 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
322 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
323 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
324 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
325 retval = -1; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
326 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
327 // Check if given device supports specified playback or recording modes. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
328 else if (nargin == 5) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
329 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
330 int io = args(0).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
331 int id = args(1).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
332 int rate = args(2).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
333 int bits = args(3).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
334 int chans = args(4).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
335 PaStreamParameters stream_parameters; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
336 stream_parameters.device = id; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
337 stream_parameters.channelCount = chans; |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
338 PaSampleFormat format = bits_to_format (bits); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
339 if (format != 0) |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
340 stream_parameters.sampleFormat = format; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
341 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
342 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
343 error ("audiodevinfo: no such bits per sample format"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
344 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
345 } |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
346 stream_parameters.suggestedLatency = |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
347 Pa_GetDeviceInfo (id)->defaultLowInputLatency; |
19518 | 348 stream_parameters.hostApiSpecificStreamInfo = 0; |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
349 if (io == 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
350 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
351 if (Pa_GetDeviceInfo (id)->maxOutputChannels < chans) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
352 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
353 retval = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
354 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
355 } |
19518 | 356 err = Pa_IsFormatSupported (0, &stream_parameters, rate); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
357 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
358 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
359 retval = 1; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
360 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
361 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
362 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
363 else if (io == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
364 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
365 if (Pa_GetDeviceInfo (id)->maxInputChannels < chans) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
366 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
367 retval = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
368 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
369 } |
19518 | 370 err = Pa_IsFormatSupported (&stream_parameters, 0, rate); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
371 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
372 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
373 retval = 1; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
374 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
375 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
376 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
377 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
378 { |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
379 error ("audiodevinfo: please specify 0 for output and 1 for input devices"); |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
380 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
381 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
382 retval = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
383 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
384 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
385 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
386 error ("audiodevinfo: wrong number of arguments"); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
387 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
388 } |
19483
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19473
diff
changeset
|
389 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
390 |
19483
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19473
diff
changeset
|
391 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
392 |
19483
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19473
diff
changeset
|
393 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
394 |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
395 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
396 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
397 |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
398 /* |
19528
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19526
diff
changeset
|
399 %!testif HAVE_PORTAUDIO |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
400 %! devinfo = audiodevinfo; |
19509 | 401 %! assert (rows (devinfo.input), 1); |
402 %! assert (rows (devinfo.output), 1); | |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
403 |
19528
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19526
diff
changeset
|
404 %!testif HAVE_PORTAUDIO |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
405 %! devinfo = audiodevinfo; |
19509 | 406 %! nout = audiodevinfo (0); |
407 %! nin = audiodevinfo (1); | |
408 %! assert (columns (devinfo.output), nout); | |
409 %! assert (columns (devinfo.input), nin); | |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
410 |
19528
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19526
diff
changeset
|
411 %!testif HAVE_PORTAUDIO |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
412 %! devinfo = audiodevinfo; |
19509 | 413 %! nout = audiodevinfo (0); |
414 %! nin = audiodevinfo (1); | |
415 %! for i = 1:nout, | |
416 %! assert (devinfo.output(i).Name, audiodevinfo (0, devinfo.output(i).ID)) | |
417 %! endfor | |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
418 %! for i=1:nin, |
19509 | 419 %! assert (devinfo.input(i).Name, audiodevinfo (1, devinfo.input(i).ID)) |
420 %! endfor | |
19469
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
421 |
19528
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19526
diff
changeset
|
422 %!testif HAVE_PORTAUDIO |
19503
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19501
diff
changeset
|
423 %! devinfo = audiodevinfo; |
19509 | 424 %! nout = audiodevinfo (0); |
425 %! nin = audiodevinfo (1); | |
426 %! for i = 1:nout, | |
427 %! assert (devinfo.output(i).ID, audiodevinfo (0, devinfo.output(i).Name)) | |
428 %! endfor | |
429 %! for i = 1:nin, | |
430 %! assert (devinfo.input(i).ID, audiodevinfo (1, devinfo.input(i).Name)) | |
431 %! endfor | |
19500
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19498
diff
changeset
|
432 */ |
19510 | 433 |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
434 #ifdef HAVE_PORTAUDIO |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
435 |
19510 | 436 enum audio_type { INT8, UINT8, INT16, DOUBLE }; |
437 | |
438 class audioplayer : public octave_base_value | |
439 { | |
440 public: | |
441 audioplayer (void); | |
442 ~audioplayer (void) {}; | |
443 | |
444 // Overloaded base functions | |
445 double player_value (void) const { return 0; } | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
446 virtual double scalar_value (bool = false) const { return 0; } |
19510 | 447 void print (std::ostream& os, bool pr_as_read_syntax = false) const; |
448 void print_raw (std::ostream& os, bool pr_as_read_syntax) const; | |
449 | |
450 // Properties | |
451 bool is_constant (void) const { return true; } | |
452 bool is_defined (void) const { return true; } | |
453 bool print_as_scalar (void) const { return true; } | |
454 | |
455 void init (void); | |
456 void init_fn (void); | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
457 void set_y (const octave_value& y); |
19510 | 458 void set_y (octave_function *fn); |
459 void set_y (std::string fn); | |
460 Matrix& get_y (void); | |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
461 RowVector get_left (void) const; |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
462 RowVector get_right (void) const; |
19510 | 463 void set_fs (int fs); |
464 int get_fs (void); | |
465 void set_nbits (int nbits); | |
466 int get_nbits (void); | |
467 void set_id (int id); | |
468 int get_id (void); | |
469 int get_channels (void); | |
470 audio_type get_type (void); | |
471 | |
472 void set_sample_number (unsigned int sample); | |
473 unsigned int get_sample_number (void); | |
474 unsigned int get_total_samples (void); | |
475 void set_end_sample (unsigned int sample); | |
476 unsigned int get_end_sample (void); | |
477 void reset_end_sample (void); | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
478 void set_tag (const charMatrix& tag); |
19510 | 479 charMatrix get_tag (void); |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
480 void set_userdata (const octave_value& userdata); |
19510 | 481 octave_value get_userdata (void); |
482 PaStream *get_stream (void); | |
483 | |
484 void playblocking (void); | |
485 void play (void); | |
486 void pause (void); | |
487 void resume (void); | |
488 void stop (void); | |
489 bool isplaying (void); | |
490 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
491 octave_function *octave_callback_function; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
492 |
19510 | 493 private: |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
494 int id; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
495 int fs; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
496 int nbits; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
497 int channels; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
498 unsigned int sample_number; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
499 unsigned int end_sample; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
500 charMatrix tag; |
19510 | 501 Matrix y; |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
502 octave_value userdata; |
19510 | 503 RowVector left; |
504 RowVector right; | |
505 PaStream *stream; | |
506 PaStreamParameters output_parameters; | |
507 audio_type type; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
508 |
19510 | 509 DECLARE_OCTAVE_ALLOCATOR |
510 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA | |
511 }; | |
512 | |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
513 #define BUFFER_SIZE 512 |
19510 | 514 |
515 DEFINE_OCTAVE_ALLOCATOR (audioplayer); | |
516 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (audioplayer, "audioplayer", "audioplayer"); | |
517 | |
518 int | |
519 is_big_endian (void) | |
520 { | |
521 union | |
522 { | |
523 uint32_t i; | |
524 char c[4]; | |
525 } bint = { 0x01020304 }; | |
526 return bint.c[0] == 1; | |
527 } | |
528 | |
529 static int | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
530 octave_play_callback (const void *, void *output, unsigned long frames, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
531 const PaStreamCallbackTimeInfo *, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
532 PaStreamCallbackFlags, void *data) |
19510 | 533 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
534 audioplayer *player = static_cast<audioplayer *> (data); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
535 int big_endian = is_big_endian (); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
536 octave_value_list args, retval; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
537 args(0) = frames; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
538 retval = feval (player->octave_callback_function, args, 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
539 RowVector sound_l, sound_r; |
19510 | 540 Matrix sound = retval(0).matrix_value (); |
541 int return_status = retval(1).int_value (); | |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
542 sound_l.resize (frames); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
543 sound_r.resize (frames); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
544 if (sound.cols () == 1) |
19510 | 545 { |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
546 for (unsigned long i = 0; i < frames; i++) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
547 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
548 sound_l(i) = sound(i, 0); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
549 sound_r(i) = sound(i, 0); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
550 } |
19510 | 551 } |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
552 else if (sound.cols () == 2) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
553 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
554 for (unsigned long i = 0; i < frames; i++) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
555 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
556 sound_l(i) = sound(i, 0); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
557 sound_r(i) = sound(i, 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
558 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
559 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
560 else |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
561 return paAbort; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
562 |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
563 for (unsigned long i = 0; i < frames; i++) |
19510 | 564 { |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
565 if (player->get_nbits () == 8) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
566 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
567 int8_t *buffer = static_cast<int8_t *> (output); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
568 buffer[2 * i] = sound_l.elem (i) * (pow (2.0, 7) - 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
569 buffer[2 * i + 1] = sound_r.elem (i) * (pow (2.0, 7) - 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
570 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
571 else if (player->get_nbits () == 16) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
572 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
573 int16_t *buffer = static_cast<int16_t *> (output); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
574 buffer[2 * i] = sound_l.elem (i) * (pow (2.0, 15) - 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
575 buffer[2 * i + 1] = sound_r.elem (i) * (pow (2.0, 15) - 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
576 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
577 else if (player->get_nbits () == 24) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
578 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
579 uint8_t *buffer = static_cast<uint8_t *> (output); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
580 int32_t sample_l = sound_l.elem (i) * (pow (2.0, 23) - 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
581 int32_t sample_r = sound_r.elem (i) * (pow (2.0, 23) - 1); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
582 sample_l &= 0x00ffffff; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
583 sample_r &= 0x00ffffff; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
584 // FIXME: Would a mask work better? |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
585 uint8_t *_sample_l = reinterpret_cast<uint8_t *> (&sample_l); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
586 uint8_t *_sample_r = reinterpret_cast<uint8_t *> (&sample_r); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
587 buffer[i * 6 + 0] = _sample_l[0 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
588 buffer[i * 6 + 1] = _sample_l[1 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
589 buffer[i * 6 + 2] = _sample_l[2 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
590 buffer[i * 6 + 3] = _sample_r[0 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
591 buffer[i * 6 + 4] = _sample_r[1 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
592 buffer[i * 6 + 5] = _sample_r[2 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
593 } |
19510 | 594 } |
595 return return_status; | |
596 } | |
597 | |
598 static int | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
599 portaudio_play_callback (const void *, void *output, unsigned long frames, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
600 const PaStreamCallbackTimeInfo*, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
601 PaStreamCallbackFlags, void *data) |
19510 | 602 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
603 audioplayer *player = static_cast<audioplayer *> (data); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
604 int big_endian = is_big_endian (); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
605 int channels = player->get_channels (); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
606 |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
607 const RowVector sound_l = player->get_left (); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
608 const RowVector sound_r = player->get_right (); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
609 |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
610 for (unsigned long j = 0, k = 0; j < frames; j++, k += 2) |
19510 | 611 { |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
612 unsigned int sample_number = player->get_sample_number (); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
613 if (sample_number > player->get_end_sample ()) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
614 return paAbort; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
615 |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
616 if (player->get_type () == DOUBLE) |
19510 | 617 { |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
618 if (player->get_nbits () == 8) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
619 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
620 int8_t *buffer = static_cast<int8_t *> (output); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
621 buffer[k] = sound_l.elem (sample_number) * (pow (2.0, 7) - 1); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
622 buffer[k + 1] = sound_r.elem (sample_number) * (pow (2.0, 7) - 1); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
623 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
624 else if (player->get_nbits () == 16) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
625 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
626 int16_t *buffer = static_cast<int16_t *> (output); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
627 buffer[k] = sound_l.elem (sample_number) * (pow (2.0, 15) - 1); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
628 buffer[k + 1] = sound_r.elem (sample_number) * (pow (2.0, 15) - 1); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
629 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
630 else if (player->get_nbits () == 24) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
631 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
632 uint8_t *buffer = static_cast<uint8_t *> (output); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
633 int32_t sample_l = sound_l.elem (sample_number) * (pow (2.0, 23) - 1); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
634 int32_t sample_r = sound_r.elem (sample_number) * (pow (2.0, 23) - 1); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
635 sample_l &= 0x00ffffff; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
636 sample_r &= 0x00ffffff; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
637 // FIXME: Would a mask work better? |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
638 uint8_t *_sample_l = reinterpret_cast<uint8_t *> (&sample_l); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
639 uint8_t *_sample_r = reinterpret_cast<uint8_t *> (&sample_r); |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
640 buffer[j * 6 + 0] = _sample_l[0 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
641 buffer[j * 6 + 1] = _sample_l[1 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
642 buffer[j * 6 + 2] = _sample_l[2 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
643 buffer[j * 6 + 3] = _sample_r[0 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
644 buffer[j * 6 + 4] = _sample_r[1 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
645 buffer[j * 6 + 5] = _sample_r[2 + big_endian]; |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
646 } |
19510 | 647 } |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
648 else if (player->get_type () == INT8) |
19510 | 649 { |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
650 int8_t *buffer = static_cast<int8_t *> (output); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
651 buffer[k] = sound_l.elem (sample_number); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
652 buffer[k + 1] = sound_r.elem (sample_number); |
19510 | 653 } |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
654 else if (player->get_type () == UINT8) |
19510 | 655 { |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
656 uint8_t *buffer = static_cast<uint8_t *> (output); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
657 buffer[k] = sound_l.elem (sample_number); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
658 buffer[k + 1] = sound_r.elem (sample_number); |
19510 | 659 } |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
660 else if (player->get_type () == INT16) |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
661 { |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
662 int16_t *buffer = static_cast<int16_t *> (output); |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
663 buffer[k] = sound_l.elem (sample_number); |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
664 buffer[k + 1] = sound_r.elem (sample_number); |
19544
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
665 } |
827394ba8eb2
Backed out changeset 5f313345912f
John W. Eaton <jwe@octave.org>
parents:
19543
diff
changeset
|
666 player->set_sample_number (sample_number + 1); |
19543
5f313345912f
avoid indexing before beginning of string
John W. Eaton <jwe@octave.org>
parents:
19528
diff
changeset
|
667 } |
19510 | 668 return paContinue; |
669 } | |
670 | |
671 audioplayer::audioplayer (void) | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
672 : octave_callback_function (0), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
673 id (-1), fs (0), nbits (16), channels (0), sample_number (0), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
674 end_sample (-1), tag (""), y (), userdata (Matrix ()), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
675 left (), right (), stream (0), output_parameters (), type () |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
676 { } |
19510 | 677 |
678 void | |
679 audioplayer::print (std::ostream& os, bool pr_as_read_syntax) const | |
680 { | |
681 print_raw (os, pr_as_read_syntax); | |
682 newline (os); | |
683 } | |
684 | |
685 void | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
686 audioplayer::print_raw (std::ostream& os, bool) const |
19510 | 687 { |
688 os << 0; | |
689 } | |
690 | |
691 void | |
692 audioplayer::init_fn (void) | |
693 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
694 if (Pa_Initialize () != paNoError) |
19510 | 695 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
696 error ("audioplayer: initialization error!"); |
19510 | 697 return; |
698 } | |
699 | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
700 if (Pa_GetDeviceCount () < 0) |
19510 | 701 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
702 error ("audioplayer: no audio devices found!"); |
19510 | 703 return; |
704 } | |
705 | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
706 int device = get_id (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
707 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
708 if (device == -1) |
19510 | 709 device = Pa_GetDefaultOutputDevice (); |
710 | |
711 output_parameters.device = device; | |
712 output_parameters.channelCount = 2; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
713 output_parameters.sampleFormat = bits_to_format (get_nbits ()); |
19510 | 714 output_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighOutputLatency; |
19518 | 715 output_parameters.hostApiSpecificStreamInfo = 0; |
19510 | 716 } |
717 | |
718 void | |
719 audioplayer::init (void) | |
720 { | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
721 // Both of these variables are unused. Should they be |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
722 // eliminated or is something not yet implemented? |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
723 // |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
724 // int channels = y.rows (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
725 // RowVector *sound_l = get_left (); |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
726 |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
727 if (Pa_Initialize () != paNoError) |
19510 | 728 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
729 error ("audioplayer: initialization error!"); |
19510 | 730 return; |
731 } | |
732 | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
733 if (Pa_GetDeviceCount () < 0) |
19510 | 734 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
735 error ("audioplayer: no audio devices found!"); |
19510 | 736 return; |
737 } | |
738 | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
739 int device = get_id (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
740 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
741 if (device == -1) |
19510 | 742 device = Pa_GetDefaultOutputDevice (); |
743 | |
744 output_parameters.device = device; | |
745 output_parameters.channelCount = 2; | |
746 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
747 if (type == DOUBLE) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
748 output_parameters.sampleFormat = bits_to_format (get_nbits ()); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
749 else if (type == INT8) |
19510 | 750 output_parameters.sampleFormat = paInt8; |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
751 else if (type == UINT8) |
19510 | 752 output_parameters.sampleFormat = paUInt8; |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
753 else if (type == INT16) |
19510 | 754 output_parameters.sampleFormat = paInt16; |
755 | |
756 output_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighOutputLatency; | |
19518 | 757 output_parameters.hostApiSpecificStreamInfo = 0; |
19510 | 758 } |
759 | |
760 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
761 audioplayer::set_y (const octave_value& y_arg) |
19510 | 762 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
763 if (y_arg.is_int8_type ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
764 type = INT8; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
765 else if (y_arg.is_uint8_type ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
766 type = UINT8; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
767 else if (y_arg.is_int16_type ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
768 type = INT16; |
19510 | 769 else |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
770 type = DOUBLE; |
19510 | 771 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
772 y = y_arg.matrix_value (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
773 |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
774 if (y.rows () > 2) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
775 y = y.transpose (); |
19510 | 776 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
777 channels = y.rows (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
778 left = y.row (0); |
19510 | 779 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
780 if (channels == 2) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
781 right = y.row (1); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
782 |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
783 reset_end_sample (); |
19510 | 784 } |
785 | |
786 void | |
787 audioplayer::set_y (octave_function *fn) | |
788 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
789 octave_callback_function = fn; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
790 channels = 2; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
791 reset_end_sample (); |
19510 | 792 } |
793 | |
794 Matrix& | |
795 audioplayer::get_y (void) | |
796 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
797 return y; |
19510 | 798 } |
799 | |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
800 RowVector |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
801 audioplayer::get_left (void) const |
19510 | 802 { |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
803 return left; |
19510 | 804 } |
805 | |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
806 RowVector |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
807 audioplayer::get_right (void) const |
19510 | 808 { |
19547
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
809 return channels == 1 ? left : right; |
19510 | 810 } |
811 | |
812 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
813 audioplayer::set_fs (int fs_arg) |
19510 | 814 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
815 fs = fs_arg; |
19510 | 816 } |
817 | |
818 int | |
819 audioplayer::get_fs (void) | |
820 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
821 return fs; |
19510 | 822 } |
823 | |
824 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
825 audioplayer::set_nbits (int nbits_arg) |
19510 | 826 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
827 nbits = nbits_arg; |
19510 | 828 } |
829 | |
830 int | |
831 audioplayer::get_nbits (void) | |
832 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
833 return nbits; |
19510 | 834 } |
835 | |
836 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
837 audioplayer::set_id (int id_arg) |
19510 | 838 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
839 id = id_arg; |
19510 | 840 } |
841 | |
842 int | |
843 audioplayer::get_id (void) | |
844 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
845 return id; |
19510 | 846 } |
847 | |
848 int | |
849 audioplayer::get_channels (void) | |
850 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
851 return channels; |
19510 | 852 } |
853 | |
854 audio_type | |
855 audioplayer::get_type (void) | |
856 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
857 return type; |
19510 | 858 } |
859 | |
860 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
861 audioplayer::set_sample_number (unsigned int sample_number_arg) |
19510 | 862 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
863 sample_number = sample_number_arg; |
19510 | 864 } |
865 | |
866 unsigned int | |
867 audioplayer::get_sample_number (void) | |
868 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
869 return sample_number; |
19510 | 870 } |
871 | |
872 unsigned int | |
873 audioplayer::get_total_samples (void) | |
874 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
875 return left.length (); |
19510 | 876 } |
877 | |
878 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
879 audioplayer::set_end_sample (unsigned int end_sample_arg) |
19510 | 880 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
881 end_sample = end_sample_arg; |
19510 | 882 } |
883 | |
884 unsigned int | |
885 audioplayer::get_end_sample (void) | |
886 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
887 return end_sample; |
19510 | 888 } |
889 | |
890 void | |
891 audioplayer::reset_end_sample (void) | |
892 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
893 set_end_sample (left.length ()); |
19510 | 894 } |
895 | |
896 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
897 audioplayer::set_tag (const charMatrix& tag_arg) |
19510 | 898 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
899 tag = tag_arg; |
19510 | 900 } |
901 | |
902 charMatrix | |
903 audioplayer::get_tag (void) | |
904 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
905 return tag; |
19510 | 906 } |
907 | |
908 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
909 audioplayer::set_userdata (const octave_value& userdata_arg) |
19510 | 910 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
911 userdata = userdata_arg; |
19510 | 912 } |
913 | |
914 octave_value | |
915 audioplayer::get_userdata (void) | |
916 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
917 return userdata; |
19510 | 918 } |
919 | |
920 void | |
921 audioplayer::playblocking (void) | |
922 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
923 if (get_stream ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
924 stop (); |
19510 | 925 |
926 PaError err; | |
927 uint32_t buffer[BUFFER_SIZE * 2]; | |
19518 | 928 err = Pa_OpenStream (&stream, 0, &(output_parameters), get_fs (), |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
929 BUFFER_SIZE, paClipOff, 0, 0); |
19510 | 930 if (err != paNoError) |
931 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
932 error ("audioplayer: unable to open audio playback stream"); |
19510 | 933 return; |
934 } | |
935 | |
936 err = Pa_StartStream (stream); | |
937 if (err != paNoError) | |
938 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
939 error ("audioplayer: unable to start start audio playback stream"); |
19510 | 940 return; |
941 } | |
942 | |
943 unsigned int start, end; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
944 start = get_sample_number (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
945 end = get_end_sample (); |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
946 for (unsigned int i = start; i < end; i += BUFFER_SIZE) |
19510 | 947 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
948 if (octave_callback_function != 0) |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
949 octave_play_callback (0, buffer, BUFFER_SIZE, 0, 0, this); |
19510 | 950 else |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
951 portaudio_play_callback (0, buffer, BUFFER_SIZE, 0, 0, this); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
952 |
19510 | 953 err = Pa_WriteStream (stream, buffer, BUFFER_SIZE); |
954 } | |
955 | |
956 err = Pa_StopStream (stream); | |
957 if (err != paNoError) | |
958 { | |
959 error ("audioplayer: Error stoping audio playback stream"); | |
960 return; | |
961 } | |
962 | |
963 err = Pa_CloseStream (stream); | |
964 if (err != paNoError) | |
965 { | |
966 error ("audioplayer: Error closing audio playback stream"); | |
967 return; | |
968 } | |
969 | |
970 stream = 0; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
971 set_sample_number (0); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
972 reset_end_sample (); |
19510 | 973 } |
974 | |
975 void | |
976 audioplayer::play (void) | |
977 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
978 if (get_stream ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
979 stop (); |
19510 | 980 |
981 PaError err; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
982 if (octave_callback_function != 0) |
19518 | 983 err = Pa_OpenStream (&stream, 0, &(output_parameters), |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
984 get_fs (), BUFFER_SIZE, paClipOff, |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
985 octave_play_callback, this); |
19510 | 986 else |
19518 | 987 err = Pa_OpenStream (&stream, 0, &(output_parameters), |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
988 get_fs (), BUFFER_SIZE, paClipOff, |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
989 portaudio_play_callback, this); |
19510 | 990 |
991 if (err != paNoError) | |
992 { | |
993 error ("audioplayer: Error opening audio playback stream"); | |
994 return; | |
995 } | |
996 | |
997 err = Pa_StartStream (stream); | |
998 if (err != paNoError) | |
999 { | |
1000 error ("audioplayer: Error starting audio playback stream"); | |
1001 return; | |
1002 } | |
1003 } | |
1004 | |
1005 void | |
1006 audioplayer::pause (void) | |
1007 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1008 if (get_stream () == 0) |
19510 | 1009 return; |
1010 | |
1011 PaError err; | |
1012 err = Pa_StopStream (stream); | |
1013 if (err != paNoError) | |
1014 { | |
1015 error ("audiorecorder: Error stoping audio recording stream"); | |
1016 return; | |
1017 } | |
1018 } | |
1019 | |
1020 void | |
1021 audioplayer::resume (void) | |
1022 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1023 if (get_stream () == 0) |
19510 | 1024 return; |
1025 | |
1026 PaError err; | |
1027 err = Pa_StartStream (stream); | |
1028 if (err != paNoError) | |
1029 { | |
1030 error ("audiorecorder: Error starting audio recording stream"); | |
1031 return; | |
1032 } | |
1033 } | |
1034 | |
1035 PaStream * | |
1036 audioplayer::get_stream (void) | |
1037 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1038 return stream; |
19510 | 1039 } |
1040 | |
1041 void | |
1042 audioplayer::stop (void) | |
1043 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1044 if (get_stream () == 0) |
19510 | 1045 return; |
1046 | |
1047 PaError err; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1048 set_sample_number (0); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1049 reset_end_sample (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1050 if (not Pa_IsStreamStopped (get_stream ())) |
19510 | 1051 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1052 err = Pa_AbortStream (get_stream ()); |
19510 | 1053 if (err != paNoError) |
1054 { | |
1055 error ("audioplayer: Error stopping audio playback stream"); | |
1056 return; | |
1057 } | |
1058 } | |
1059 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1060 err = Pa_CloseStream (get_stream ()); |
19510 | 1061 if (err != paNoError) |
1062 { | |
1063 error ("audioplayer: Error closing audio playback stream"); | |
1064 return; | |
1065 } | |
1066 | |
1067 stream = 0; | |
1068 } | |
1069 | |
1070 bool | |
1071 audioplayer::isplaying (void) | |
1072 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1073 if (get_stream () == 0) |
19510 | 1074 return false; |
1075 | |
1076 PaError err; | |
1077 err = Pa_IsStreamActive (stream); | |
19515
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19514
diff
changeset
|
1078 if (err != 0 && err != 1) |
19510 | 1079 { |
1080 error ("audiorecorder: Error checking stream activity status"); | |
1081 return false; | |
1082 } | |
1083 | |
1084 return (err == 1); | |
1085 } | |
1086 | |
1087 class audiorecorder : public octave_base_value | |
1088 { | |
1089 public: | |
1090 audiorecorder (void); | |
1091 ~audiorecorder (void) {}; | |
1092 | |
1093 // Overloaded base functions | |
1094 double player_value (void) const { return 0; } | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1095 virtual double scalar_value (bool = false) const { return 0; } |
19510 | 1096 void print (std::ostream& os, bool pr_as_read_syntax = false) const; |
1097 void print_raw (std::ostream& os, bool pr_as_read_syntax) const; | |
1098 | |
1099 // Properties | |
1100 bool is_constant (void) const { return true; } | |
1101 bool is_defined (void) const { return true; } | |
1102 bool print_as_scalar (void) const { return true; } | |
1103 | |
1104 void init (void); | |
1105 void set_fs (int fs); | |
1106 int get_fs (void); | |
1107 void set_nbits (int nbits); | |
1108 int get_nbits (void); | |
1109 void set_id (int id); | |
1110 int get_id (void); | |
1111 void set_channels (int channels); | |
1112 int get_channels (void); | |
1113 audio_type get_type (void); | |
1114 | |
1115 void set_sample_number (unsigned int sample); | |
1116 unsigned int get_sample_number (void); | |
1117 unsigned int get_total_samples (void); | |
1118 void set_end_sample (unsigned int sample); | |
1119 unsigned int get_end_sample (void); | |
1120 void reset_end_sample (void); | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1121 void set_tag (const charMatrix& tag); |
19510 | 1122 charMatrix get_tag (void); |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1123 void set_userdata (const octave_value& userdata); |
19510 | 1124 octave_value get_userdata (void); |
1125 PaStream *get_stream (void); | |
1126 | |
1127 octave_value getaudiodata (void); | |
1128 audioplayer *getplayer (void); | |
1129 bool isrecording (void); | |
1130 audioplayer play (void); | |
1131 void record (void); | |
1132 void recordblocking (float seconds); | |
1133 void pause (void); | |
1134 void resume (void); | |
1135 void stop (void); | |
1136 void append (float sample_l, float sample_r); | |
1137 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1138 octave_function *octave_callback_function; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1139 |
19510 | 1140 private: |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1141 int id; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1142 int fs; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1143 int nbits; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1144 int channels; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1145 unsigned int sample_number; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1146 unsigned int end_sample; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1147 charMatrix tag; |
19510 | 1148 Matrix y; |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1149 octave_value userdata; |
19510 | 1150 std::vector<float> left; |
1151 std::vector<float> right; | |
1152 PaStream *stream; | |
1153 PaStreamParameters input_parameters; | |
1154 audio_type type; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1155 |
19510 | 1156 DECLARE_OCTAVE_ALLOCATOR |
1157 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA | |
1158 }; | |
1159 | |
1160 DEFINE_OCTAVE_ALLOCATOR (audiorecorder); | |
1161 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (audiorecorder, "audiorecorder", "audiorecorder"); | |
1162 | |
1163 static int | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1164 octave_record_callback (const void *input, void *, unsigned long frames, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1165 const PaStreamCallbackTimeInfo *, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1166 PaStreamCallbackFlags, void *data) |
19510 | 1167 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1168 audiorecorder *recorder = static_cast<audiorecorder *> (data); |
19510 | 1169 int channels = recorder->get_channels (); |
1170 float sample_l, sample_r; | |
1171 Matrix sound; | |
1172 sound.resize (frames, 2); | |
1173 if (recorder->get_nbits () == 8) | |
1174 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1175 const int8_t *input8 = static_cast<const int8_t *> (input); |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1176 for (unsigned long i = 0; i < frames; i++) |
19510 | 1177 { |
1178 sample_l = input8[i * channels] / (pow (2.0, 7) - 1.0); | |
1179 sample_r = input8[i * channels + (channels - 1)] / (pow (2.0, 7) - 1.0); | |
1180 sound(i, 0) = sample_l; | |
1181 sound(i, 1) = sample_r; | |
1182 } | |
1183 } | |
1184 else if (recorder->get_nbits () == 16) | |
1185 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1186 const int16_t *input16 = static_cast<const int16_t *> (input); |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1187 for (unsigned long i = 0; i < frames; i++) |
19510 | 1188 { |
1189 sample_l = input16[i * channels] / (pow (2.0, 15) - 1.0); | |
1190 sample_r = input16[i * channels + (channels - 1)] / (pow (2.0, 15) - 1.0); | |
1191 sound(i, 0) = sample_l; | |
1192 sound(i, 1) = sample_r; | |
1193 } | |
1194 } | |
1195 else if (recorder->get_nbits () == 24) | |
1196 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1197 // FIXME: Is there a better way? |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1198 const uint8_t *input24 = static_cast<const uint8_t *> (input); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1199 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1200 int32_t sample_l32 = 0, sample_r32 = 0; |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1201 uint8_t *_sample_l = reinterpret_cast<uint8_t *> (&sample_l); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1202 uint8_t *_sample_r = reinterpret_cast<uint8_t *> (&sample_r); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1203 |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1204 for (unsigned long i = 0; i < frames; i++) |
19510 | 1205 { |
1206 for (int j = 0; j < 3; j++) | |
1207 { | |
1208 _sample_l[j] = input24[i * channels * 3 + j]; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1209 _sample_r[j] = input24[i * channels * 3 + (channels - 1) * 3 + j]; |
19510 | 1210 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1211 |
19510 | 1212 if (sample_l32 & 0x00800000) |
1213 sample_l32 |= 0xff000000; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1214 |
19510 | 1215 if (sample_r32 & 0x00800000) |
1216 sample_r32 |= 0xff000000; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1217 |
19510 | 1218 sound(i, 0) = sample_l32 / pow (2.0, 23); |
1219 sound(i, 1) = sample_r32 / pow (2.0, 23); | |
1220 } | |
1221 } | |
1222 | |
1223 octave_value_list args, retval; | |
1224 args(0) = sound; | |
1225 retval = feval (recorder->octave_callback_function, args, 1); | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1226 |
19510 | 1227 return retval(0).int_value (); |
1228 } | |
1229 | |
1230 static int | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1231 portaudio_record_callback (const void *input, void *, unsigned long frames, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1232 const PaStreamCallbackTimeInfo *, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1233 PaStreamCallbackFlags, void *data) |
19510 | 1234 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1235 audiorecorder *recorder = static_cast<audiorecorder *> (data); |
19510 | 1236 int channels = recorder->get_channels (); |
1237 float sample_l, sample_r; | |
1238 if (recorder->get_nbits () == 8) | |
1239 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1240 const int8_t *input8 = static_cast<const int8_t *> (input); |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1241 for (unsigned long i = 0; i < frames; i++) |
19510 | 1242 { |
1243 sample_l = input8[i * channels] / (pow (2.0, 7) - 1.0); | |
1244 sample_r = input8[i * channels + (channels - 1)] / (pow (2.0, 7) - 1.0); | |
1245 recorder->append (sample_l, sample_r); | |
1246 } | |
1247 } | |
1248 else if (recorder->get_nbits () == 16) | |
1249 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1250 const int16_t *input16 = static_cast<const int16_t *> (input); |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1251 for (unsigned long i = 0; i < frames; i++) |
19510 | 1252 { |
1253 sample_l = input16[i * channels] / (pow (2.0, 15) - 1.0); | |
1254 sample_r = input16[i * channels + (channels - 1)] / (pow (2.0, 15) - 1.0); | |
1255 recorder->append (sample_l, sample_r); | |
1256 } | |
1257 } | |
1258 else if (recorder->get_nbits () == 24) | |
1259 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1260 // FIXME: Is there a better way? |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1261 const uint8_t *input24 = static_cast<const uint8_t *> (input); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1262 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1263 int32_t sample_l32 = 0, sample_r32 = 0; |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1264 uint8_t *_sample_l = reinterpret_cast<uint8_t *> (&sample_l); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1265 uint8_t *_sample_r = reinterpret_cast<uint8_t *> (&sample_r); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1266 |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1267 for (unsigned long i = 0; i < frames; i++) |
19510 | 1268 { |
1269 for (int j = 0; j < 3; j++) | |
1270 { | |
1271 _sample_l[j] = input24[i * channels * 3 + j]; | |
1272 _sample_r[j] = input24[i * channels * 3 + (channels - 1) * 3 + j]; | |
1273 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1274 |
19510 | 1275 if (sample_l32 & 0x00800000) |
1276 sample_l32 |= 0xff000000; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1277 |
19510 | 1278 if (sample_r32 & 0x00800000) |
1279 sample_r32 |= 0xff000000; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1280 |
19510 | 1281 recorder->append (sample_l32 / pow (2.0, 23), sample_r32 / pow (2.0, 23)); |
1282 } | |
1283 } | |
1284 | |
1285 if (recorder->get_sample_number () > recorder->get_end_sample ()) | |
1286 return paComplete; | |
1287 | |
1288 return paContinue; | |
1289 } | |
1290 | |
1291 audiorecorder::audiorecorder (void) | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1292 : octave_callback_function (0), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1293 id (-1), fs (44100), nbits (16), channels (2), sample_number (0), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1294 end_sample (-1), tag (""), y (), userdata (Matrix ()), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1295 left (), right (), stream (0), input_parameters (), type () |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1296 { } |
19510 | 1297 |
1298 void | |
1299 audiorecorder::print (std::ostream& os, bool pr_as_read_syntax) const | |
1300 { | |
1301 print_raw (os, pr_as_read_syntax); | |
1302 newline (os); | |
1303 } | |
1304 | |
1305 void | |
19512
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19511
diff
changeset
|
1306 audiorecorder::print_raw (std::ostream& os, bool) const |
19510 | 1307 { |
1308 os << 0; | |
1309 } | |
1310 | |
1311 void | |
1312 audiorecorder::init (void) | |
1313 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1314 if (Pa_Initialize () != paNoError) |
19510 | 1315 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1316 error ("audiorecorder: initialization error!"); |
19510 | 1317 return; |
1318 } | |
1319 | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1320 if (Pa_GetDeviceCount () < 0) |
19510 | 1321 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1322 error ("audiorecorder: no audio devices found!"); |
19510 | 1323 return; |
1324 } | |
1325 | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1326 int device = get_id (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1327 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1328 if (device == -1) |
19510 | 1329 device = Pa_GetDefaultInputDevice (); |
1330 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1331 input_parameters.device = device; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1332 input_parameters.channelCount = get_channels (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1333 input_parameters.sampleFormat = bits_to_format (get_nbits ()); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1334 input_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighInputLatency; |
19518 | 1335 input_parameters.hostApiSpecificStreamInfo = 0; |
19510 | 1336 } |
1337 | |
1338 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1339 audiorecorder::set_fs (int fs_arg) |
19510 | 1340 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1341 fs = fs_arg; |
19510 | 1342 } |
1343 | |
1344 int | |
1345 audiorecorder::get_fs (void) | |
1346 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1347 return fs; |
19510 | 1348 } |
1349 | |
1350 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1351 audiorecorder::set_nbits (int nbits_arg) |
19510 | 1352 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1353 nbits = nbits_arg; |
19510 | 1354 } |
1355 | |
1356 int | |
1357 audiorecorder::get_nbits (void) | |
1358 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1359 return nbits; |
19510 | 1360 } |
1361 | |
1362 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1363 audiorecorder::set_id (int id_arg) |
19510 | 1364 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1365 id = id_arg; |
19510 | 1366 } |
1367 | |
1368 int | |
1369 audiorecorder::get_id (void) | |
1370 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1371 return id; |
19510 | 1372 } |
1373 | |
1374 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1375 audiorecorder::set_channels (int channels_arg) |
19510 | 1376 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1377 assert (channels_arg == 1 || channels_arg == 2); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1378 channels = channels_arg; |
19510 | 1379 } |
1380 | |
1381 int | |
1382 audiorecorder::get_channels (void) | |
1383 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1384 return channels; |
19510 | 1385 } |
1386 | |
1387 audio_type | |
1388 audiorecorder::get_type (void) | |
1389 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1390 return type; |
19510 | 1391 } |
1392 | |
1393 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1394 audiorecorder::set_sample_number (unsigned int sample_number_arg) |
19510 | 1395 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1396 sample_number = sample_number_arg; |
19510 | 1397 } |
1398 | |
1399 unsigned int | |
1400 audiorecorder::get_sample_number (void) | |
1401 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1402 return sample_number; |
19510 | 1403 } |
1404 | |
1405 unsigned int | |
1406 audiorecorder::get_total_samples (void) | |
1407 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1408 return left.size (); |
19510 | 1409 } |
1410 | |
1411 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1412 audiorecorder::set_end_sample (unsigned int end_sample_arg) |
19510 | 1413 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1414 end_sample = end_sample_arg; |
19510 | 1415 } |
1416 | |
1417 unsigned int | |
1418 audiorecorder::get_end_sample (void) | |
1419 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1420 return end_sample; |
19510 | 1421 } |
1422 | |
1423 void | |
1424 audiorecorder::reset_end_sample (void) | |
1425 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1426 set_end_sample (left.size ()); |
19510 | 1427 } |
1428 | |
1429 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1430 audiorecorder::set_tag (const charMatrix& tag_arg) |
19510 | 1431 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1432 tag = tag_arg; |
19510 | 1433 } |
1434 | |
1435 charMatrix | |
1436 audiorecorder::get_tag (void) | |
1437 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1438 return tag; |
19510 | 1439 } |
1440 | |
1441 void | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1442 audiorecorder::set_userdata (const octave_value& userdata_arg) |
19510 | 1443 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1444 userdata = userdata_arg; |
19510 | 1445 } |
1446 | |
1447 octave_value | |
1448 audiorecorder::get_userdata (void) | |
1449 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1450 return userdata; |
19510 | 1451 } |
1452 | |
1453 octave_value | |
1454 audiorecorder::getaudiodata (void) | |
1455 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1456 Matrix audio (2, left.size ()); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1457 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1458 for (unsigned int i = 0; i < left.size (); i++) |
19510 | 1459 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1460 audio(0, i) = left[i]; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1461 audio(1, i) = right[i]; |
19510 | 1462 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1463 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1464 return audio; |
19510 | 1465 } |
1466 | |
1467 audioplayer * | |
1468 audiorecorder::getplayer (void) | |
1469 { | |
1470 audioplayer *player = new audioplayer (); | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1471 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1472 player->set_y (getaudiodata ()); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1473 player->set_fs (get_fs ()); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1474 player->set_nbits (get_nbits ()); |
19510 | 1475 player->init (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1476 |
19510 | 1477 return player; |
1478 } | |
1479 | |
1480 bool | |
1481 audiorecorder::isrecording (void) | |
1482 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1483 if (get_stream () == 0) |
19510 | 1484 return false; |
1485 | |
1486 PaError err; | |
1487 err = Pa_IsStreamActive (stream); | |
19515
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19514
diff
changeset
|
1488 if (err != 0 && err != 1) |
19510 | 1489 { |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1490 error ("audiorecorder: unable to check stream activity status"); |
19510 | 1491 return false; |
1492 } | |
1493 | |
1494 return (err == 1); | |
1495 } | |
1496 | |
1497 void | |
1498 audiorecorder::record (void) | |
1499 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1500 if (get_stream ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1501 stop (); |
19510 | 1502 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1503 left.clear (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1504 right.clear (); |
19510 | 1505 PaError err; |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1506 if (octave_callback_function != 0) |
19510 | 1507 { |
19518 | 1508 err = Pa_OpenStream (&stream, &(input_parameters), 0, |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1509 get_fs (), BUFFER_SIZE, paClipOff, |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1510 octave_record_callback, this); |
19510 | 1511 } |
1512 else | |
1513 { | |
19518 | 1514 err = Pa_OpenStream (&stream, &(input_parameters), 0, |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1515 get_fs (), BUFFER_SIZE, paClipOff, |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1516 portaudio_record_callback, this); |
19510 | 1517 } |
1518 if (err != paNoError) | |
1519 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1520 error ("audiorecorder: unable to open audio recording stream"); |
19510 | 1521 return; |
1522 } | |
1523 err = Pa_StartStream (stream); | |
1524 if (err != paNoError) | |
1525 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1526 error ("audiorecorder: unable to start audio recording stream"); |
19510 | 1527 return; |
1528 } | |
1529 } | |
1530 | |
1531 void | |
1532 audiorecorder::recordblocking (float seconds) | |
1533 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1534 if (get_stream ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1535 stop (); |
19510 | 1536 |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1537 left.clear (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1538 right.clear (); |
19510 | 1539 |
1540 PaError err; | |
19518 | 1541 err = Pa_OpenStream (&stream, &(input_parameters), 0, |
1542 get_fs (), BUFFER_SIZE, paClipOff, 0, this); | |
19510 | 1543 if (err != paNoError) |
1544 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1545 error ("audiorecorder: unable to open audio recording stream"); |
19510 | 1546 return; |
1547 } | |
1548 | |
1549 err = Pa_StartStream (stream); | |
1550 if (err != paNoError) | |
1551 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1552 error ("audiorecorder: unable to start audio recording stream"); |
19510 | 1553 return; |
1554 } | |
1555 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1556 unsigned int frames = seconds * get_fs (); |
19510 | 1557 uint8_t buffer[BUFFER_SIZE * 2 * 3]; |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
1558 for (unsigned long i = 0; i < frames / BUFFER_SIZE; i++) |
19510 | 1559 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1560 Pa_ReadStream (get_stream (), buffer, BUFFER_SIZE); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1561 if (octave_callback_function != 0) |
19518 | 1562 octave_record_callback (buffer, 0, BUFFER_SIZE, 0, 0, this); |
19510 | 1563 else |
19518 | 1564 portaudio_record_callback (buffer, 0, BUFFER_SIZE, 0, 0, this); |
19510 | 1565 } |
1566 } | |
1567 | |
1568 void | |
1569 audiorecorder::pause (void) | |
1570 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1571 if (get_stream () == 0) |
19510 | 1572 return; |
1573 | |
1574 PaError err; | |
1575 err = Pa_StopStream (stream); | |
1576 if (err != paNoError) | |
1577 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1578 error ("audiorecorder: unable to stop audio recording stream"); |
19510 | 1579 return; |
1580 } | |
1581 } | |
1582 | |
1583 void | |
1584 audiorecorder::resume (void) | |
1585 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1586 if (get_stream () == 0) |
19510 | 1587 return; |
1588 | |
1589 PaError err; | |
1590 err = Pa_StartStream (stream); | |
1591 if (err != paNoError) | |
1592 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1593 error ("audiorecorder: unable to start audio recording stream"); |
19510 | 1594 return; |
1595 } | |
1596 } | |
1597 | |
1598 void | |
1599 audiorecorder::stop (void) | |
1600 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1601 if (get_stream () == 0) |
19510 | 1602 return; |
1603 | |
1604 PaError err; | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1605 if (not Pa_IsStreamStopped (get_stream ())) |
19510 | 1606 { |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1607 err = Pa_AbortStream (get_stream ()); |
19510 | 1608 if (err != paNoError) |
1609 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1610 error ("audioplayer: unable to stop audio playback stream"); |
19510 | 1611 return; |
1612 } | |
1613 } | |
1614 | |
1615 err = Pa_CloseStream (stream); | |
1616 if (err != paNoError) | |
1617 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1618 error ("audiorecorder: unable to close audio recording stream"); |
19510 | 1619 return; |
1620 } | |
1621 | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1622 set_sample_number (0); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1623 reset_end_sample (); |
19510 | 1624 stream = 0; |
1625 } | |
1626 | |
1627 void | |
1628 audiorecorder::append (float sample_l, float sample_r) | |
1629 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1630 left.push_back (sample_l); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1631 right.push_back (sample_r); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1632 set_sample_number (get_sample_number () + 1); |
19510 | 1633 } |
1634 | |
1635 PaStream * | |
1636 audiorecorder::get_stream (void) | |
1637 { | |
19517
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19516
diff
changeset
|
1638 return stream; |
19510 | 1639 } |
1640 | |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
1641 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
1642 |
19510 | 1643 DEFUN_DLD (__recorder_audiorecorder__, args, , |
1644 "-*- texinfo -*-\n\ | |
1645 @deftypefn {Loadable Function} {@var{recorder} =} __recorder_audiorecorder__ (@var{fs}, @var{nbits}, @var{channels})\n\ | |
1646 @deftypefnx {Loadable Function} {@var{recorder} =} __recorder_audiorecorder__ (@var{fs}, @var{nbits}, @var{channels}, @var{id})\n\ | |
1647 @deftypefnx {Loadable Function} {@var{recorder} =} __recorder_audiorecorder__ (@var{fcn}, @dots{})\n\ | |
1648 Undocumented internal function.\n\ | |
1649 @end deftypefn") | |
1650 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1651 octave_value retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1652 |
19510 | 1653 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1654 |
19510 | 1655 int nargin = args.length (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1656 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1657 audiorecorder* recorder = new audiorecorder (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1658 |
19510 | 1659 int offset = 0; |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1660 |
19510 | 1661 if (nargin > 0) |
1662 { | |
1663 bool is_function = args(0).is_string () || args(0).is_function_handle () || args(0).is_inline_function (); | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1664 |
19510 | 1665 if (is_function) |
1666 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1667 recorder->octave_callback_function = args(0).function_value (); |
19510 | 1668 offset = 1; |
1669 } | |
1670 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1671 |
19510 | 1672 switch (nargin - offset) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1673 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1674 case 3: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1675 recorder->set_fs (args(0 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1676 recorder->set_nbits (args(1 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1677 recorder->set_channels (args(2 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1678 break; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1679 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1680 case 4: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1681 recorder->set_fs (args(0 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1682 recorder->set_nbits (args(1 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1683 recorder->set_channels (args(2 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1684 recorder->set_id (args(3 + offset).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1685 break; |
19510 | 1686 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1687 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1688 recorder->init (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1689 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1690 retval = recorder; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1691 |
19510 | 1692 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1693 |
19510 | 1694 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1695 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1696 #endif |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1697 |
19510 | 1698 return retval; |
1699 } | |
1700 | |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
1701 #ifdef HAVE_PORTAUDIO |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
1702 |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1703 static audiorecorder * |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1704 get_recorder (const octave_value& ov) |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1705 { |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1706 const octave_base_value& rep = ov.get_rep (); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1707 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1708 octave_base_value *ncrep = const_cast<octave_base_value *> (&rep); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1709 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1710 return dynamic_cast<audiorecorder *> (ncrep); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1711 } |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1712 |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
1713 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
1714 |
19510 | 1715 DEFUN_DLD (__recorder_getaudiodata__, args, , |
1716 "-*- texinfo -*-\n\ | |
1717 @deftypefn {Loadable Function} {@var{data}} __recorder_getaudiodata__ (@var{recorder})\n\ | |
1718 Undocumented internal function.\n\ | |
1719 @end deftypefn") | |
1720 { | |
1721 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1722 |
19510 | 1723 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1724 |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1725 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1726 retval = recorder->getaudiodata (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1727 |
19510 | 1728 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1729 |
19510 | 1730 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1731 |
19510 | 1732 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1733 |
19510 | 1734 return retval; |
1735 } | |
1736 | |
1737 DEFUN_DLD (__recorder_get_channels__, args, , | |
1738 "-*- texinfo -*-\n\ | |
1739 @deftypefn {Loadable Function} {@var{n} =} __recorder_get_channels__ (@var{recorder})\n\ | |
1740 Undocumented internal function.\n\ | |
1741 @end deftypefn") | |
1742 { | |
1743 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1744 |
19510 | 1745 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1746 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1747 if (args.length () == 1) |
19510 | 1748 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1749 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1750 retval = recorder->get_channels (); |
19510 | 1751 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1752 |
19510 | 1753 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1754 |
19510 | 1755 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1756 |
19510 | 1757 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1758 |
19510 | 1759 return retval; |
1760 } | |
1761 | |
1762 DEFUN_DLD (__recorder_get_fs__, args, , | |
1763 "-*- texinfo -*-\n\ | |
1764 @deftypefn {Loadable Function} {@var{fs} =} __recorder_get_fs__ (@var{recorder})\n\ | |
1765 Undocumented internal function.\n\ | |
1766 @end deftypefn") | |
1767 { | |
1768 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1769 |
19510 | 1770 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1771 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1772 if (args.length () == 1) |
19510 | 1773 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1774 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1775 retval = recorder->get_fs (); |
19510 | 1776 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1777 |
19510 | 1778 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1779 |
19510 | 1780 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1781 |
19510 | 1782 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1783 |
19510 | 1784 return retval; |
1785 } | |
1786 | |
1787 DEFUN_DLD (__recorder_get_id__, args, , | |
1788 "-*- texinfo -*-\n\ | |
1789 @deftypefn {Loadable Function} {@var{id} =} __recorder_get_id__ (@var{recorder})\n\ | |
1790 Undocumented internal function.\n\ | |
1791 @end deftypefn") | |
1792 { | |
1793 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1794 |
19510 | 1795 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1796 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1797 if (args.length () == 1) |
19510 | 1798 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1799 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1800 retval = recorder->get_id (); |
19510 | 1801 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1802 |
19510 | 1803 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1804 |
19510 | 1805 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1806 |
19510 | 1807 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1808 |
19510 | 1809 return retval; |
1810 } | |
1811 | |
1812 DEFUN_DLD (__recorder_get_nbits__, args, , | |
1813 "-*- texinfo -*-\n\ | |
1814 @deftypefn {Loadable Function} {@var{nbits} =} __recorder_get_nbits__ (@var{recorder})\n\ | |
1815 Undocumented internal function.\n\ | |
1816 @end deftypefn") | |
1817 { | |
1818 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1819 |
19510 | 1820 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1821 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1822 if (args.length () == 1) |
19510 | 1823 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1824 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1825 retval = recorder->get_nbits (); |
19510 | 1826 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1827 |
19510 | 1828 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1829 |
19510 | 1830 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1831 |
19510 | 1832 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1833 |
19510 | 1834 return retval; |
1835 } | |
1836 | |
1837 DEFUN_DLD (__recorder_get_sample_number__, args, , | |
1838 "-*- texinfo -*-\n\ | |
1839 @deftypefn {Loadable Function} {@var{n} =} __recorder_get_sample_number__ (@var{recorder})\n\ | |
1840 Undocumented internal function.\n\ | |
1841 @end deftypefn") | |
1842 { | |
1843 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1844 |
19510 | 1845 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1846 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1847 if (args.length () == 1) |
19510 | 1848 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1849 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1850 retval = recorder->get_sample_number (); |
19510 | 1851 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1852 |
19510 | 1853 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1854 |
19510 | 1855 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1856 |
19510 | 1857 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1858 |
19510 | 1859 return retval; |
1860 } | |
1861 | |
1862 DEFUN_DLD (__recorder_get_tag__, args, , | |
1863 "-*- texinfo -*-\n\ | |
1864 @deftypefn {Loadable Function} {@var{tag} =} __recorder_get_tag__ (@var{recorder})\n\ | |
1865 Undocumented internal function.\n\ | |
1866 @end deftypefn") | |
1867 { | |
1868 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1869 |
19510 | 1870 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1871 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1872 if (args.length () == 1) |
19510 | 1873 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1874 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1875 retval = recorder->get_tag (); |
19510 | 1876 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1877 |
19510 | 1878 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1879 |
19510 | 1880 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1881 |
19510 | 1882 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1883 |
19510 | 1884 return retval; |
1885 } | |
1886 | |
1887 DEFUN_DLD (__recorder_get_total_samples__, args, , | |
1888 "-*- texinfo -*-\n\ | |
1889 @deftypefn {Loadable Function} {@var{n} =} __recorder_get_total_samples__ (@var{recorder})\n\ | |
1890 Undocumented internal function.\n\ | |
1891 @end deftypefn") | |
1892 { | |
1893 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1894 |
19510 | 1895 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1896 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1897 if (args.length () == 1) |
19510 | 1898 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1899 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1900 retval = recorder->get_total_samples (); |
19510 | 1901 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1902 |
19510 | 1903 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1904 |
19510 | 1905 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1906 |
19510 | 1907 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1908 |
19510 | 1909 return retval; |
1910 } | |
1911 | |
1912 DEFUN_DLD (__recorder_get_userdata__, args, , | |
1913 "-*- texinfo -*-\n\ | |
1914 @deftypefn {Loadable Function} {@var{data} =} __recorder_get_userdata__ (@var{recorder})\n\ | |
1915 Undocumented internal function.\n\ | |
1916 @end deftypefn") | |
1917 { | |
1918 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1919 |
19510 | 1920 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1921 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1922 if (args.length () == 1) |
19510 | 1923 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1924 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 1925 retval = recorder->get_userdata (); |
1926 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1927 |
19510 | 1928 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1929 |
19510 | 1930 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1931 |
19510 | 1932 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1933 |
19510 | 1934 return retval; |
1935 } | |
1936 | |
1937 DEFUN_DLD (__recorder_isrecording__, args, , | |
1938 "-*- texinfo -*-\n\ | |
1939 @deftypefn {Loadable Function} {} __recorder_isrecording__ (@var{recorder})\n\ | |
1940 Undocumented internal function.\n\ | |
1941 @end deftypefn") | |
1942 { | |
1943 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1944 |
19510 | 1945 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1946 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1947 if (args.length () == 1) |
19510 | 1948 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1949 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1950 retval = recorder->isrecording () ? true : false; |
19510 | 1951 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1952 |
19510 | 1953 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1954 |
19510 | 1955 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1956 |
19510 | 1957 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1958 |
19510 | 1959 return retval; |
1960 } | |
1961 | |
1962 DEFUN_DLD (__recorder_pause__, args, , | |
1963 "-*- texinfo -*-\n\ | |
1964 @deftypefn {Loadable Function} {} __recorder_pause__ (@var{recorder})\n\ | |
1965 Undocumented internal function.\n\ | |
1966 @end deftypefn") | |
1967 { | |
1968 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1969 |
19510 | 1970 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1971 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1972 if (args.length () == 1) |
19510 | 1973 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1974 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 1975 recorder->pause (); |
1976 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1977 |
19510 | 1978 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1979 |
19510 | 1980 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1981 |
19510 | 1982 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1983 |
19510 | 1984 return retval; |
1985 } | |
1986 | |
1987 DEFUN_DLD (__recorder_recordblocking__, args, , | |
1988 "-*- texinfo -*-\n\ | |
1989 @deftypefn {Loadable Function} {} __recorder_recordblocking__ (@var{recorder}, @var{seconds})\n\ | |
1990 Undocumented internal function.\n\ | |
1991 @end deftypefn") | |
1992 { | |
1993 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1994 |
19510 | 1995 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1996 |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
1997 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 1998 recorder->recordblocking (args(1).float_value ()); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
1999 |
19510 | 2000 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2001 |
19510 | 2002 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2003 |
19510 | 2004 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2005 |
19510 | 2006 return retval; |
2007 } | |
2008 | |
2009 DEFUN_DLD (__recorder_record__, args, , | |
2010 "-*- texinfo -*-\n\ | |
2011 @deftypefn {Loadable Function} {} __recorder_record__ (@var{recorder})\n\ | |
2012 @deftypefnx {Loadable Function} {} __recorder_record__ (@var{recorder}, @var{seconds})\n\ | |
2013 Undocumented internal function.\n\ | |
2014 @end deftypefn") | |
2015 { | |
2016 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2017 |
19510 | 2018 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2019 |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2020 audiorecorder *recorder = get_recorder (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2021 |
19510 | 2022 if (args.length () == 1) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2023 recorder->record (); |
19510 | 2024 else if (args.length () == 2) |
2025 { | |
2026 recorder->set_end_sample (args(1).int_value () * recorder->get_fs ()); | |
2027 recorder->record (); | |
2028 } | |
2029 else | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2030 error ("audiorecorder: wrong number of arguments passed to record"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2031 |
19510 | 2032 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2033 |
19510 | 2034 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2035 |
19510 | 2036 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2037 |
19510 | 2038 return retval; |
2039 } | |
2040 | |
2041 DEFUN_DLD (__recorder_resume__, args, , | |
2042 "-*- texinfo -*-\n\ | |
2043 @deftypefn {Loadable Function} {} __recorder_resume__ (@var{recorder})\n\ | |
2044 Undocumented internal function.\n\ | |
2045 @end deftypefn") | |
2046 { | |
2047 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2048 |
19510 | 2049 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2050 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2051 if (args.length () == 1) |
19510 | 2052 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2053 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 2054 recorder->resume (); |
2055 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2056 |
19510 | 2057 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2058 |
19510 | 2059 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2060 |
19510 | 2061 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2062 |
19510 | 2063 return retval; |
2064 } | |
2065 | |
2066 DEFUN_DLD (__recorder_set_fs__, args, , | |
2067 "-*- texinfo -*-\n\ | |
2068 @deftypefn {Loadable Function} {} __recorder_set_fs__ (@var{recorder}, @var{fs})\n\ | |
2069 Undocumented internal function.\n\ | |
2070 @end deftypefn") | |
2071 { | |
2072 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2073 |
19510 | 2074 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2075 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2076 if (args.length () == 2) |
19510 | 2077 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2078 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 2079 recorder->set_fs (args(1).int_value ()); |
2080 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2081 |
19510 | 2082 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2083 |
19510 | 2084 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2085 |
19510 | 2086 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2087 |
19510 | 2088 return retval; |
2089 } | |
2090 | |
2091 DEFUN_DLD (__recorder_set_tag__, args, , | |
2092 "-*- texinfo -*-\n\ | |
2093 @deftypefn {Loadable Function} {} __recorder_set_tag__ (@var{recorder}, @var{tag})\n\ | |
2094 Undocumented internal function.\n\ | |
2095 @end deftypefn") | |
2096 { | |
2097 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2098 |
19510 | 2099 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2100 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2101 if (args.length () == 2) |
19510 | 2102 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2103 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 2104 recorder->set_tag (args(1).char_matrix_value ()); |
2105 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2106 |
19510 | 2107 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2108 |
19510 | 2109 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2110 |
19510 | 2111 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2112 |
19510 | 2113 return retval; |
2114 } | |
2115 | |
2116 DEFUN_DLD (__recorder_set_userdata__, args, , | |
2117 "-*- texinfo -*-\n\ | |
2118 @deftypefn {Loadable Function} {} __recorder_set_userdata__ (@var{recorder}, @var{data})\n\ | |
2119 Undocumented internal function.\n\ | |
2120 @end deftypefn") | |
2121 { | |
2122 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2123 |
19510 | 2124 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2125 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2126 if (args.length () == 2) |
19510 | 2127 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2128 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 2129 recorder->set_userdata (args(1)); |
2130 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2131 |
19510 | 2132 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2133 |
19510 | 2134 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2135 |
19510 | 2136 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2137 |
19510 | 2138 return retval; |
2139 } | |
2140 | |
2141 DEFUN_DLD (__recorder_stop__, args, , | |
2142 "-*- texinfo -*-\n\ | |
2143 @deftypefn {Loadable Function} {} __recorder_stop__ (@var{recorder})\n\ | |
2144 Undocumented internal function.\n\ | |
2145 @end deftypefn") | |
2146 { | |
2147 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2148 |
19510 | 2149 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2150 |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2151 audiorecorder *recorder = get_recorder (args(0)); |
19510 | 2152 recorder->stop (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2153 |
19510 | 2154 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2155 |
19510 | 2156 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2157 |
19510 | 2158 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2159 |
19510 | 2160 return retval; |
2161 } | |
2162 | |
2163 DEFUN_DLD (__player_audioplayer__, args, , | |
2164 "-*- texinfo -*-\n\ | |
2165 @deftypefn {Loadable Function} {@var{player} =} __player_audioplayer__ (@var{y}, @var{fs})\n\ | |
2166 @deftypefnx {Loadable Function} {@var{player} =} __player_audioplayer__ (@var{y}, @var{fs}, @var{nbits})\n\ | |
2167 @deftypefnx {Loadable Function} {@var{player} =} __player_audioplayer__ (@var{y}, @var{fs}, @var{nbits}, @var{id})\n\ | |
2168 Undocumented internal function.\n\ | |
2169 @end deftypefn") | |
2170 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2171 octave_value retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2172 |
19510 | 2173 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2174 |
19510 | 2175 int nargin = args.length (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2176 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2177 audioplayer* recorder = new audioplayer (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2178 |
19510 | 2179 bool is_function = args(0).is_string () || args(0).is_function_handle () || args(0).is_inline_function (); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2180 |
19510 | 2181 if (is_function) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2182 recorder->set_y (args(0).function_value ()); |
19510 | 2183 else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2184 recorder->set_y (args(0)); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2185 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2186 recorder->set_fs (args(1).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2187 |
19510 | 2188 switch (nargin) |
2189 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2190 case 3: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2191 recorder->set_nbits (args(2).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2192 break; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2193 case 4: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2194 recorder->set_nbits (args(2).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2195 recorder->set_id (args(3).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2196 break; |
19510 | 2197 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2198 |
19510 | 2199 if (is_function) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2200 recorder->init_fn (); |
19510 | 2201 else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2202 recorder->init (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2203 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2204 retval = recorder; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2205 |
19510 | 2206 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2207 |
19510 | 2208 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2209 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2210 #endif |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2211 |
19510 | 2212 return retval; |
2213 } | |
2214 | |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
2215 #ifdef HAVE_PORTAUDIO |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
2216 |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2217 static audioplayer * |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2218 get_player (const octave_value& ov) |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2219 { |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2220 const octave_base_value& rep = ov.get_rep (); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2221 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2222 octave_base_value *ncrep = const_cast<octave_base_value *> (&rep); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2223 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2224 return dynamic_cast<audioplayer *> (ncrep); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2225 } |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2226 |
19526
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
2227 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19519
diff
changeset
|
2228 |
19510 | 2229 DEFUN_DLD (__player_get_channels__, args, , |
2230 "-*- texinfo -*-\n\ | |
2231 @deftypefn {Loadable Function} {@var{n} =} __player_get_channels__ (@var{player})\n\ | |
2232 Undocumented internal function.\n\ | |
2233 @end deftypefn") | |
2234 { | |
2235 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2236 |
19510 | 2237 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2238 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2239 if (args.length () == 1) |
19510 | 2240 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2241 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2242 retval = player->get_channels (); |
19510 | 2243 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2244 |
19510 | 2245 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2246 |
19510 | 2247 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2248 |
19510 | 2249 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2250 |
19510 | 2251 return retval; |
2252 } | |
2253 | |
2254 DEFUN_DLD (__player_get_fs__, args, , | |
2255 "-*- texinfo -*-\n\ | |
2256 @deftypefn {Loadable Function} {@var{fs} =} __player_get_fs__ (@var{player})\n\ | |
2257 Undocumented internal function.\n\ | |
2258 @end deftypefn") | |
2259 { | |
2260 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2261 |
19510 | 2262 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2263 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2264 if (args.length () == 1) |
19510 | 2265 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2266 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2267 retval = player->get_fs (); |
19510 | 2268 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2269 |
19510 | 2270 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2271 |
19510 | 2272 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2273 |
19510 | 2274 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2275 |
19510 | 2276 return retval; |
2277 } | |
2278 | |
2279 DEFUN_DLD (__player_get_id__, args, , | |
2280 "-*- texinfo -*-\n\ | |
2281 @deftypefn {Loadable Function} {@var{id} =} __player_get_id__ (@var{player})\n\ | |
2282 Undocumented internal function.\n\ | |
2283 @end deftypefn") | |
2284 { | |
2285 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2286 |
19510 | 2287 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2288 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2289 if (args.length () == 1) |
19510 | 2290 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2291 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2292 retval = player->get_id (); |
19510 | 2293 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2294 |
19510 | 2295 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2296 |
19510 | 2297 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2298 |
19510 | 2299 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2300 |
19510 | 2301 return retval; |
2302 } | |
2303 | |
2304 DEFUN_DLD (__player_get_nbits__, args, , | |
2305 "-*- texinfo -*-\n\ | |
2306 @deftypefn {Loadable Function} {@var{nbits} =} __player_get_nbits__ (@var{player})\n\ | |
2307 Undocumented internal function.\n\ | |
2308 @end deftypefn") | |
2309 { | |
2310 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2311 |
19510 | 2312 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2313 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2314 if (args.length () == 1) |
19510 | 2315 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2316 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2317 retval = player->get_nbits (); |
19510 | 2318 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2319 |
19510 | 2320 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2321 |
19510 | 2322 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2323 |
19510 | 2324 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2325 |
19510 | 2326 return retval; |
2327 } | |
2328 | |
2329 DEFUN_DLD (__player_get_sample_number__, args, , | |
2330 "-*- texinfo -*-\n\ | |
2331 @deftypefn {Loadable Function} {@var{n} =} __player_get_sample_number__ (@var{player})\n\ | |
2332 Undocumented internal function.\n\ | |
2333 @end deftypefn") | |
2334 { | |
2335 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2336 |
19510 | 2337 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2338 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2339 if (args.length () == 1) |
19510 | 2340 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2341 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2342 retval = player->get_sample_number (); |
19510 | 2343 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2344 |
19510 | 2345 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2346 |
19510 | 2347 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2348 |
19510 | 2349 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2350 |
19510 | 2351 return retval; |
2352 } | |
2353 | |
2354 DEFUN_DLD (__player_get_tag__, args, , | |
2355 "-*- texinfo -*-\n\ | |
2356 @deftypefn {Loadable Function} {@var{tag} =} __player_get_tag__ (@var{player})\n\ | |
2357 Undocumented internal function.\n\ | |
2358 @end deftypefn") | |
2359 { | |
2360 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2361 |
19510 | 2362 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2363 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2364 if (args.length () == 1) |
19510 | 2365 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2366 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2367 retval = player->get_tag (); |
19510 | 2368 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2369 |
19510 | 2370 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2371 |
19510 | 2372 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2373 |
19510 | 2374 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2375 |
19510 | 2376 return retval; |
2377 } | |
2378 | |
2379 DEFUN_DLD (__player_get_total_samples__, args, , | |
2380 "-*- texinfo -*-\n\ | |
2381 @deftypefn {Loadable Function} {@var{n} =} __player_get_total_samples__ (@var{player})\n\ | |
2382 Undocumented internal function.\n\ | |
2383 @end deftypefn") | |
2384 { | |
2385 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2386 |
19510 | 2387 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2388 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2389 if (args.length () == 1) |
19510 | 2390 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2391 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2392 retval = player->get_total_samples (); |
19510 | 2393 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2394 |
19510 | 2395 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2396 |
19510 | 2397 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2398 |
19510 | 2399 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2400 |
19510 | 2401 return retval; |
2402 } | |
2403 | |
2404 DEFUN_DLD (__player_get_userdata__, args, , | |
2405 "-*- texinfo -*-\n\ | |
2406 @deftypefn {Loadable Function} {@var{data} =} __player_get_userdata__ (@var{player})\n\ | |
2407 Undocumented internal function.\n\ | |
2408 @end deftypefn") | |
2409 { | |
2410 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2411 |
19510 | 2412 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2413 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2414 if (args.length () == 1) |
19510 | 2415 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2416 audioplayer *player = get_player (args(0)); |
19510 | 2417 retval = player->get_userdata (); |
2418 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2419 |
19510 | 2420 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2421 |
19510 | 2422 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2423 |
19510 | 2424 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2425 |
19510 | 2426 return retval; |
2427 } | |
2428 | |
2429 DEFUN_DLD (__player_isplaying__, args, , | |
2430 "-*- texinfo -*-\n\ | |
2431 @deftypefn {Loadable Function} {} __player_isplaying__ (@var{player})\n\ | |
2432 Undocumented internal function.\n\ | |
2433 @end deftypefn") | |
2434 { | |
2435 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2436 |
19510 | 2437 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2438 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2439 if (args.length () == 1) |
19510 | 2440 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2441 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2442 retval = player->isplaying () ? true : false; |
19510 | 2443 } |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2444 |
19510 | 2445 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2446 |
19510 | 2447 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2448 |
19510 | 2449 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2450 |
19510 | 2451 return retval; |
2452 } | |
2453 | |
2454 DEFUN_DLD (__player_pause__, args, , | |
2455 "-*- texinfo -*-\n\ | |
2456 @deftypefn {Loadable Function} {} __player_pause__ (@var{player})\n\ | |
2457 Undocumented internal function.\n\ | |
2458 @end deftypefn") | |
2459 { | |
2460 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2461 |
19510 | 2462 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2463 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2464 if (args.length () == 1) |
19510 | 2465 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2466 audioplayer *player = get_player (args(0)); |
19510 | 2467 player->pause (); |
2468 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2469 |
19510 | 2470 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2471 |
19510 | 2472 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2473 |
19510 | 2474 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2475 |
19510 | 2476 return retval; |
2477 } | |
2478 | |
2479 DEFUN_DLD (__player_playblocking__, args, , | |
2480 "-*- texinfo -*-\n\ | |
2481 @deftypefn {Loadable Function} {} __player_playblocking__ (@var{player})\n\ | |
2482 @deftypefnx {Loadable Function} {} __player_playblocking__ (@var{player}, @var{start})\n\ | |
2483 @deftypefnx {Loadable Function} {} __player_playblocking__ (@var{player}, [@var{start}, @var{end}])\n\ | |
2484 Undocumented internal function.\n\ | |
2485 @end deftypefn") | |
2486 { | |
2487 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2488 |
19510 | 2489 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2490 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2491 if (args.length () == 1) |
19510 | 2492 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2493 audioplayer *player = get_player (args(0)); |
19510 | 2494 player->playblocking (); |
2495 } | |
2496 else | |
2497 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2498 audioplayer *player = get_player (args(0)); |
19510 | 2499 if (args(1).is_matrix_type ()) |
2500 { | |
2501 RowVector range = args(1).row_vector_value (); | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2502 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2503 unsigned int start = range.elem (0) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2504 unsigned int end = range.elem (1) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2505 |
19515
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19514
diff
changeset
|
2506 if (start > player->get_total_samples () |
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19514
diff
changeset
|
2507 || start > end || end > player->get_total_samples ()) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2508 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2509 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2510 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2511 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2512 |
19510 | 2513 player->set_sample_number (start); |
2514 player->set_end_sample (end); | |
2515 } | |
2516 else | |
2517 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2518 unsigned int start = args(1).int_value () - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2519 |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
2520 if (start > player->get_total_samples ()) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2521 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2522 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2523 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2524 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2525 |
19510 | 2526 player->set_sample_number (start); |
2527 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2528 |
19510 | 2529 player->playblocking (); |
2530 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2531 |
19510 | 2532 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2533 |
19510 | 2534 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2535 |
19510 | 2536 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2537 |
19510 | 2538 return retval; |
2539 } | |
2540 | |
2541 DEFUN_DLD (__player_play__, args, , | |
2542 "-*- texinfo -*-\n\ | |
2543 @deftypefn {Loadable Function} {} __player_play__ (@var{player})\n\ | |
2544 @deftypefnx {Loadable Function} {} __player_play__ (@var{player}, @var{start})\n\ | |
2545 @deftypefnx {Loadable Function} {} __player_play__ (@var{player}, [@var{start}, @var{end}])\n\ | |
2546 Undocumented internal function.\n\ | |
2547 @end deftypefn") | |
2548 { | |
2549 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2550 |
19510 | 2551 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2552 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2553 if (args.length () == 1) |
19510 | 2554 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2555 audioplayer *player = get_player (args(0)); |
19510 | 2556 player->play (); |
2557 } | |
2558 else | |
2559 { | |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2560 audioplayer *player = get_player (args(0)); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2561 |
19510 | 2562 if (args(1).is_matrix_type ()) |
2563 { | |
2564 RowVector range = args(1).row_vector_value (); | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2565 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2566 unsigned int start = range.elem (0) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2567 unsigned int end = range.elem (1) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2568 |
19515
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19514
diff
changeset
|
2569 if (start > player->get_total_samples () |
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19514
diff
changeset
|
2570 || start > end || end > player->get_total_samples ()) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2571 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2572 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2573 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2574 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2575 |
19510 | 2576 player->set_sample_number (start); |
2577 player->set_end_sample (end); | |
2578 } | |
2579 else | |
2580 { | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2581 unsigned int start = args(1).int_value () - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2582 |
19514
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19513
diff
changeset
|
2583 if (start > player->get_total_samples ()) |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2584 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2585 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2586 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2587 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2588 |
19510 | 2589 player->set_sample_number (start); |
2590 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2591 |
19510 | 2592 player->play (); |
2593 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2594 |
19510 | 2595 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2596 |
19510 | 2597 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2598 |
19510 | 2599 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2600 |
19510 | 2601 return retval; |
2602 } | |
2603 | |
2604 DEFUN_DLD (__player_resume__, args, , | |
2605 "-*- texinfo -*-\n\ | |
2606 @deftypefn {Loadable Function} {} __player_resume__ (@var{player})\n\ | |
2607 Undocumented internal function.\n\ | |
2608 @end deftypefn") | |
2609 { | |
2610 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2611 |
19510 | 2612 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2613 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2614 if (args.length () == 1) |
19510 | 2615 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2616 audioplayer *player = get_player (args(0)); |
19510 | 2617 player->resume (); |
2618 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2619 |
19510 | 2620 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2621 |
19510 | 2622 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2623 |
19510 | 2624 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2625 |
19510 | 2626 return retval; |
2627 } | |
2628 | |
2629 DEFUN_DLD (__player_set_fs__, args, , | |
2630 "-*- texinfo -*-\n\ | |
2631 @deftypefn {Loadable Function} {} __player_set_fs__ (@var{player}, @var{fs})\n\ | |
2632 Undocumented internal function.\n\ | |
2633 @end deftypefn") | |
2634 { | |
2635 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2636 |
19510 | 2637 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2638 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2639 if (args.length () == 2) |
19510 | 2640 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2641 audioplayer *player = get_player (args(0)); |
19510 | 2642 player->set_fs (args(1).int_value ()); |
2643 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2644 |
19510 | 2645 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2646 |
19510 | 2647 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2648 |
19510 | 2649 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2650 |
19510 | 2651 return retval; |
2652 } | |
2653 | |
2654 DEFUN_DLD (__player_set_tag__, args, , | |
2655 "-*- texinfo -*-\n\ | |
2656 @deftypefn {Loadable Function} {} __player_set_tag__ (@var{player}, @var{tag})\n\ | |
2657 Undocumented internal function.\n\ | |
2658 @end deftypefn") | |
2659 { | |
2660 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2661 |
19510 | 2662 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2663 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2664 if (args.length () == 2) |
19510 | 2665 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2666 audioplayer *player = get_player (args(0)); |
19510 | 2667 player->set_tag (args(1).char_matrix_value ()); |
2668 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2669 |
19510 | 2670 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2671 |
19510 | 2672 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2673 |
19510 | 2674 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2675 |
19510 | 2676 return retval; |
2677 } | |
2678 | |
2679 DEFUN_DLD (__player_set_userdata__, args, , | |
2680 "-*- texinfo -*-\n\ | |
2681 @deftypefn {Loadable Function} {} __player_set_userdata__ (@var{player}, @var{data})\n\ | |
2682 Undocumented internal function.\n\ | |
2683 @end deftypefn") | |
2684 { | |
2685 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2686 |
19510 | 2687 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2688 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2689 if (args.length () == 2) |
19510 | 2690 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2691 audioplayer *player = get_player (args(0)); |
19510 | 2692 player->set_userdata (args(1)); |
2693 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2694 |
19510 | 2695 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2696 |
19510 | 2697 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2698 |
19510 | 2699 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2700 |
19510 | 2701 return retval; |
2702 } | |
2703 | |
2704 DEFUN_DLD (__player_stop__, args, , | |
2705 "-*- texinfo -*-\n\ | |
2706 @deftypefn {Loadable Function} {} __player_stop__ (@var{player})\n\ | |
2707 Undocumented internal function.\n\ | |
2708 @end deftypefn") | |
2709 { | |
2710 octave_value retval; | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2711 |
19510 | 2712 #ifdef HAVE_PORTAUDIO |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2713 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2714 if (args.length () == 1) |
19510 | 2715 { |
19513
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19512
diff
changeset
|
2716 audioplayer *player = get_player (args (0)); |
19510 | 2717 player->stop (); |
2718 } | |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2719 |
19510 | 2720 #else |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2721 |
19510 | 2722 error ("portaudio not found on your system and thus audio functionality is not present"); |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2723 |
19510 | 2724 #endif |
19519
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19518
diff
changeset
|
2725 |
19510 | 2726 return retval; |
2727 } |