Mercurial > octave-nkf
annotate libinterp/dldfcn/player_class.cc @ 19535:1f551d169db2
Include config.h in audio project source files
* libinterp/dldfcn/__player_audioplayer__.cc,
libinterp/dldfcn/__recorder_audiorecorder__.cc,
libinterp/dldfcn/audiodevinfo.cc, libinterp/dldfcn/audioinfo.cc,
libinterp/dldfcn/audioread.cc, libinterp/dldfcn/audiowrite.cc,
libinterp/dldfcn/player_class.cc, libinterp/dldfcn/recorder_class.cc:
Include config.h before all other header files.
author | Mike Miller <mtmiller@ieee.org> |
---|---|
date | Tue, 01 Oct 2013 23:42:43 -0400 |
parents | 8bb399569393 |
children | 36a26a131209 |
rev | line source |
---|---|
19534
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
1 /* |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
2 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
3 Copyright (C) 2013 Vytautas JanĨauskas |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
4 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
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:
19509
diff
changeset
|
6 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
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:
19509
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:
19509
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:
19509
diff
changeset
|
10 option) any later version. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
11 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
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:
19509
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:
19509
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:
19509
diff
changeset
|
15 for more details. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
16 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
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:
19509
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:
19509
diff
changeset
|
19 <http://www.gnu.org/licenses/>. |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
20 |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
21 */ |
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
22 |
19535
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19534
diff
changeset
|
23 #ifdef HAVE_CONFIG_H |
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19534
diff
changeset
|
24 #include <config.h> |
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19534
diff
changeset
|
25 #endif |
1f551d169db2
Include config.h in audio project source files
Mike Miller <mtmiller@ieee.org>
parents:
19534
diff
changeset
|
26 |
19509
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
27 #include "oct.h" |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
28 #include "ov.h" |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
29 #include "parse.h" |
19508
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
30 #include <portaudio.h> |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
31 #include <stdint.h> |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
32 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
33 #include "player_class.h" |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
34 |
19509
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
35 PaSampleFormat bits_to_format(int bits) |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
36 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
37 if (bits == 8) |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
38 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
39 return paInt8; |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
40 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
41 else if (bits == 16) |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
42 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
43 return paInt16; |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
44 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
45 else if (bits == 24) |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
46 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
47 return paInt24; |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
48 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
49 else if (bits == 32) |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
50 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
51 return paInt32; |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
52 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
53 else if (bits == -1) |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
54 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
55 return paFloat32; |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
56 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
57 else |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
58 { |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
59 return 0; |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
60 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
61 } |
b9df6b3fd5ef
Fix includes in player and recorder class files, add instructions to build them
Vytautas Jančauskas <unaudio@gmail.com>
parents:
19508
diff
changeset
|
62 |
19508
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
63 #define BUFFER_SIZE 512 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
64 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
65 DEFINE_OCTAVE_ALLOCATOR (audioplayer); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
66 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (audioplayer, "audioplayer", "audioplayer"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
67 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
68 int is_big_endian (void) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
69 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
70 union |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
71 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
72 uint32_t i; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
73 char c[4]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
74 } bint = {0x01020304}; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
75 return bint.c[0] == 1; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
76 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
77 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
78 static int octave_play_callback(const void *input, void *output, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
79 unsigned long frames, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
80 const PaStreamCallbackTimeInfo *time, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
81 PaStreamCallbackFlags status, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
82 void *data) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
83 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
84 audioplayer *player = (audioplayer *)data; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
85 int big_endian = is_big_endian (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
86 octave_value_list args, retval; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
87 args(0) = frames; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
88 retval = feval (player->octave_callback_function, args, 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
89 RowVector sound_l, sound_r; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
90 Matrix sound = retval(0).matrix_value (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
91 int return_status = retval(1).int_value (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
92 sound_l.resize(frames); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
93 sound_r.resize(frames); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
94 if (sound.cols () == 1) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
95 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
96 for (int i = 0; i < frames; i++) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
97 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
98 sound_l(i) = sound(i, 0); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
99 sound_r(i) = sound(i, 0); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
100 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
101 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
102 else if (sound.cols () == 2) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
103 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
104 for (int i = 0; i < frames; i++) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
105 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
106 sound_l(i) = sound(i, 0); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
107 sound_r(i) = sound(i, 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
108 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
109 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
110 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
111 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
112 return paAbort; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
113 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
114 for (int i = 0; i < frames; i++) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
115 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
116 if (player->get_nbits () == 8) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
117 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
118 int8_t *buffer = (int8_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
119 buffer[2 * i] = sound_l.elem(i) * (pow (2.0, 7) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
120 buffer[2 * i + 1] = sound_r.elem(i) * (pow (2.0, 7) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
121 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
122 else if (player->get_nbits () == 16) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
123 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
124 int16_t *buffer = (int16_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
125 buffer[2 * i] = sound_l.elem(i) * (pow (2.0, 15) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
126 buffer[2 * i + 1] = sound_r.elem(i) * (pow (2.0, 15) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
127 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
128 else if (player->get_nbits() == 24) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
129 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
130 uint8_t *buffer = (uint8_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
131 int32_t sample_l = sound_l.elem(i) * (pow (2.0, 23) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
132 int32_t sample_r = sound_r.elem(i) * (pow (2.0, 23) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
133 sample_l &= 0x00ffffff; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
134 sample_r &= 0x00ffffff; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
135 uint8_t *_sample_l = (uint8_t *)&sample_l; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
136 uint8_t *_sample_r = (uint8_t *)&sample_r; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
137 buffer[i * 6 + 0] = _sample_l[0 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
138 buffer[i * 6 + 1] = _sample_l[1 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
139 buffer[i * 6 + 2] = _sample_l[2 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
140 buffer[i * 6 + 3] = _sample_r[0 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
141 buffer[i * 6 + 4] = _sample_r[1 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
142 buffer[i * 6 + 5] = _sample_r[2 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
143 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
144 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
145 return return_status; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
146 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
147 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
148 static int portaudio_play_callback (const void *input, void *output, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
149 unsigned long frames, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
150 const PaStreamCallbackTimeInfo* time, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
151 PaStreamCallbackFlags status, |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
152 void *data) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
153 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
154 audioplayer *player = (audioplayer *)data; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
155 int big_endian = is_big_endian (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
156 int channels = player->get_channels (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
157 RowVector *sound_l = player->get_left (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
158 RowVector *sound_r; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
159 if (channels > 1) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
160 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
161 sound_r = player->get_right (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
162 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
163 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
164 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
165 sound_r = sound_l; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
166 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
167 for (int j = 0, k = 0; j < frames; j++, k += 2) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
168 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
169 unsigned int sample_number = player->get_sample_number(); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
170 if (sample_number > player->get_end_sample ()) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
171 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
172 return paAbort; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
173 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
174 if (player->get_type () == DOUBLE) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
175 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
176 if (player->get_nbits () == 8) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
177 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
178 int8_t *buffer = (int8_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
179 buffer[k] = sound_l->elem (sample_number) * (pow (2.0, 7) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
180 buffer[k + 1] = sound_r->elem (sample_number) * (pow (2.0, 7) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
181 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
182 else if (player->get_nbits () == 16) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
183 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
184 int16_t *buffer = (int16_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
185 buffer[k] = sound_l->elem (sample_number) * (pow (2.0, 15) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
186 buffer[k + 1] = sound_r->elem (sample_number) * (pow (2.0, 15) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
187 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
188 else if (player->get_nbits() == 24) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
189 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
190 uint8_t *buffer = (uint8_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
191 int32_t sample_l = sound_l->elem(sample_number) * (pow (2.0, 23) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
192 int32_t sample_r = sound_r->elem(sample_number) * (pow (2.0, 23) - 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
193 sample_l &= 0x00ffffff; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
194 sample_r &= 0x00ffffff; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
195 uint8_t *_sample_l = (uint8_t *)&sample_l; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
196 uint8_t *_sample_r = (uint8_t *)&sample_r; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
197 buffer[j * 6 + 0] = _sample_l[0 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
198 buffer[j * 6 + 1] = _sample_l[1 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
199 buffer[j * 6 + 2] = _sample_l[2 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
200 buffer[j * 6 + 3] = _sample_r[0 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
201 buffer[j * 6 + 4] = _sample_r[1 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
202 buffer[j * 6 + 5] = _sample_r[2 + big_endian]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
203 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
204 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
205 else if (player->get_type () == INT8) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
206 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
207 int8_t *buffer = (int8_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
208 buffer[k] = sound_l->elem (sample_number); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
209 buffer[k + 1] = sound_r->elem (sample_number); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
210 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
211 else if (player->get_type () == UINT8) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
212 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
213 uint8_t *buffer = (uint8_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
214 buffer[k] = sound_l->elem (sample_number); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
215 buffer[k + 1] = sound_r->elem (sample_number); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
216 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
217 else if (player->get_type () == INT16) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
218 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
219 int16_t *buffer = (int16_t *)output; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
220 buffer[k] = sound_l->elem (sample_number); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
221 buffer[k + 1] = sound_r->elem (sample_number); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
222 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
223 player->set_sample_number (sample_number + 1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
224 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
225 return paContinue; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
226 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
227 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
228 audioplayer::audioplayer () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
229 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
230 this->nbits = 16; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
231 this->id = -1; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
232 this->sample_number = 0; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
233 this->tag = charMatrix (""); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
234 Matrix userdata; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
235 this->userdata = octave_value (userdata); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
236 this->stream = 0; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
237 this->octave_callback_function = 0; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
238 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
239 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
240 audioplayer::~audioplayer () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
241 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
242 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
243 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
244 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
245 void audioplayer::print (std::ostream& os, bool pr_as_read_syntax ) const |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
246 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
247 print_raw (os, pr_as_read_syntax); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
248 newline (os); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
249 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
250 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
251 void audioplayer::print_raw (std::ostream& os, bool pr_as_read_syntax) const |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
252 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
253 os << 0; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
254 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
255 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
256 void audioplayer::init_fn() |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
257 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
258 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
259 int device; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
260 err = Pa_Initialize (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
261 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
262 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
263 error ("audioplayer: Initialization error!"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
264 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
265 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
266 int numDevices; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
267 numDevices = Pa_GetDeviceCount (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
268 if (numDevices < 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
269 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
270 error ("audioplayer: No audio devices found!"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
271 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
272 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
273 if (this->get_id () == -1) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
274 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
275 device = Pa_GetDefaultOutputDevice (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
276 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
277 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
278 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
279 device = this->get_id (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
280 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
281 output_parameters.device = device; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
282 output_parameters.channelCount = 2; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
283 output_parameters.sampleFormat = bits_to_format (this->get_nbits ()); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
284 output_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighOutputLatency; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
285 output_parameters.hostApiSpecificStreamInfo = NULL; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
286 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
287 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
288 void audioplayer::init () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
289 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
290 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
291 int channels = this->y.rows (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
292 RowVector *sound_l = this->get_left (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
293 int device; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
294 err = Pa_Initialize (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
295 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
296 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
297 error ("audioplayer: Initialization error!"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
298 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
299 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
300 int numDevices; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
301 numDevices = Pa_GetDeviceCount (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
302 if (numDevices < 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
303 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
304 error ("audioplayer: No audio devices found!"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
305 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
306 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
307 if (this->get_id () == -1) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
308 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
309 device = Pa_GetDefaultOutputDevice (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
310 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
311 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
312 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
313 device = this->get_id (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
314 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
315 output_parameters.device = device; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
316 output_parameters.channelCount = 2; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
317 if (this->type == DOUBLE) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
318 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
319 output_parameters.sampleFormat = bits_to_format (this->get_nbits ()); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
320 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
321 else if (this->type == INT8) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
322 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
323 output_parameters.sampleFormat = paInt8; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
324 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
325 else if (this->type == UINT8) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
326 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
327 output_parameters.sampleFormat = paUInt8; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
328 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
329 else if (this->type == INT16) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
330 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
331 output_parameters.sampleFormat = paInt16; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
332 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
333 output_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighOutputLatency; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
334 output_parameters.hostApiSpecificStreamInfo = NULL; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
335 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
336 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
337 void audioplayer::set_y (octave_value y) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
338 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
339 if (y.is_int8_type ()) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
340 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
341 this->type = INT8; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
342 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
343 else if (y.is_uint8_type ()) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
344 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
345 this->type = UINT8; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
346 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
347 else if (y.is_int16_type ()) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
348 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
349 this->type = INT16; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
350 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
351 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
352 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
353 this->type = DOUBLE; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
354 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
355 this->y = y.matrix_value (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
356 if (this->y.rows () > 2) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
357 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
358 this->y = this->y.transpose (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
359 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
360 this->channels = this->y.rows (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
361 this->left = this->y.row (0); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
362 if (this->channels == 2) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
363 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
364 this->right = this->y.row (1); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
365 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
366 this->reset_end_sample (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
367 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
368 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
369 void audioplayer::set_y (octave_function *fn) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
370 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
371 this->octave_callback_function = fn; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
372 this->channels = 2; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
373 this->reset_end_sample (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
374 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
375 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
376 Matrix &audioplayer::get_y () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
377 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
378 return this->y; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
379 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
380 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
381 RowVector *audioplayer::get_left () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
382 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
383 return &(this->left); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
384 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
385 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
386 RowVector *audioplayer::get_right () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
387 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
388 return &(this->right); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
389 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
390 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
391 void audioplayer::set_fs (int fs) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
392 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
393 this->fs = fs; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
394 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
395 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
396 int audioplayer::get_fs () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
397 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
398 return this->fs; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
399 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
400 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
401 void audioplayer::set_nbits (int nbits) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
402 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
403 this->nbits = nbits; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
404 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
405 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
406 int audioplayer::get_nbits () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
407 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
408 return this->nbits; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
409 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
410 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
411 void audioplayer::set_id (int id) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
412 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
413 this->id = id; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
414 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
415 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
416 int audioplayer::get_id () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
417 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
418 return this->id; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
419 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
420 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
421 int audioplayer::get_channels () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
422 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
423 return this->channels; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
424 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
425 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
426 audio_type audioplayer::get_type () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
427 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
428 return this->type; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
429 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
430 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
431 void audioplayer::set_sample_number (unsigned int sample_number) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
432 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
433 this->sample_number = sample_number; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
434 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
435 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
436 unsigned int audioplayer::get_sample_number () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
437 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
438 return this->sample_number; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
439 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
440 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
441 unsigned int audioplayer::get_total_samples () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
442 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
443 return this->left.length (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
444 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
445 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
446 void audioplayer::set_end_sample (unsigned int end_sample) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
447 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
448 this->end_sample = end_sample; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
449 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
450 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
451 unsigned int audioplayer::get_end_sample () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
452 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
453 return this->end_sample; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
454 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
455 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
456 void audioplayer::reset_end_sample () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
457 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
458 this->set_end_sample (this->left.length ()); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
459 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
460 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
461 void audioplayer::set_tag (charMatrix tag) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
462 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
463 this->tag = tag; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
464 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
465 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
466 charMatrix audioplayer::get_tag () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
467 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
468 return this->tag; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
469 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
470 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
471 void audioplayer::set_userdata (octave_value userdata) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
472 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
473 this->userdata = userdata; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
474 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
475 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
476 octave_value audioplayer::get_userdata () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
477 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
478 return this->userdata; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
479 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
480 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
481 void audioplayer::playblocking () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
482 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
483 if (this->get_stream ()) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
484 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
485 this->stop (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
486 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
487 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
488 uint32_t buffer[BUFFER_SIZE * 2]; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
489 err = Pa_OpenStream (&stream, NULL, &(this->output_parameters), this->get_fs (), BUFFER_SIZE, paClipOff, NULL, NULL); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
490 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
491 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
492 error ("audioplayer: Error opening audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
493 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
494 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
495 err = Pa_StartStream (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
496 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
497 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
498 error ("audioplayer: Error starting audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
499 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
500 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
501 unsigned int start, end; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
502 start = this->get_sample_number (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
503 end = this->get_end_sample (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
504 for (int i = start; i < end; i += BUFFER_SIZE) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
505 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
506 if (this->octave_callback_function != 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
507 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
508 octave_play_callback (0, (void *)buffer, BUFFER_SIZE, 0, 0, (void *)this); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
509 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
510 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
511 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
512 portaudio_play_callback (0, (void *)buffer, BUFFER_SIZE, 0, 0, (void *)this); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
513 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
514 err = Pa_WriteStream (stream, buffer, BUFFER_SIZE); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
515 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
516 err = Pa_StopStream (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
517 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
518 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
519 error ("audioplayer: Error stoping audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
520 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
521 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
522 err = Pa_CloseStream (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
523 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
524 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
525 error ("audioplayer: Error closing audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
526 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
527 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
528 stream = 0; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
529 this->set_sample_number (0); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
530 this->reset_end_sample (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
531 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
532 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
533 void audioplayer::play () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
534 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
535 if (this->get_stream ()) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
536 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
537 this->stop (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
538 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
539 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
540 if (this->octave_callback_function != 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
541 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
542 err = Pa_OpenStream (&stream, NULL, &(this->output_parameters), this->get_fs (), BUFFER_SIZE, paClipOff, octave_play_callback, (void *)this); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
543 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
544 else |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
545 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
546 err = Pa_OpenStream (&stream, NULL, &(this->output_parameters), this->get_fs (), BUFFER_SIZE, paClipOff, portaudio_play_callback, (void *)this); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
547 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
548 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
549 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
550 error ("audioplayer: Error opening audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
551 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
552 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
553 err = Pa_StartStream (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
554 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
555 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
556 error ("audioplayer: Error starting audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
557 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
558 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
559 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
560 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
561 void audioplayer::pause () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
562 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
563 if (this->get_stream () == 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
564 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
565 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
566 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
567 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
568 err = Pa_StopStream (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
569 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
570 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
571 error ("audiorecorder: Error stoping audio recording stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
572 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
573 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
574 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
575 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
576 void audioplayer::resume () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
577 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
578 if (this->get_stream() == 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
579 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
580 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
581 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
582 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
583 err = Pa_StartStream (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
584 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
585 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
586 error ("audiorecorder: Error starting audio recording stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
587 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
588 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
589 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
590 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
591 PaStream *audioplayer::get_stream() |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
592 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
593 return this->stream; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
594 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
595 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
596 void audioplayer::stop() |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
597 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
598 if (this->get_stream () == 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
599 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
600 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
601 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
602 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
603 this->set_sample_number (0); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
604 this->reset_end_sample (); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
605 if (not Pa_IsStreamStopped (this->get_stream ())) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
606 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
607 err = Pa_AbortStream (this->get_stream ()); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
608 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
609 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
610 error ("audioplayer: Error stopping audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
611 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
612 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
613 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
614 err = Pa_CloseStream (this->get_stream ()); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
615 if (err != paNoError) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
616 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
617 error ("audioplayer: Error closing audio playback stream"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
618 return; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
619 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
620 stream = 0; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
621 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
622 |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
623 bool audioplayer::isplaying () |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
624 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
625 if (this->get_stream() == 0) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
626 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
627 return false; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
628 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
629 PaError err; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
630 err = Pa_IsStreamActive (stream); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
631 if (err != 0 and err != 1) |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
632 { |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
633 error ("audiorecorder: Error checking stream activity status"); |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
634 return false; |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
635 } |
91ee78cdba6c
New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff
changeset
|
636 return bool(err); |
19534
8bb399569393
Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents:
19509
diff
changeset
|
637 } |