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