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