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