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