Mercurial > octave-nkf
annotate libinterp/dldfcn/audiodevinfo.cc @ 19604:62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
author | Andreas Weber <andy.weber.aw@gmail.com> |
---|---|
date | Tue, 13 Jan 2015 12:50:43 +0100 |
parents | c36c22808d11 |
children | 72304a4e010a |
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 | |
19590
d7057df2968e
use existing function to determine endianness in audiodevinfo.cc
John W. Eaton <jwe@octave.org>
parents:
19589
diff
changeset
|
33 #include "mach-info.h" |
d7057df2968e
use existing function to determine endianness in audiodevinfo.cc
John W. Eaton <jwe@octave.org>
parents:
19589
diff
changeset
|
34 |
19545
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
35 #include "defun-dld.h" |
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
36 #include "error.h" |
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
37 #include "gripes.h" |
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
38 #include "oct-obj.h" |
19544 | 39 #include "ov.h" |
19545
19f75d156ffe
don't include oct.h in Octave source files
John W. Eaton <jwe@octave.org>
parents:
19544
diff
changeset
|
40 #include "ov-int32.h" |
19506
c2031ad6dbe7
Fix octave header includes in audiodevinfo
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19503
diff
changeset
|
41 #include "ov-struct.h" |
19544 | 42 #include "parse.h" |
43 | |
44 #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
|
45 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
46 #include <portaudio.h> |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
47 |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
48 PaSampleFormat |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
49 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
|
50 { |
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19506
diff
changeset
|
51 if (bits == 8) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
52 return paInt8; |
19507
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19506
diff
changeset
|
53 else if (bits == 16) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
54 return paInt16; |
19507
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19506
diff
changeset
|
55 else if (bits == 24) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
56 return paInt24; |
19507
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19506
diff
changeset
|
57 else if (bits == 32) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
58 return paInt32; |
19507
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19506
diff
changeset
|
59 else if (bits == -1) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
60 return paFloat32; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
61 else |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
62 return 0; |
19507
2e174b5e7703
Fix audiodevinfo, audioinfo, audioread and audiowrite build process
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19506
diff
changeset
|
63 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
64 |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
65 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
66 |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
67 DEFUN_DLD (audiodevinfo, args, , |
19539
ce02743b6f2a
Fix texinfo docstring syntax for all audio functions
Mike Miller <mtmiller@ieee.org>
parents:
19537
diff
changeset
|
68 "-*- texinfo -*-\n\ |
ce02743b6f2a
Fix texinfo docstring syntax for all audio functions
Mike Miller <mtmiller@ieee.org>
parents:
19537
diff
changeset
|
69 @deftypefn {Loadable Function} {@var{devinfo} =} audiodevinfo ()\n\ |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
70 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
71 @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
|
72 @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
|
73 @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
|
74 @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
|
75 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
76 @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
|
77 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
78 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
|
79 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
|
80 \"Name\", \"DriverVersion\" and \"ID\" describing an audio device.\n\ |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
81 \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
|
82 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
83 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
|
84 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
|
85 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
86 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
|
87 corresponding device.\n\ |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
88 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
89 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
|
90 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
|
91 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
92 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
|
93 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
|
94 supports playback or recording using the specified parameters.\n\ |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
95 \n\ |
19550
fc85d9026bb6
doc fixes for audio functions
John W. Eaton <jwe@octave.org>
parents:
19549
diff
changeset
|
96 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
|
97 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
|
98 @end deftypefn") |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
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 octave_value retval; |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
101 |
19517
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19507
diff
changeset
|
102 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
103 |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
104 int nargin = args.length (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
105 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
106 octave_scalar_map devinfo; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
107 octave_value_list input; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
108 octave_value_list output; |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
109 |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
110 PaError err = Pa_Initialize (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
111 |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
112 if (err != paNoError) |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
113 { |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
114 error ("audiodevinfo: PortAudio initialization failed"); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
115 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
116 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
117 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
118 int num_devices = Pa_GetDeviceCount (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
119 |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
120 if (num_devices < 0) |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
121 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
122 error ("audiodevinfo: no audio device found"); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
123 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
124 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
125 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
126 octave_idx_type numinput = 0, numoutput = 0; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
127 for (int i = 0; i < num_devices; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
128 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
129 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
|
130 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
131 if (device_info->maxInputChannels != 0) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
132 numinput++; |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
133 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
134 if (device_info->maxOutputChannels != 0) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
135 numoutput++; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
136 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
137 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
138 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
145 octave_idx_type idx_i = 0, idx_o = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
146 for (int i = 0; i < num_devices; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
147 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
148 const PaDeviceInfo *device_info = Pa_GetDeviceInfo (i); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
149 const char *driver; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
150 char name[128]; |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
151 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
|
152 sprintf (name, "%s (%s)", device_info->name, driver); |
19503
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 if (device_info->maxInputChannels != 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
155 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
156 input_name(idx_i) = name; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
157 input_driver_version(idx_i) = driver; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
158 input_id(idx_i) = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
159 idx_i++; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
160 } |
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 if (device_info->maxOutputChannels != 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
163 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
164 output_name(idx_o) = name; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
165 output_driver_version(idx_o) = driver; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
166 output_id(idx_o) = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
167 idx_o++; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
168 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
169 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
170 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
171 octave_map inputdev, outputdev; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
172 inputdev.setfield ("Name", input_name); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
173 inputdev.setfield ("DriverVersion", input_driver_version); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
174 inputdev.setfield ("ID", input_id); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
175 outputdev.setfield ("Name", output_name); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
176 outputdev.setfield ("DriverVersion", output_driver_version); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
177 outputdev.setfield ("ID", output_id); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
178 devinfo.setfield ("input", inputdev); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
179 devinfo.setfield ("output", outputdev); |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
180 |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
181 // Return information about input and output audio devices and |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
182 // their properties. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
183 if (nargin == 0) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
184 retval = devinfo; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
185 // Return the number of input or output devices |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
186 else if (nargin == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
187 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
188 if (args(0).int_value () == 0) |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
189 retval = numoutput; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
190 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
|
191 retval = numinput; |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
192 else |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
193 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
194 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
|
195 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
196 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
197 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
198 // 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
|
199 else if (nargin == 2) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
200 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
201 bool found = false; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
202 int outin = args(0).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
203 if (args(1).is_string ()) |
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 if (outin == 0) |
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 for (int i = 0; i < numoutput; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
208 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
209 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
|
210 { |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
211 retval = output_id(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
212 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
213 break; |
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 } |
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 else if (outin == 1) |
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 for (int i = 0; i < numinput; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
220 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
221 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
|
222 { |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
223 retval = input_id(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
224 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
225 break; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
226 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
227 } |
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 else |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
230 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
231 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
|
232 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
233 } |
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 else |
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 if (outin == 0) |
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 for (int i = 0; i < numoutput; i++) |
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 if (output_id(i).int_value () == args(1).int_value ()) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
242 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
243 retval = output_name(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
244 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
245 break; |
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 } |
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 else if (outin == 1) |
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 for (int i = 0; i < numinput; i++) |
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 if (input_id(i).int_value () == args(1).int_value ()) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
254 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
255 retval = input_name(i); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
256 found = true; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
257 break; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
258 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
259 } |
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 else |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
262 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
263 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
|
264 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
265 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
266 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
267 if (not found) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
268 error ("audiodevinfo: no device meeting the specified criteria found"); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
269 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
270 else if (nargin == 3) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
271 { |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
272 // FIXME: what was supposed to happen here? |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
273 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
274 // Return the id of the first device meeting specified criteria. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
275 else if (nargin == 4) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
276 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
277 int io = args(0).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
278 int rate = args(1).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
279 int bits = args(2).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
280 int chans = args(3).int_value (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
281 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
282 for (int i = 0; i < num_devices; i++) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
283 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
284 PaStreamParameters stream_parameters; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
285 stream_parameters.device = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
286 stream_parameters.channelCount = chans; |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
287 PaSampleFormat format = bits_to_format (bits); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
288 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
289 if (format != 0) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
290 stream_parameters.sampleFormat = format; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
291 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
292 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
293 error ("audiodevinfo: no such bits per sample format"); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
294 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
295 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
296 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
297 stream_parameters.suggestedLatency |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
298 = Pa_GetDeviceInfo (i)->defaultLowInputLatency; |
19552 | 299 stream_parameters.hostApiSpecificStreamInfo = 0; |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
300 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
301 if (io == 0) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
302 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
303 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
|
304 continue; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
305 |
19552 | 306 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
|
307 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
308 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
309 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
310 retval = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
311 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
312 } |
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 else if (io == 1) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
315 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
316 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
|
317 continue; |
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
318 |
19552 | 319 err = Pa_IsFormatSupported (&stream_parameters, 0, rate); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
320 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
321 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
322 retval = i; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
323 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
324 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
325 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
326 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
327 retval = -1; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
328 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
329 // Check if given device supports specified playback or recording modes. |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
330 else if (nargin == 5) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
331 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
332 int io = args(0).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
333 int id = args(1).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
334 int rate = args(2).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
335 int bits = args(3).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
336 int chans = args(4).int_value (); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
337 PaStreamParameters stream_parameters; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
338 stream_parameters.device = id; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
339 stream_parameters.channelCount = chans; |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
340 PaSampleFormat format = bits_to_format (bits); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
341 if (format != 0) |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
342 stream_parameters.sampleFormat = format; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
343 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
344 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
345 error ("audiodevinfo: no such bits per sample format"); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
346 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
347 } |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
348 stream_parameters.suggestedLatency = |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
349 Pa_GetDeviceInfo (id)->defaultLowInputLatency; |
19552 | 350 stream_parameters.hostApiSpecificStreamInfo = 0; |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
351 if (io == 0) |
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 if (Pa_GetDeviceInfo (id)->maxOutputChannels < chans) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
354 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
355 retval = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
356 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
357 } |
19552 | 358 err = Pa_IsFormatSupported (0, &stream_parameters, rate); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
359 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
360 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
361 retval = 1; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
362 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
363 } |
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 else if (io == 1) |
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 if (Pa_GetDeviceInfo (id)->maxInputChannels < chans) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
368 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
369 retval = 0; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
370 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
371 } |
19552 | 372 err = Pa_IsFormatSupported (&stream_parameters, 0, rate); |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
373 if (err == paFormatIsSupported) |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
374 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
375 retval = 1; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
376 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
377 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
378 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
379 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
380 { |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
381 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
|
382 return retval; |
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 retval = 0; |
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 else |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
387 { |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
388 error ("audiodevinfo: wrong number of arguments"); |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
389 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
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 #else |
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 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
|
394 |
19517
abde714a4f88
let audiodevinfo be built even when PortAudio is not present
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19507
diff
changeset
|
395 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
396 |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
397 return retval; |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
398 } |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
399 |
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
400 /* |
19562
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19560
diff
changeset
|
401 %!testif HAVE_PORTAUDIO |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
402 %! devinfo = audiodevinfo; |
19543 | 403 %! assert (rows (devinfo.input), 1); |
404 %! assert (rows (devinfo.output), 1); | |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
405 |
19562
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19560
diff
changeset
|
406 %!testif HAVE_PORTAUDIO |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
407 %! devinfo = audiodevinfo; |
19543 | 408 %! nout = audiodevinfo (0); |
409 %! nin = audiodevinfo (1); | |
410 %! assert (columns (devinfo.output), nout); | |
411 %! assert (columns (devinfo.input), nin); | |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
412 |
19562
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19560
diff
changeset
|
413 %!testif HAVE_PORTAUDIO |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
414 %! devinfo = audiodevinfo; |
19543 | 415 %! nout = audiodevinfo (0); |
416 %! nin = audiodevinfo (1); | |
417 %! for i = 1:nout, | |
418 %! assert (devinfo.output(i).Name, audiodevinfo (0, devinfo.output(i).ID)) | |
419 %! endfor | |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
420 %! for i=1:nin, |
19543 | 421 %! assert (devinfo.input(i).Name, audiodevinfo (1, devinfo.input(i).ID)) |
422 %! endfor | |
19503
ea5c156aa804
audiodevinfo.cc: new file
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
423 |
19562
4f615cd9a68d
Use "testif HAVE_PORTAUDIO" for new audio function tests
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19560
diff
changeset
|
424 %!testif HAVE_PORTAUDIO |
19537
36a26a131209
Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents:
19535
diff
changeset
|
425 %! devinfo = audiodevinfo; |
19543 | 426 %! nout = audiodevinfo (0); |
427 %! nin = audiodevinfo (1); | |
428 %! for i = 1:nout, | |
429 %! assert (devinfo.output(i).ID, audiodevinfo (0, devinfo.output(i).Name)) | |
430 %! endfor | |
431 %! for i = 1:nin, | |
432 %! assert (devinfo.input(i).ID, audiodevinfo (1, devinfo.input(i).Name)) | |
433 %! endfor | |
19534
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19532
diff
changeset
|
434 */ |
19544 | 435 |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
436 #ifdef HAVE_PORTAUDIO |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
437 |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
438 enum audio_type { TYPE_INT8, TYPE_UINT8, TYPE_UINT16, TYPE_DOUBLE }; |
19544 | 439 |
440 class audioplayer : public octave_base_value | |
441 { | |
442 public: | |
443 audioplayer (void); | |
19604
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
444 ~audioplayer (void); |
19544 | 445 |
446 // Overloaded base functions | |
447 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
|
448 virtual double scalar_value (bool = false) const { return 0; } |
19544 | 449 void print (std::ostream& os, bool pr_as_read_syntax = false) const; |
450 void print_raw (std::ostream& os, bool pr_as_read_syntax) const; | |
451 | |
452 // Properties | |
453 bool is_constant (void) const { return true; } | |
454 bool is_defined (void) const { return true; } | |
455 bool print_as_scalar (void) const { return true; } | |
456 | |
457 void init (void); | |
458 void init_fn (void); | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
459 void set_y (const octave_value& y); |
19544 | 460 void set_y (octave_function *fn); |
461 void set_y (std::string fn); | |
462 Matrix& get_y (void); | |
19581
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19578
diff
changeset
|
463 RowVector get_left (void) const; |
c5b8a91baec6
avoid unnecessary use of pointer in audio code
John W. Eaton <jwe@octave.org>
parents:
19578
diff
changeset
|
464 RowVector get_right (void) const; |
19544 | 465 void set_fs (int fs); |
466 int get_fs (void); | |
467 void set_nbits (int nbits); | |
468 int get_nbits (void); | |
469 void set_id (int id); | |
470 int get_id (void); | |
471 int get_channels (void); | |
472 audio_type get_type (void); | |
473 | |
474 void set_sample_number (unsigned int sample); | |
475 unsigned int get_sample_number (void); | |
476 unsigned int get_total_samples (void); | |
477 void set_end_sample (unsigned int sample); | |
478 unsigned int get_end_sample (void); | |
479 void reset_end_sample (void); | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
480 void set_tag (const charMatrix& tag); |
19544 | 481 charMatrix get_tag (void); |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
482 void set_userdata (const octave_value& userdata); |
19544 | 483 octave_value get_userdata (void); |
484 PaStream *get_stream (void); | |
485 | |
486 void playblocking (void); | |
487 void play (void); | |
488 void pause (void); | |
489 void resume (void); | |
490 void stop (void); | |
491 bool isplaying (void); | |
492 | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
493 octave_function *octave_callback_function; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
494 |
19544 | 495 private: |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
496 int id; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
497 int fs; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
498 int nbits; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
499 int channels; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
500 unsigned int sample_number; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
501 unsigned int end_sample; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
502 charMatrix tag; |
19544 | 503 Matrix y; |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
504 octave_value userdata; |
19544 | 505 RowVector left; |
506 RowVector right; | |
507 PaStream *stream; | |
508 PaStreamParameters output_parameters; | |
509 audio_type type; | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
510 |
19544 | 511 DECLARE_OCTAVE_ALLOCATOR |
512 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA | |
513 }; | |
514 | |
19586
8dce81f7448d
increase audio buffer size
John W. Eaton <jwe@octave.org>
parents:
19585
diff
changeset
|
515 static const unsigned int BUFFER_SIZE = 8192; |
19544 | 516 |
517 DEFINE_OCTAVE_ALLOCATOR (audioplayer); | |
518 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (audioplayer, "audioplayer", "audioplayer"); | |
519 | |
520 static int | |
19546
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
521 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
|
522 const PaStreamCallbackTimeInfo *, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
523 PaStreamCallbackFlags, void *data) |
19544 | 524 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
525 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
|
526 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
527 if (! player) |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
528 { |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
529 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
|
530 return paAbort; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
531 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
532 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
533 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
|
534 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
|
535 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
536 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
|
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 failed"); |
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 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
542 const Matrix sound = retval(0).matrix_value (); |
19544 | 543 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
|
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 || frames != sound.rows () |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
546 || sound.columns () < 1 || sound.columns () > 2) |
19544 | 547 { |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
548 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
|
549 return paAbort; |
19544 | 550 } |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
551 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
552 // 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
|
553 // 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
|
554 // 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
|
555 |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
556 const ColumnVector sound_l = sound.column (0); |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
557 const ColumnVector sound_r = (sound.columns () == 1) |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
558 ? 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
|
559 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
560 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
|
561 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
|
562 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
563 switch (player->get_nbits ()) |
19544 | 564 { |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
565 case 8: |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
566 { |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
567 static double scale_factor = std::pow (2.0, 7) - 1.0; |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
568 |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
569 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
|
570 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
571 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
|
572 { |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
573 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
|
574 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
|
575 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
576 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
577 break; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
578 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
579 case 16: |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
580 { |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
581 static double scale_factor = std::pow (2.0, 15) - 1.0; |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
582 |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
583 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
|
584 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
585 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
|
586 { |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
587 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
|
588 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
|
589 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
590 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
591 break; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
592 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
593 case 24: |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
594 { |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
595 static double scale_factor = std::pow (2.0, 23) - 1.0; |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
596 |
19590
d7057df2968e
use existing function to determine endianness in audiodevinfo.cc
John W. Eaton <jwe@octave.org>
parents:
19589
diff
changeset
|
597 static int big_endian = oct_mach_info::words_big_endian (); |
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 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
|
600 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
601 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
|
602 { |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
603 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
|
604 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
|
605 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
606 sample_l &= 0x00ffffff; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
607 sample_r &= 0x00ffffff; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
608 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
609 // 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
|
610 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
|
611 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
|
612 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
613 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
|
614 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
615 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
|
616 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
|
617 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
|
618 |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
619 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
|
620 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
|
621 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
|
622 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
623 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
624 break; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
625 |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
626 default: |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
627 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
|
628 break; |
19544 | 629 } |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
630 |
19544 | 631 return return_status; |
632 } | |
633 | |
634 static int | |
19546
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
635 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
|
636 const PaStreamCallbackTimeInfo*, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
637 PaStreamCallbackFlags, void *data) |
19544 | 638 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
639 audioplayer *player = static_cast<audioplayer *> (data); |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
640 |
19585
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
641 if (! player) |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
642 { |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
643 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
|
644 return paAbort; |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
645 } |
e4bce89532bc
improve error checking and efficiency of octave audio callback function
John W. Eaton <jwe@octave.org>
parents:
19584
diff
changeset
|
646 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
647 // 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
|
648 // 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
|
649 // 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
|
650 // 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
|
651 // callback. |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
652 |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
653 const RowVector sound_l = player->get_left (); |
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
654 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
|
655 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
656 const double *pl = sound_l.data (); |
19599
810cfb00b72b
portaudio_play_callback: Fix stereo playback (bug #43965)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19595
diff
changeset
|
657 const double *pr = sound_r.data (); |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
658 |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
659 if (player->get_type () == TYPE_DOUBLE) |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
660 { |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
661 switch (player->get_nbits ()) |
19544 | 662 { |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
663 case 8: |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
664 { |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
665 static double scale_factor = std::pow (2.0, 7) - 1.0; |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
666 |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
667 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
|
668 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
669 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
|
670 { |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
671 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
|
672 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
673 if (sample_number >= player->get_end_sample ()) |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
674 return paComplete; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
675 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
676 unsigned long offset = j * 2; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
677 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
678 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
|
679 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
|
680 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
681 player->set_sample_number (sample_number + 1); |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
682 } |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
683 } |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
684 break; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
685 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
686 case 16: |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
687 { |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
688 static double scale_factor = std::pow (2.0, 15) - 1.0; |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
689 |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
690 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
|
691 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
692 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
|
693 { |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
694 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
|
695 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
696 if (sample_number >= player->get_end_sample ()) |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
697 return paComplete; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
698 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
699 unsigned long offset = j * 2; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
700 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
701 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
|
702 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
|
703 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
704 player->set_sample_number (sample_number + 1); |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
705 } |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
706 } |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
707 break; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
708 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
709 case 24: |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
710 { |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
711 static double scale_factor = std::pow (2.0, 23) - 1.0; |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
712 |
19590
d7057df2968e
use existing function to determine endianness in audiodevinfo.cc
John W. Eaton <jwe@octave.org>
parents:
19589
diff
changeset
|
713 static int big_endian = oct_mach_info::words_big_endian (); |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
714 |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
715 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
|
716 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
717 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
|
718 { |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
719 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
|
720 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
721 if (sample_number >= player->get_end_sample ()) |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
722 return paComplete; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
723 |
19589
9bd2f0a07c95
improve performance of audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19586
diff
changeset
|
724 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
|
725 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
|
726 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
727 sample_l &= 0x00ffffff; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
728 sample_r &= 0x00ffffff; |
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 // FIXME: Would a mask work better? |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
731 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
|
732 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
|
733 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
734 unsigned long offset = j * 6; |
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 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
|
737 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
|
738 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
|
739 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
740 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
|
741 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
|
742 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
|
743 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
744 player->set_sample_number (sample_number + 1); |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
745 } |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
746 } |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
747 break; |
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 default: |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
750 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
|
751 break; |
19544 | 752 } |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
753 } |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
754 else if (player->get_type () == TYPE_INT8) |
19582
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 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
|
757 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
758 for (unsigned long j = 0; j < frames; j++) |
19544 | 759 { |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
760 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
|
761 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
762 if (sample_number >= player->get_end_sample ()) |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
763 return paComplete; |
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 unsigned long offset = j * 2; |
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 buffer[offset+0] = pl[sample_number]; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
768 buffer[offset+1] = pr[sample_number]; |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
769 |
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
770 player->set_sample_number (sample_number + 1); |
19584
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
771 } |
19577
5f313345912f
avoid indexing before beginning of string
John W. Eaton <jwe@octave.org>
parents:
19562
diff
changeset
|
772 } |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
773 else if (player->get_type () == TYPE_UINT8) |
19584
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
774 { |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
775 uint8_t *buffer = static_cast<uint8_t *> (output); |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
776 |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
777 for (unsigned long j = 0; j < frames; j++) |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
778 { |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
779 unsigned int sample_number = player->get_sample_number (); |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
780 |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
781 if (sample_number >= player->get_end_sample ()) |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
782 return paComplete; |
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 unsigned long offset = j * 2; |
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 buffer[offset+0] = pl[sample_number]; |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
787 buffer[offset+1] = pr[sample_number]; |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
788 |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
789 player->set_sample_number (sample_number + 1); |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
790 } |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
791 } |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
792 else if (player->get_type () == TYPE_UINT16) |
19584
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
793 { |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
794 int16_t *buffer = static_cast<int16_t *> (output); |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
795 |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
796 for (unsigned long j = 0; j < frames; j++) |
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 unsigned int sample_number = player->get_sample_number (); |
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 if (sample_number >= player->get_end_sample ()) |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
801 return paComplete; |
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 unsigned long offset = j * 2; |
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 buffer[offset+0] = pl[sample_number]; |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
806 buffer[offset+1] = pr[sample_number]; |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
807 |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
808 player->set_sample_number (sample_number + 1); |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
809 } |
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
810 } |
19582
7c0e20def8e3
improve efficiency of portaudio callback function
John W. Eaton <jwe@octave.org>
parents:
19581
diff
changeset
|
811 |
19544 | 812 return paContinue; |
813 } | |
814 | |
815 audioplayer::audioplayer (void) | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
816 : octave_callback_function (0), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
817 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
|
818 end_sample (-1), tag (""), y (), userdata (Matrix ()), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
819 left (), right (), stream (0), output_parameters (), type () |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
820 { } |
19544 | 821 |
19604
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
822 audioplayer::~audioplayer (void) |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
823 { |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
824 if (isplaying()) |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
825 { |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
826 warning ("audioplayer::~audioplayer: Interrupting playing audioplayer"); |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
827 stop (); |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
828 } |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
829 } |
62ca016dbb2a
audiodevinfo.cc: Stop playback in audioplayers destructor (bug ##43994)
Andreas Weber <andy.weber.aw@gmail.com>
parents:
19600
diff
changeset
|
830 |
19544 | 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 | |
19600
c36c22808d11
* audiodevinfo.cc: one audio device must be available to play or record (bug #43988)
Stefan Mahr <dac922@gmx.de>
parents:
19599
diff
changeset
|
853 if (Pa_GetDeviceCount () < 1) |
19544 | 854 { |
19600
c36c22808d11
* audiodevinfo.cc: one audio device must be available to play or record (bug #43988)
Stefan Mahr <dac922@gmx.de>
parents:
19599
diff
changeset
|
855 error ("audioplayer: no audio devices found or available!"); |
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 | |
19600
c36c22808d11
* audiodevinfo.cc: one audio device must be available to play or record (bug #43988)
Stefan Mahr <dac922@gmx.de>
parents:
19599
diff
changeset
|
886 if (Pa_GetDeviceCount () < 1) |
19544 | 887 { |
19600
c36c22808d11
* audiodevinfo.cc: one audio device must be available to play or record (bug #43988)
Stefan Mahr <dac922@gmx.de>
parents:
19599
diff
changeset
|
888 error ("audioplayer: no audio devices found or available!"); |
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 | |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
900 if (type == TYPE_DOUBLE) |
19551
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 ()); |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
902 else if (type == TYPE_INT8) |
19544 | 903 output_parameters.sampleFormat = paInt8; |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
904 else if (type == TYPE_UINT8) |
19544 | 905 output_parameters.sampleFormat = paUInt8; |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
906 else if (type == TYPE_UINT16) |
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 ()) |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
917 type = TYPE_INT8; |
19551
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 ()) |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
919 type = TYPE_UINT8; |
19551
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 ()) |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
921 type = TYPE_UINT16; |
19544 | 922 else |
19595
0d3e67f27d57
* audiodevinfo.cc: Avoid conflict with enum names.
John Donoghue <john.donoghue@ieee.org>
parents:
19594
diff
changeset
|
923 type = 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 (); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1323 |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1324 Matrix sound (frames, 2); |
19544 | 1325 sound.resize (frames, 2); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1326 |
19544 | 1327 if (recorder->get_nbits () == 8) |
1328 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1329 static double scale_factor = std::pow (2.0, 7) - 1.0; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1330 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1331 const int8_t *input8 = static_cast<const int8_t *> (input); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1332 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
1333 for (unsigned long i = 0; i < frames; i++) |
19544 | 1334 { |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1335 float sample_l = input8[i*channels] / scale_factor; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1336 float sample_r = input8[i*channels + (channels - 1)] / scale_factor; |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
1337 |
19544 | 1338 sound(i, 0) = sample_l; |
1339 sound(i, 1) = sample_r; | |
1340 } | |
1341 } | |
1342 else if (recorder->get_nbits () == 16) | |
1343 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1344 static double scale_factor = std::pow (2.0, 15) - 1.0; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1345 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1346 const int16_t *input16 = static_cast<const int16_t *> (input); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1347 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
1348 for (unsigned long i = 0; i < frames; i++) |
19544 | 1349 { |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1350 float sample_l = input16[i*channels] / scale_factor; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1351 float sample_r = input16[i*channels + (channels - 1)] / scale_factor; |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
1352 |
19544 | 1353 sound(i, 0) = sample_l; |
1354 sound(i, 1) = sample_r; | |
1355 } | |
1356 } | |
1357 else if (recorder->get_nbits () == 24) | |
1358 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1359 static double scale_factor = std::pow (2.0, 23); |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1360 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1361 // FIXME: Is there a better way? |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1362 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
|
1363 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1364 int32_t sample_l32 = 0, sample_r32 = 0; |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1365 |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1366 uint8_t *sample_l = reinterpret_cast<uint8_t *> (&sample_l32); |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1367 uint8_t *sample_r = reinterpret_cast<uint8_t *> (&sample_r32); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1368 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
1369 for (unsigned long i = 0; i < frames; i++) |
19544 | 1370 { |
1371 for (int j = 0; j < 3; j++) | |
1372 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1373 sample_l[j] = input24[i*channels*3 + j]; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1374 sample_r[j] = input24[i*channels*3 + (channels - 1)*3 + j]; |
19544 | 1375 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1376 |
19544 | 1377 if (sample_l32 & 0x00800000) |
1378 sample_l32 |= 0xff000000; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1379 |
19544 | 1380 if (sample_r32 & 0x00800000) |
1381 sample_r32 |= 0xff000000; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1382 |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1383 sound(i, 0) = sample_l32 / scale_factor; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1384 sound(i, 1) = sample_r32 / scale_factor; |
19544 | 1385 } |
1386 } | |
1387 | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1388 octave_value_list retval |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1389 = feval (recorder->octave_callback_function, ovl (sound), 1); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1390 |
19544 | 1391 return retval(0).int_value (); |
1392 } | |
1393 | |
1394 static int | |
19546
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
1395 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
|
1396 const PaStreamCallbackTimeInfo *, |
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
1397 PaStreamCallbackFlags, void *data) |
19544 | 1398 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1399 audiorecorder *recorder = static_cast<audiorecorder *> (data); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1400 |
19544 | 1401 int channels = recorder->get_channels (); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1402 |
19544 | 1403 if (recorder->get_nbits () == 8) |
1404 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1405 static float scale_factor = std::pow (2.0f, 7) - 1.0f; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1406 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1407 const int8_t *input8 = static_cast<const int8_t *> (input); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1408 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
1409 for (unsigned long i = 0; i < frames; i++) |
19544 | 1410 { |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1411 float sample_l = input8[i*channels] / scale_factor; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1412 float sample_r = input8[i*channels + (channels - 1)] / scale_factor; |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
1413 |
19544 | 1414 recorder->append (sample_l, sample_r); |
1415 } | |
1416 } | |
1417 else if (recorder->get_nbits () == 16) | |
1418 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1419 static float scale_factor = std::pow (2.0f, 15) - 1.0f; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1420 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1421 const int16_t *input16 = static_cast<const int16_t *> (input); |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1422 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
1423 for (unsigned long i = 0; i < frames; i++) |
19544 | 1424 { |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1425 float sample_l = input16[i*channels] / scale_factor; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1426 float sample_r = input16[i*channels + (channels - 1)] / scale_factor; |
19591
182abae666ae
* audiodevinfo.cc: Explicitly use std::pow.
John W. Eaton <jwe@octave.org>
parents:
19590
diff
changeset
|
1427 |
19544 | 1428 recorder->append (sample_l, sample_r); |
1429 } | |
1430 } | |
1431 else if (recorder->get_nbits () == 24) | |
1432 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1433 static float scale_factor = std::pow (2.0f, 23); |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1434 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1435 // FIXME: Is there a better way? |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1436 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
|
1437 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1438 int32_t sample_l32 = 0, sample_r32 = 0; |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1439 |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1440 uint8_t *sample_l = reinterpret_cast<uint8_t *> (&sample_l32); |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1441 uint8_t *sample_r = reinterpret_cast<uint8_t *> (&sample_r32); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1442 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
1443 for (unsigned long i = 0; i < frames; i++) |
19544 | 1444 { |
1445 for (int j = 0; j < 3; j++) | |
1446 { | |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1447 sample_l[j] = input24[i*channels*3 + j]; |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1448 sample_r[j] = input24[i*channels*3 + (channels - 1)*3 + j]; |
19544 | 1449 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1450 |
19544 | 1451 if (sample_l32 & 0x00800000) |
1452 sample_l32 |= 0xff000000; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1453 |
19544 | 1454 if (sample_r32 & 0x00800000) |
1455 sample_r32 |= 0xff000000; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1456 |
19592
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1457 recorder->append (sample_l32 / scale_factor, |
0b068273340f
style and other fixes for audiorecorder callback fucntions
John W. Eaton <jwe@octave.org>
parents:
19591
diff
changeset
|
1458 sample_r32 / scale_factor); |
19544 | 1459 } |
1460 } | |
1461 | |
1462 if (recorder->get_sample_number () > recorder->get_end_sample ()) | |
1463 return paComplete; | |
1464 | |
1465 return paContinue; | |
1466 } | |
1467 | |
1468 audiorecorder::audiorecorder (void) | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1469 : octave_callback_function (0), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1470 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
|
1471 end_sample (-1), tag (""), y (), userdata (Matrix ()), |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1472 left (), right (), stream (0), input_parameters (), type () |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1473 { } |
19544 | 1474 |
1475 void | |
1476 audiorecorder::print (std::ostream& os, bool pr_as_read_syntax) const | |
1477 { | |
1478 print_raw (os, pr_as_read_syntax); | |
1479 newline (os); | |
1480 } | |
1481 | |
1482 void | |
19546
a5eb03a7e2a5
eliminate unused variable and parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19545
diff
changeset
|
1483 audiorecorder::print_raw (std::ostream& os, bool) const |
19544 | 1484 { |
1485 os << 0; | |
1486 } | |
1487 | |
1488 void | |
1489 audiorecorder::init (void) | |
1490 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1491 if (Pa_Initialize () != paNoError) |
19544 | 1492 { |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1493 error ("audiorecorder: initialization error!"); |
19544 | 1494 return; |
1495 } | |
1496 | |
19600
c36c22808d11
* audiodevinfo.cc: one audio device must be available to play or record (bug #43988)
Stefan Mahr <dac922@gmx.de>
parents:
19599
diff
changeset
|
1497 if (Pa_GetDeviceCount () < 1) |
19544 | 1498 { |
19600
c36c22808d11
* audiodevinfo.cc: one audio device must be available to play or record (bug #43988)
Stefan Mahr <dac922@gmx.de>
parents:
19599
diff
changeset
|
1499 error ("audiorecorder: no audio devices found or available!"); |
19544 | 1500 return; |
1501 } | |
1502 | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1503 int device = get_id (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1504 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1505 if (device == -1) |
19544 | 1506 device = Pa_GetDefaultInputDevice (); |
1507 | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1508 input_parameters.device = device; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1509 input_parameters.channelCount = get_channels (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1510 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
|
1511 input_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighInputLatency; |
19552 | 1512 input_parameters.hostApiSpecificStreamInfo = 0; |
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_fs (int fs_arg) |
19544 | 1517 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1518 fs = fs_arg; |
19544 | 1519 } |
1520 | |
1521 int | |
1522 audiorecorder::get_fs (void) | |
1523 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1524 return fs; |
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_nbits (int nbits_arg) |
19544 | 1529 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1530 nbits = nbits_arg; |
19544 | 1531 } |
1532 | |
1533 int | |
1534 audiorecorder::get_nbits (void) | |
1535 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1536 return nbits; |
19544 | 1537 } |
1538 | |
1539 void | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1540 audiorecorder::set_id (int id_arg) |
19544 | 1541 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1542 id = id_arg; |
19544 | 1543 } |
1544 | |
1545 int | |
1546 audiorecorder::get_id (void) | |
1547 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1548 return id; |
19544 | 1549 } |
1550 | |
1551 void | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1552 audiorecorder::set_channels (int channels_arg) |
19544 | 1553 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1554 assert (channels_arg == 1 || channels_arg == 2); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1555 channels = channels_arg; |
19544 | 1556 } |
1557 | |
1558 int | |
1559 audiorecorder::get_channels (void) | |
1560 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1561 return channels; |
19544 | 1562 } |
1563 | |
1564 audio_type | |
1565 audiorecorder::get_type (void) | |
1566 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1567 return type; |
19544 | 1568 } |
1569 | |
1570 void | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1571 audiorecorder::set_sample_number (unsigned int sample_number_arg) |
19544 | 1572 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1573 sample_number = sample_number_arg; |
19544 | 1574 } |
1575 | |
1576 unsigned int | |
1577 audiorecorder::get_sample_number (void) | |
1578 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1579 return sample_number; |
19544 | 1580 } |
1581 | |
1582 unsigned int | |
1583 audiorecorder::get_total_samples (void) | |
1584 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1585 return left.size (); |
19544 | 1586 } |
1587 | |
1588 void | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1589 audiorecorder::set_end_sample (unsigned int end_sample_arg) |
19544 | 1590 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1591 end_sample = end_sample_arg; |
19544 | 1592 } |
1593 | |
1594 unsigned int | |
1595 audiorecorder::get_end_sample (void) | |
1596 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1597 return end_sample; |
19544 | 1598 } |
1599 | |
1600 void | |
1601 audiorecorder::reset_end_sample (void) | |
1602 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1603 set_end_sample (left.size ()); |
19544 | 1604 } |
1605 | |
1606 void | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1607 audiorecorder::set_tag (const charMatrix& tag_arg) |
19544 | 1608 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1609 tag = tag_arg; |
19544 | 1610 } |
1611 | |
1612 charMatrix | |
1613 audiorecorder::get_tag (void) | |
1614 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1615 return tag; |
19544 | 1616 } |
1617 | |
1618 void | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1619 audiorecorder::set_userdata (const octave_value& userdata_arg) |
19544 | 1620 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1621 userdata = userdata_arg; |
19544 | 1622 } |
1623 | |
1624 octave_value | |
1625 audiorecorder::get_userdata (void) | |
1626 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1627 return userdata; |
19544 | 1628 } |
1629 | |
1630 octave_value | |
1631 audiorecorder::getaudiodata (void) | |
1632 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1633 Matrix audio (2, left.size ()); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1634 |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1635 for (unsigned int i = 0; i < left.size (); i++) |
19544 | 1636 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1637 audio(0, i) = left[i]; |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1638 audio(1, i) = right[i]; |
19544 | 1639 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1640 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1641 return audio; |
19544 | 1642 } |
1643 | |
1644 audioplayer * | |
1645 audiorecorder::getplayer (void) | |
1646 { | |
1647 audioplayer *player = new audioplayer (); | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1648 |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1649 player->set_y (getaudiodata ()); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1650 player->set_fs (get_fs ()); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1651 player->set_nbits (get_nbits ()); |
19544 | 1652 player->init (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1653 |
19544 | 1654 return player; |
1655 } | |
1656 | |
1657 bool | |
1658 audiorecorder::isrecording (void) | |
1659 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1660 if (get_stream () == 0) |
19544 | 1661 return false; |
1662 | |
1663 PaError err; | |
1664 err = Pa_IsStreamActive (stream); | |
19549
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19548
diff
changeset
|
1665 if (err != 0 && err != 1) |
19544 | 1666 { |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1667 error ("audiorecorder: unable to check stream activity status"); |
19544 | 1668 return false; |
1669 } | |
1670 | |
1671 return (err == 1); | |
1672 } | |
1673 | |
1674 void | |
1675 audiorecorder::record (void) | |
1676 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1677 if (get_stream ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1678 stop (); |
19544 | 1679 |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1680 left.clear (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1681 right.clear (); |
19544 | 1682 PaError err; |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1683 if (octave_callback_function != 0) |
19544 | 1684 { |
19552 | 1685 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
|
1686 get_fs (), BUFFER_SIZE, paClipOff, |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1687 octave_record_callback, this); |
19544 | 1688 } |
1689 else | |
1690 { | |
19552 | 1691 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
|
1692 get_fs (), BUFFER_SIZE, paClipOff, |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1693 portaudio_record_callback, this); |
19544 | 1694 } |
1695 if (err != paNoError) | |
1696 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1697 error ("audiorecorder: unable to open audio recording stream"); |
19544 | 1698 return; |
1699 } | |
1700 err = Pa_StartStream (stream); | |
1701 if (err != paNoError) | |
1702 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1703 error ("audiorecorder: unable to start audio recording stream"); |
19544 | 1704 return; |
1705 } | |
1706 } | |
1707 | |
1708 void | |
1709 audiorecorder::recordblocking (float seconds) | |
1710 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1711 if (get_stream ()) |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1712 stop (); |
19544 | 1713 |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1714 left.clear (); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1715 right.clear (); |
19544 | 1716 |
1717 PaError err; | |
19552 | 1718 err = Pa_OpenStream (&stream, &(input_parameters), 0, |
1719 get_fs (), BUFFER_SIZE, paClipOff, 0, this); | |
19544 | 1720 if (err != paNoError) |
1721 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1722 error ("audiorecorder: unable to open audio recording stream"); |
19544 | 1723 return; |
1724 } | |
1725 | |
1726 err = Pa_StartStream (stream); | |
1727 if (err != paNoError) | |
1728 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1729 error ("audiorecorder: unable to start audio recording stream"); |
19544 | 1730 return; |
1731 } | |
1732 | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1733 unsigned int frames = seconds * get_fs (); |
19544 | 1734 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
|
1735 for (unsigned long i = 0; i < frames / BUFFER_SIZE; i++) |
19544 | 1736 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1737 Pa_ReadStream (get_stream (), buffer, BUFFER_SIZE); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1738 if (octave_callback_function != 0) |
19552 | 1739 octave_record_callback (buffer, 0, BUFFER_SIZE, 0, 0, this); |
19544 | 1740 else |
19552 | 1741 portaudio_record_callback (buffer, 0, BUFFER_SIZE, 0, 0, this); |
19544 | 1742 } |
1743 } | |
1744 | |
1745 void | |
1746 audiorecorder::pause (void) | |
1747 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1748 if (get_stream () == 0) |
19544 | 1749 return; |
1750 | |
1751 PaError err; | |
1752 err = Pa_StopStream (stream); | |
1753 if (err != paNoError) | |
1754 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1755 error ("audiorecorder: unable to stop audio recording stream"); |
19544 | 1756 return; |
1757 } | |
1758 } | |
1759 | |
1760 void | |
1761 audiorecorder::resume (void) | |
1762 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1763 if (get_stream () == 0) |
19544 | 1764 return; |
1765 | |
1766 PaError err; | |
1767 err = Pa_StartStream (stream); | |
1768 if (err != paNoError) | |
1769 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1770 error ("audiorecorder: unable to start audio recording stream"); |
19544 | 1771 return; |
1772 } | |
1773 } | |
1774 | |
1775 void | |
1776 audiorecorder::stop (void) | |
1777 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1778 if (get_stream () == 0) |
19544 | 1779 return; |
1780 | |
1781 PaError err; | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1782 if (not Pa_IsStreamStopped (get_stream ())) |
19544 | 1783 { |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1784 err = Pa_AbortStream (get_stream ()); |
19544 | 1785 if (err != paNoError) |
1786 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1787 error ("audioplayer: unable to stop audio playback stream"); |
19544 | 1788 return; |
1789 } | |
1790 } | |
1791 | |
1792 err = Pa_CloseStream (stream); | |
1793 if (err != paNoError) | |
1794 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1795 error ("audiorecorder: unable to close audio recording stream"); |
19544 | 1796 return; |
1797 } | |
1798 | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1799 set_sample_number (0); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1800 reset_end_sample (); |
19544 | 1801 stream = 0; |
1802 } | |
1803 | |
1804 void | |
1805 audiorecorder::append (float sample_l, float sample_r) | |
1806 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1807 left.push_back (sample_l); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1808 right.push_back (sample_r); |
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1809 set_sample_number (get_sample_number () + 1); |
19544 | 1810 } |
1811 | |
1812 PaStream * | |
1813 audiorecorder::get_stream (void) | |
1814 { | |
19551
22e2f11424b3
avoid more warnings in audio code
John W. Eaton <jwe@octave.org>
parents:
19550
diff
changeset
|
1815 return stream; |
19544 | 1816 } |
1817 | |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
1818 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
1819 |
19544 | 1820 DEFUN_DLD (__recorder_audiorecorder__, args, , |
1821 "-*- texinfo -*-\n\ | |
1822 @deftypefn {Loadable Function} {@var{recorder} =} __recorder_audiorecorder__ (@var{fs}, @var{nbits}, @var{channels})\n\ | |
1823 @deftypefnx {Loadable Function} {@var{recorder} =} __recorder_audiorecorder__ (@var{fs}, @var{nbits}, @var{channels}, @var{id})\n\ | |
1824 @deftypefnx {Loadable Function} {@var{recorder} =} __recorder_audiorecorder__ (@var{fcn}, @dots{})\n\ | |
1825 Undocumented internal function.\n\ | |
1826 @end deftypefn") | |
1827 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1828 octave_value retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1829 |
19544 | 1830 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1831 |
19544 | 1832 int nargin = args.length (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1833 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1834 audiorecorder* recorder = new audiorecorder (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1835 |
19544 | 1836 int offset = 0; |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1837 |
19544 | 1838 if (nargin > 0) |
1839 { | |
1840 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
|
1841 |
19544 | 1842 if (is_function) |
1843 { | |
19594
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
1844 error ("audioplayer: callbacks not yet implemented"); |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
1845 return retval; |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
1846 |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
1847 // recorder->octave_callback_function = args(0).function_value (); |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
1848 // offset = 1; |
19544 | 1849 } |
1850 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1851 |
19544 | 1852 switch (nargin - offset) |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1853 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1854 case 3: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1855 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
|
1856 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
|
1857 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
|
1858 break; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1859 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1860 case 4: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1861 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
|
1862 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
|
1863 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
|
1864 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
|
1865 break; |
19544 | 1866 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1867 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1868 recorder->init (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1869 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1870 retval = recorder; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1871 |
19544 | 1872 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1873 |
19544 | 1874 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
|
1875 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1876 #endif |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1877 |
19544 | 1878 return retval; |
1879 } | |
1880 | |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
1881 #ifdef HAVE_PORTAUDIO |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
1882 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1883 static audiorecorder * |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1884 get_recorder (const octave_value& ov) |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1885 { |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1886 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
|
1887 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1888 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
|
1889 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1890 return dynamic_cast<audiorecorder *> (ncrep); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1891 } |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1892 |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
1893 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
1894 |
19544 | 1895 DEFUN_DLD (__recorder_getaudiodata__, args, , |
1896 "-*- texinfo -*-\n\ | |
1897 @deftypefn {Loadable Function} {@var{data}} __recorder_getaudiodata__ (@var{recorder})\n\ | |
1898 Undocumented internal function.\n\ | |
1899 @end deftypefn") | |
1900 { | |
1901 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1902 |
19544 | 1903 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1904 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1905 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1906 retval = recorder->getaudiodata (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1907 |
19544 | 1908 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1909 |
19544 | 1910 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
|
1911 |
19544 | 1912 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1913 |
19544 | 1914 return retval; |
1915 } | |
1916 | |
1917 DEFUN_DLD (__recorder_get_channels__, args, , | |
1918 "-*- texinfo -*-\n\ | |
1919 @deftypefn {Loadable Function} {@var{n} =} __recorder_get_channels__ (@var{recorder})\n\ | |
1920 Undocumented internal function.\n\ | |
1921 @end deftypefn") | |
1922 { | |
1923 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1924 |
19544 | 1925 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1926 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1927 if (args.length () == 1) |
19544 | 1928 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1929 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1930 retval = recorder->get_channels (); |
19544 | 1931 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1932 |
19544 | 1933 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1934 |
19544 | 1935 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
|
1936 |
19544 | 1937 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1938 |
19544 | 1939 return retval; |
1940 } | |
1941 | |
1942 DEFUN_DLD (__recorder_get_fs__, args, , | |
1943 "-*- texinfo -*-\n\ | |
1944 @deftypefn {Loadable Function} {@var{fs} =} __recorder_get_fs__ (@var{recorder})\n\ | |
1945 Undocumented internal function.\n\ | |
1946 @end deftypefn") | |
1947 { | |
1948 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1949 |
19544 | 1950 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1951 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1952 if (args.length () == 1) |
19544 | 1953 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1954 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1955 retval = recorder->get_fs (); |
19544 | 1956 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1957 |
19544 | 1958 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1959 |
19544 | 1960 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
|
1961 |
19544 | 1962 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1963 |
19544 | 1964 return retval; |
1965 } | |
1966 | |
1967 DEFUN_DLD (__recorder_get_id__, args, , | |
1968 "-*- texinfo -*-\n\ | |
1969 @deftypefn {Loadable Function} {@var{id} =} __recorder_get_id__ (@var{recorder})\n\ | |
1970 Undocumented internal function.\n\ | |
1971 @end deftypefn") | |
1972 { | |
1973 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1974 |
19544 | 1975 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1976 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1977 if (args.length () == 1) |
19544 | 1978 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
1979 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1980 retval = recorder->get_id (); |
19544 | 1981 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1982 |
19544 | 1983 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1984 |
19544 | 1985 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
|
1986 |
19544 | 1987 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1988 |
19544 | 1989 return retval; |
1990 } | |
1991 | |
1992 DEFUN_DLD (__recorder_get_nbits__, args, , | |
1993 "-*- texinfo -*-\n\ | |
1994 @deftypefn {Loadable Function} {@var{nbits} =} __recorder_get_nbits__ (@var{recorder})\n\ | |
1995 Undocumented internal function.\n\ | |
1996 @end deftypefn") | |
1997 { | |
1998 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
1999 |
19544 | 2000 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2001 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2002 if (args.length () == 1) |
19544 | 2003 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2004 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2005 retval = recorder->get_nbits (); |
19544 | 2006 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2007 |
19544 | 2008 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2009 |
19544 | 2010 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
|
2011 |
19544 | 2012 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2013 |
19544 | 2014 return retval; |
2015 } | |
2016 | |
2017 DEFUN_DLD (__recorder_get_sample_number__, args, , | |
2018 "-*- texinfo -*-\n\ | |
2019 @deftypefn {Loadable Function} {@var{n} =} __recorder_get_sample_number__ (@var{recorder})\n\ | |
2020 Undocumented internal function.\n\ | |
2021 @end deftypefn") | |
2022 { | |
2023 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2024 |
19544 | 2025 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2026 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2027 if (args.length () == 1) |
19544 | 2028 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2029 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2030 retval = recorder->get_sample_number (); |
19544 | 2031 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2032 |
19544 | 2033 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2034 |
19544 | 2035 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
|
2036 |
19544 | 2037 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2038 |
19544 | 2039 return retval; |
2040 } | |
2041 | |
2042 DEFUN_DLD (__recorder_get_tag__, args, , | |
2043 "-*- texinfo -*-\n\ | |
2044 @deftypefn {Loadable Function} {@var{tag} =} __recorder_get_tag__ (@var{recorder})\n\ | |
2045 Undocumented internal function.\n\ | |
2046 @end deftypefn") | |
2047 { | |
2048 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2049 |
19544 | 2050 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2051 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2052 if (args.length () == 1) |
19544 | 2053 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2054 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2055 retval = recorder->get_tag (); |
19544 | 2056 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2057 |
19544 | 2058 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2059 |
19544 | 2060 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
|
2061 |
19544 | 2062 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2063 |
19544 | 2064 return retval; |
2065 } | |
2066 | |
2067 DEFUN_DLD (__recorder_get_total_samples__, args, , | |
2068 "-*- texinfo -*-\n\ | |
2069 @deftypefn {Loadable Function} {@var{n} =} __recorder_get_total_samples__ (@var{recorder})\n\ | |
2070 Undocumented internal function.\n\ | |
2071 @end deftypefn") | |
2072 { | |
2073 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2074 |
19544 | 2075 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2076 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2077 if (args.length () == 1) |
19544 | 2078 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2079 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2080 retval = recorder->get_total_samples (); |
19544 | 2081 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2082 |
19544 | 2083 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2084 |
19544 | 2085 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
|
2086 |
19544 | 2087 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2088 |
19544 | 2089 return retval; |
2090 } | |
2091 | |
2092 DEFUN_DLD (__recorder_get_userdata__, args, , | |
2093 "-*- texinfo -*-\n\ | |
2094 @deftypefn {Loadable Function} {@var{data} =} __recorder_get_userdata__ (@var{recorder})\n\ | |
2095 Undocumented internal function.\n\ | |
2096 @end deftypefn") | |
2097 { | |
2098 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2099 |
19544 | 2100 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2101 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2102 if (args.length () == 1) |
19544 | 2103 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2104 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2105 retval = recorder->get_userdata (); |
2106 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2107 |
19544 | 2108 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2109 |
19544 | 2110 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
|
2111 |
19544 | 2112 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2113 |
19544 | 2114 return retval; |
2115 } | |
2116 | |
2117 DEFUN_DLD (__recorder_isrecording__, args, , | |
2118 "-*- texinfo -*-\n\ | |
2119 @deftypefn {Loadable Function} {} __recorder_isrecording__ (@var{recorder})\n\ | |
2120 Undocumented internal function.\n\ | |
2121 @end deftypefn") | |
2122 { | |
2123 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2124 |
19544 | 2125 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2126 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2127 if (args.length () == 1) |
19544 | 2128 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2129 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2130 retval = recorder->isrecording () ? true : false; |
19544 | 2131 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2132 |
19544 | 2133 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2134 |
19544 | 2135 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
|
2136 |
19544 | 2137 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2138 |
19544 | 2139 return retval; |
2140 } | |
2141 | |
2142 DEFUN_DLD (__recorder_pause__, args, , | |
2143 "-*- texinfo -*-\n\ | |
2144 @deftypefn {Loadable Function} {} __recorder_pause__ (@var{recorder})\n\ | |
2145 Undocumented internal function.\n\ | |
2146 @end deftypefn") | |
2147 { | |
2148 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2149 |
19544 | 2150 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2151 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2152 if (args.length () == 1) |
19544 | 2153 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2154 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2155 recorder->pause (); |
2156 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2157 |
19544 | 2158 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2159 |
19544 | 2160 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
|
2161 |
19544 | 2162 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2163 |
19544 | 2164 return retval; |
2165 } | |
2166 | |
2167 DEFUN_DLD (__recorder_recordblocking__, args, , | |
2168 "-*- texinfo -*-\n\ | |
2169 @deftypefn {Loadable Function} {} __recorder_recordblocking__ (@var{recorder}, @var{seconds})\n\ | |
2170 Undocumented internal function.\n\ | |
2171 @end deftypefn") | |
2172 { | |
2173 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2174 |
19544 | 2175 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2176 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2177 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2178 recorder->recordblocking (args(1).float_value ()); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2179 |
19544 | 2180 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2181 |
19544 | 2182 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
|
2183 |
19544 | 2184 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2185 |
19544 | 2186 return retval; |
2187 } | |
2188 | |
2189 DEFUN_DLD (__recorder_record__, args, , | |
2190 "-*- texinfo -*-\n\ | |
2191 @deftypefn {Loadable Function} {} __recorder_record__ (@var{recorder})\n\ | |
2192 @deftypefnx {Loadable Function} {} __recorder_record__ (@var{recorder}, @var{seconds})\n\ | |
2193 Undocumented internal function.\n\ | |
2194 @end deftypefn") | |
2195 { | |
2196 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2197 |
19544 | 2198 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2199 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2200 audiorecorder *recorder = get_recorder (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2201 |
19544 | 2202 if (args.length () == 1) |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2203 recorder->record (); |
19544 | 2204 else if (args.length () == 2) |
2205 { | |
2206 recorder->set_end_sample (args(1).int_value () * recorder->get_fs ()); | |
2207 recorder->record (); | |
2208 } | |
2209 else | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2210 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
|
2211 |
19544 | 2212 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2213 |
19544 | 2214 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
|
2215 |
19544 | 2216 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2217 |
19544 | 2218 return retval; |
2219 } | |
2220 | |
2221 DEFUN_DLD (__recorder_resume__, args, , | |
2222 "-*- texinfo -*-\n\ | |
2223 @deftypefn {Loadable Function} {} __recorder_resume__ (@var{recorder})\n\ | |
2224 Undocumented internal function.\n\ | |
2225 @end deftypefn") | |
2226 { | |
2227 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2228 |
19544 | 2229 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2230 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2231 if (args.length () == 1) |
19544 | 2232 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2233 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2234 recorder->resume (); |
2235 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2236 |
19544 | 2237 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2238 |
19544 | 2239 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
|
2240 |
19544 | 2241 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2242 |
19544 | 2243 return retval; |
2244 } | |
2245 | |
2246 DEFUN_DLD (__recorder_set_fs__, args, , | |
2247 "-*- texinfo -*-\n\ | |
2248 @deftypefn {Loadable Function} {} __recorder_set_fs__ (@var{recorder}, @var{fs})\n\ | |
2249 Undocumented internal function.\n\ | |
2250 @end deftypefn") | |
2251 { | |
2252 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2253 |
19544 | 2254 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2255 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2256 if (args.length () == 2) |
19544 | 2257 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2258 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2259 recorder->set_fs (args(1).int_value ()); |
2260 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2261 |
19544 | 2262 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2263 |
19544 | 2264 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
|
2265 |
19544 | 2266 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2267 |
19544 | 2268 return retval; |
2269 } | |
2270 | |
2271 DEFUN_DLD (__recorder_set_tag__, args, , | |
2272 "-*- texinfo -*-\n\ | |
2273 @deftypefn {Loadable Function} {} __recorder_set_tag__ (@var{recorder}, @var{tag})\n\ | |
2274 Undocumented internal function.\n\ | |
2275 @end deftypefn") | |
2276 { | |
2277 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2278 |
19544 | 2279 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2280 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2281 if (args.length () == 2) |
19544 | 2282 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2283 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2284 recorder->set_tag (args(1).char_matrix_value ()); |
2285 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2286 |
19544 | 2287 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2288 |
19544 | 2289 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
|
2290 |
19544 | 2291 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2292 |
19544 | 2293 return retval; |
2294 } | |
2295 | |
2296 DEFUN_DLD (__recorder_set_userdata__, args, , | |
2297 "-*- texinfo -*-\n\ | |
2298 @deftypefn {Loadable Function} {} __recorder_set_userdata__ (@var{recorder}, @var{data})\n\ | |
2299 Undocumented internal function.\n\ | |
2300 @end deftypefn") | |
2301 { | |
2302 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2303 |
19544 | 2304 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2305 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2306 if (args.length () == 2) |
19544 | 2307 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2308 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2309 recorder->set_userdata (args(1)); |
2310 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2311 |
19544 | 2312 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2313 |
19544 | 2314 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
|
2315 |
19544 | 2316 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2317 |
19544 | 2318 return retval; |
2319 } | |
2320 | |
2321 DEFUN_DLD (__recorder_stop__, args, , | |
2322 "-*- texinfo -*-\n\ | |
2323 @deftypefn {Loadable Function} {} __recorder_stop__ (@var{recorder})\n\ | |
2324 Undocumented internal function.\n\ | |
2325 @end deftypefn") | |
2326 { | |
2327 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2328 |
19544 | 2329 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2330 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2331 audiorecorder *recorder = get_recorder (args(0)); |
19544 | 2332 recorder->stop (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2333 |
19544 | 2334 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2335 |
19544 | 2336 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
|
2337 |
19544 | 2338 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2339 |
19544 | 2340 return retval; |
2341 } | |
2342 | |
2343 DEFUN_DLD (__player_audioplayer__, args, , | |
2344 "-*- texinfo -*-\n\ | |
2345 @deftypefn {Loadable Function} {@var{player} =} __player_audioplayer__ (@var{y}, @var{fs})\n\ | |
2346 @deftypefnx {Loadable Function} {@var{player} =} __player_audioplayer__ (@var{y}, @var{fs}, @var{nbits})\n\ | |
2347 @deftypefnx {Loadable Function} {@var{player} =} __player_audioplayer__ (@var{y}, @var{fs}, @var{nbits}, @var{id})\n\ | |
2348 Undocumented internal function.\n\ | |
2349 @end deftypefn") | |
2350 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2351 octave_value retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2352 |
19544 | 2353 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2354 |
19544 | 2355 int nargin = args.length (); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2356 |
19583
c332c72d4960
prevent completely invalid call to __player_audioplayer__
John W. Eaton <jwe@octave.org>
parents:
19582
diff
changeset
|
2357 if (nargin < 2 || nargin > 4) |
c332c72d4960
prevent completely invalid call to __player_audioplayer__
John W. Eaton <jwe@octave.org>
parents:
19582
diff
changeset
|
2358 { |
c332c72d4960
prevent completely invalid call to __player_audioplayer__
John W. Eaton <jwe@octave.org>
parents:
19582
diff
changeset
|
2359 print_usage (); |
c332c72d4960
prevent completely invalid call to __player_audioplayer__
John W. Eaton <jwe@octave.org>
parents:
19582
diff
changeset
|
2360 return retval; |
c332c72d4960
prevent completely invalid call to __player_audioplayer__
John W. Eaton <jwe@octave.org>
parents:
19582
diff
changeset
|
2361 } |
c332c72d4960
prevent completely invalid call to __player_audioplayer__
John W. Eaton <jwe@octave.org>
parents:
19582
diff
changeset
|
2362 |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2363 audioplayer* recorder = new audioplayer (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2364 |
19544 | 2365 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
|
2366 |
19544 | 2367 if (is_function) |
19594
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
2368 { |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
2369 error ("audioplayer: callbacks not yet implemented"); |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
2370 return retval; |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
2371 |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
2372 // recorder->set_y (args(0).function_value ()); |
e75df9e43e63
disable Octave audio callback functions
John W. Eaton <jwe@octave.org>
parents:
19592
diff
changeset
|
2373 } |
19544 | 2374 else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2375 recorder->set_y (args(0)); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2376 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2377 recorder->set_fs (args(1).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2378 |
19544 | 2379 switch (nargin) |
2380 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2381 case 3: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2382 recorder->set_nbits (args(2).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2383 break; |
19584
0083cc91bfaa
* audiodevinfo.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
19583
diff
changeset
|
2384 |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2385 case 4: |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2386 recorder->set_nbits (args(2).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2387 recorder->set_id (args(3).int_value ()); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2388 break; |
19544 | 2389 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2390 |
19544 | 2391 if (is_function) |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2392 recorder->init_fn (); |
19544 | 2393 else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2394 recorder->init (); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2395 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2396 retval = recorder; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2397 |
19544 | 2398 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2399 |
19544 | 2400 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
|
2401 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2402 #endif |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2403 |
19544 | 2404 return retval; |
2405 } | |
2406 | |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
2407 #ifdef HAVE_PORTAUDIO |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
2408 |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2409 static audioplayer * |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2410 get_player (const octave_value& ov) |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2411 { |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2412 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
|
2413 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2414 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
|
2415 |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2416 return dynamic_cast<audioplayer *> (ncrep); |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2417 } |
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2418 |
19560
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
2419 #endif |
7f271cef5850
protect all portaudio and sndfile dependent code with #ifdefs
John W. Eaton <jwe@octave.org>
parents:
19553
diff
changeset
|
2420 |
19544 | 2421 DEFUN_DLD (__player_get_channels__, args, , |
2422 "-*- texinfo -*-\n\ | |
2423 @deftypefn {Loadable Function} {@var{n} =} __player_get_channels__ (@var{player})\n\ | |
2424 Undocumented internal function.\n\ | |
2425 @end deftypefn") | |
2426 { | |
2427 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2428 |
19544 | 2429 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2430 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2431 if (args.length () == 1) |
19544 | 2432 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2433 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2434 retval = player->get_channels (); |
19544 | 2435 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2436 |
19544 | 2437 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2438 |
19544 | 2439 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
|
2440 |
19544 | 2441 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2442 |
19544 | 2443 return retval; |
2444 } | |
2445 | |
2446 DEFUN_DLD (__player_get_fs__, args, , | |
2447 "-*- texinfo -*-\n\ | |
2448 @deftypefn {Loadable Function} {@var{fs} =} __player_get_fs__ (@var{player})\n\ | |
2449 Undocumented internal function.\n\ | |
2450 @end deftypefn") | |
2451 { | |
2452 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2453 |
19544 | 2454 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2455 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2456 if (args.length () == 1) |
19544 | 2457 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2458 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2459 retval = player->get_fs (); |
19544 | 2460 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2461 |
19544 | 2462 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2463 |
19544 | 2464 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
|
2465 |
19544 | 2466 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2467 |
19544 | 2468 return retval; |
2469 } | |
2470 | |
2471 DEFUN_DLD (__player_get_id__, args, , | |
2472 "-*- texinfo -*-\n\ | |
2473 @deftypefn {Loadable Function} {@var{id} =} __player_get_id__ (@var{player})\n\ | |
2474 Undocumented internal function.\n\ | |
2475 @end deftypefn") | |
2476 { | |
2477 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2478 |
19544 | 2479 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2480 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2481 if (args.length () == 1) |
19544 | 2482 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2483 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2484 retval = player->get_id (); |
19544 | 2485 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2486 |
19544 | 2487 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2488 |
19544 | 2489 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
|
2490 |
19544 | 2491 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2492 |
19544 | 2493 return retval; |
2494 } | |
2495 | |
2496 DEFUN_DLD (__player_get_nbits__, args, , | |
2497 "-*- texinfo -*-\n\ | |
2498 @deftypefn {Loadable Function} {@var{nbits} =} __player_get_nbits__ (@var{player})\n\ | |
2499 Undocumented internal function.\n\ | |
2500 @end deftypefn") | |
2501 { | |
2502 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2503 |
19544 | 2504 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2505 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2506 if (args.length () == 1) |
19544 | 2507 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2508 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2509 retval = player->get_nbits (); |
19544 | 2510 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2511 |
19544 | 2512 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2513 |
19544 | 2514 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
|
2515 |
19544 | 2516 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2517 |
19544 | 2518 return retval; |
2519 } | |
2520 | |
2521 DEFUN_DLD (__player_get_sample_number__, args, , | |
2522 "-*- texinfo -*-\n\ | |
2523 @deftypefn {Loadable Function} {@var{n} =} __player_get_sample_number__ (@var{player})\n\ | |
2524 Undocumented internal function.\n\ | |
2525 @end deftypefn") | |
2526 { | |
2527 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2528 |
19544 | 2529 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2530 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2531 if (args.length () == 1) |
19544 | 2532 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2533 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2534 retval = player->get_sample_number (); |
19544 | 2535 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2536 |
19544 | 2537 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2538 |
19544 | 2539 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
|
2540 |
19544 | 2541 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2542 |
19544 | 2543 return retval; |
2544 } | |
2545 | |
2546 DEFUN_DLD (__player_get_tag__, args, , | |
2547 "-*- texinfo -*-\n\ | |
2548 @deftypefn {Loadable Function} {@var{tag} =} __player_get_tag__ (@var{player})\n\ | |
2549 Undocumented internal function.\n\ | |
2550 @end deftypefn") | |
2551 { | |
2552 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2553 |
19544 | 2554 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2555 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2556 if (args.length () == 1) |
19544 | 2557 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2558 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2559 retval = player->get_tag (); |
19544 | 2560 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2561 |
19544 | 2562 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2563 |
19544 | 2564 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
|
2565 |
19544 | 2566 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2567 |
19544 | 2568 return retval; |
2569 } | |
2570 | |
2571 DEFUN_DLD (__player_get_total_samples__, args, , | |
2572 "-*- texinfo -*-\n\ | |
2573 @deftypefn {Loadable Function} {@var{n} =} __player_get_total_samples__ (@var{player})\n\ | |
2574 Undocumented internal function.\n\ | |
2575 @end deftypefn") | |
2576 { | |
2577 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2578 |
19544 | 2579 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2580 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2581 if (args.length () == 1) |
19544 | 2582 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2583 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2584 retval = player->get_total_samples (); |
19544 | 2585 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2586 |
19544 | 2587 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2588 |
19544 | 2589 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
|
2590 |
19544 | 2591 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2592 |
19544 | 2593 return retval; |
2594 } | |
2595 | |
2596 DEFUN_DLD (__player_get_userdata__, args, , | |
2597 "-*- texinfo -*-\n\ | |
2598 @deftypefn {Loadable Function} {@var{data} =} __player_get_userdata__ (@var{player})\n\ | |
2599 Undocumented internal function.\n\ | |
2600 @end deftypefn") | |
2601 { | |
2602 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2603 |
19544 | 2604 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2605 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2606 if (args.length () == 1) |
19544 | 2607 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2608 audioplayer *player = get_player (args(0)); |
19544 | 2609 retval = player->get_userdata (); |
2610 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2611 |
19544 | 2612 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2613 |
19544 | 2614 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
|
2615 |
19544 | 2616 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2617 |
19544 | 2618 return retval; |
2619 } | |
2620 | |
2621 DEFUN_DLD (__player_isplaying__, args, , | |
2622 "-*- texinfo -*-\n\ | |
2623 @deftypefn {Loadable Function} {} __player_isplaying__ (@var{player})\n\ | |
2624 Undocumented internal function.\n\ | |
2625 @end deftypefn") | |
2626 { | |
2627 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2628 |
19544 | 2629 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2630 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2631 if (args.length () == 1) |
19544 | 2632 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2633 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2634 retval = player->isplaying () ? true : false; |
19544 | 2635 } |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2636 |
19544 | 2637 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2638 |
19544 | 2639 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
|
2640 |
19544 | 2641 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2642 |
19544 | 2643 return retval; |
2644 } | |
2645 | |
2646 DEFUN_DLD (__player_pause__, args, , | |
2647 "-*- texinfo -*-\n\ | |
2648 @deftypefn {Loadable Function} {} __player_pause__ (@var{player})\n\ | |
2649 Undocumented internal function.\n\ | |
2650 @end deftypefn") | |
2651 { | |
2652 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2653 |
19544 | 2654 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2655 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2656 if (args.length () == 1) |
19544 | 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 player->pause (); |
2660 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2661 |
19544 | 2662 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2663 |
19544 | 2664 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
|
2665 |
19544 | 2666 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2667 |
19544 | 2668 return retval; |
2669 } | |
2670 | |
2671 DEFUN_DLD (__player_playblocking__, args, , | |
2672 "-*- texinfo -*-\n\ | |
2673 @deftypefn {Loadable Function} {} __player_playblocking__ (@var{player})\n\ | |
2674 @deftypefnx {Loadable Function} {} __player_playblocking__ (@var{player}, @var{start})\n\ | |
2675 @deftypefnx {Loadable Function} {} __player_playblocking__ (@var{player}, [@var{start}, @var{end}])\n\ | |
2676 Undocumented internal function.\n\ | |
2677 @end deftypefn") | |
2678 { | |
2679 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2680 |
19544 | 2681 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2682 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2683 if (args.length () == 1) |
19544 | 2684 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2685 audioplayer *player = get_player (args(0)); |
19544 | 2686 player->playblocking (); |
2687 } | |
2688 else | |
2689 { | |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2690 audioplayer *player = get_player (args(0)); |
19544 | 2691 if (args(1).is_matrix_type ()) |
2692 { | |
2693 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
|
2694 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2695 unsigned int start = range.elem (0) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2696 unsigned int end = range.elem (1) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2697 |
19549
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19548
diff
changeset
|
2698 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
|
2699 || 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
|
2700 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2701 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2702 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2703 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2704 |
19544 | 2705 player->set_sample_number (start); |
2706 player->set_end_sample (end); | |
2707 } | |
2708 else | |
2709 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2710 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
|
2711 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
2712 if (start > player->get_total_samples ()) |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2713 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2714 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2715 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2716 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2717 |
19544 | 2718 player->set_sample_number (start); |
2719 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2720 |
19544 | 2721 player->playblocking (); |
2722 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2723 |
19544 | 2724 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2725 |
19544 | 2726 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
|
2727 |
19544 | 2728 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2729 |
19544 | 2730 return retval; |
2731 } | |
2732 | |
2733 DEFUN_DLD (__player_play__, args, , | |
2734 "-*- texinfo -*-\n\ | |
2735 @deftypefn {Loadable Function} {} __player_play__ (@var{player})\n\ | |
2736 @deftypefnx {Loadable Function} {} __player_play__ (@var{player}, @var{start})\n\ | |
2737 @deftypefnx {Loadable Function} {} __player_play__ (@var{player}, [@var{start}, @var{end}])\n\ | |
2738 Undocumented internal function.\n\ | |
2739 @end deftypefn") | |
2740 { | |
2741 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2742 |
19544 | 2743 #ifdef HAVE_PORTAUDIO |
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 if (args.length () == 1) |
19544 | 2746 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2747 audioplayer *player = get_player (args(0)); |
19544 | 2748 player->play (); |
2749 } | |
2750 else | |
2751 { | |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2752 audioplayer *player = get_player (args(0)); |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2753 |
19544 | 2754 if (args(1).is_matrix_type ()) |
2755 { | |
2756 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
|
2757 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2758 unsigned int start = range.elem (0) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2759 unsigned int end = range.elem (1) - 1; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2760 |
19549
0f7788e2d677
* audiodevinfo.cc: Use "||" and "&&", not "or" and "and".
John W. Eaton <jwe@octave.org>
parents:
19548
diff
changeset
|
2761 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
|
2762 || 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
|
2763 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2764 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2765 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2766 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2767 |
19544 | 2768 player->set_sample_number (start); |
2769 player->set_end_sample (end); | |
2770 } | |
2771 else | |
2772 { | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2773 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
|
2774 |
19548
ef6875adb053
* audiodevinfo.cc: Avoid warnings about comparision operations.
John W. Eaton <jwe@octave.org>
parents:
19547
diff
changeset
|
2775 if (start > player->get_total_samples ()) |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2776 { |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2777 error ("audioplayer: invalid range specified for playback"); |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2778 return retval; |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2779 } |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2780 |
19544 | 2781 player->set_sample_number (start); |
2782 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2783 |
19544 | 2784 player->play (); |
2785 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2786 |
19544 | 2787 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2788 |
19544 | 2789 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
|
2790 |
19544 | 2791 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2792 |
19544 | 2793 return retval; |
2794 } | |
2795 | |
2796 DEFUN_DLD (__player_resume__, args, , | |
2797 "-*- texinfo -*-\n\ | |
2798 @deftypefn {Loadable Function} {} __player_resume__ (@var{player})\n\ | |
2799 Undocumented internal function.\n\ | |
2800 @end deftypefn") | |
2801 { | |
2802 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2803 |
19544 | 2804 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2805 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2806 if (args.length () == 1) |
19544 | 2807 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2808 audioplayer *player = get_player (args(0)); |
19544 | 2809 player->resume (); |
2810 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2811 |
19544 | 2812 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2813 |
19544 | 2814 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
|
2815 |
19544 | 2816 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2817 |
19544 | 2818 return retval; |
2819 } | |
2820 | |
2821 DEFUN_DLD (__player_set_fs__, args, , | |
2822 "-*- texinfo -*-\n\ | |
2823 @deftypefn {Loadable Function} {} __player_set_fs__ (@var{player}, @var{fs})\n\ | |
2824 Undocumented internal function.\n\ | |
2825 @end deftypefn") | |
2826 { | |
2827 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2828 |
19544 | 2829 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2830 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2831 if (args.length () == 2) |
19544 | 2832 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2833 audioplayer *player = get_player (args(0)); |
19544 | 2834 player->set_fs (args(1).int_value ()); |
2835 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2836 |
19544 | 2837 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2838 |
19544 | 2839 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
|
2840 |
19544 | 2841 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2842 |
19544 | 2843 return retval; |
2844 } | |
2845 | |
2846 DEFUN_DLD (__player_set_tag__, args, , | |
2847 "-*- texinfo -*-\n\ | |
2848 @deftypefn {Loadable Function} {} __player_set_tag__ (@var{player}, @var{tag})\n\ | |
2849 Undocumented internal function.\n\ | |
2850 @end deftypefn") | |
2851 { | |
2852 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2853 |
19544 | 2854 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2855 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2856 if (args.length () == 2) |
19544 | 2857 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2858 audioplayer *player = get_player (args(0)); |
19544 | 2859 player->set_tag (args(1).char_matrix_value ()); |
2860 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2861 |
19544 | 2862 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2863 |
19544 | 2864 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
|
2865 |
19544 | 2866 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2867 |
19544 | 2868 return retval; |
2869 } | |
2870 | |
2871 DEFUN_DLD (__player_set_userdata__, args, , | |
2872 "-*- texinfo -*-\n\ | |
2873 @deftypefn {Loadable Function} {} __player_set_userdata__ (@var{player}, @var{data})\n\ | |
2874 Undocumented internal function.\n\ | |
2875 @end deftypefn") | |
2876 { | |
2877 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2878 |
19544 | 2879 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2880 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2881 if (args.length () == 2) |
19544 | 2882 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2883 audioplayer *player = get_player (args(0)); |
19544 | 2884 player->set_userdata (args(1)); |
2885 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2886 |
19544 | 2887 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2888 |
19544 | 2889 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
|
2890 |
19544 | 2891 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2892 |
19544 | 2893 return retval; |
2894 } | |
2895 | |
2896 DEFUN_DLD (__player_stop__, args, , | |
2897 "-*- texinfo -*-\n\ | |
2898 @deftypefn {Loadable Function} {} __player_stop__ (@var{player})\n\ | |
2899 Undocumented internal function.\n\ | |
2900 @end deftypefn") | |
2901 { | |
2902 octave_value retval; | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2903 |
19544 | 2904 #ifdef HAVE_PORTAUDIO |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2905 |
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2906 if (args.length () == 1) |
19544 | 2907 { |
19547
4cb4210bd392
use C++ style casts in audio code
John W. Eaton <jwe@octave.org>
parents:
19546
diff
changeset
|
2908 audioplayer *player = get_player (args (0)); |
19544 | 2909 player->stop (); |
2910 } | |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2911 |
19544 | 2912 #else |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2913 |
19544 | 2914 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
|
2915 |
19544 | 2916 #endif |
19553
e616c2830413
various style fixes for audio code
John W. Eaton <jwe@octave.org>
parents:
19552
diff
changeset
|
2917 |
19544 | 2918 return retval; |
2919 } |