annotate libinterp/dldfcn/recorder_class.cc @ 19537:36a26a131209

Apply Octave coding style to audio project additions * 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/player_class.h, libinterp/dldfcn/recorder_class.cc, libinterp/dldfcn/recorder_class.h, scripts/audio/@audioplayer/__get_properties__.m, scripts/audio/@audioplayer/audioplayer.m, scripts/audio/@audioplayer/display.m, scripts/audio/@audioplayer/get.m, scripts/audio/@audioplayer/isplaying.m, scripts/audio/@audioplayer/pause.m, scripts/audio/@audioplayer/play.m, scripts/audio/@audioplayer/playblocking.m, scripts/audio/@audioplayer/resume.m, scripts/audio/@audioplayer/set.m, scripts/audio/@audioplayer/stop.m, scripts/audio/@audioplayer/subsasgn.m, scripts/audio/@audioplayer/subsref.m, scripts/audio/@audiorecorder/__get_properties__.m, scripts/audio/@audiorecorder/audiorecorder.m, scripts/audio/@audiorecorder/display.m, scripts/audio/@audiorecorder/get.m, scripts/audio/@audiorecorder/getaudiodata.m, scripts/audio/@audiorecorder/getplayer.m, scripts/audio/@audiorecorder/isrecording.m, scripts/audio/@audiorecorder/pause.m, scripts/audio/@audiorecorder/play.m, scripts/audio/@audiorecorder/record.m, scripts/audio/@audiorecorder/recordblocking.m, scripts/audio/@audiorecorder/resume.m, scripts/audio/@audiorecorder/set.m, scripts/audio/@audiorecorder/stop.m, scripts/audio/@audiorecorder/subsasgn.m, scripts/audio/@audiorecorder/subsref.m: Apply consistent Octave indentation, spacing, and quoting styles. Strip trailing whitespace. Remove braces from one-line if-else blocks. Simplify some variable declarations.
author Mike Miller <mtmiller@ieee.org>
date Thu, 03 Oct 2013 07:52:58 -0400
parents 1f551d169db2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19534
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
diff changeset
1 /*
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
diff changeset
2
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
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: 19513
diff changeset
4
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
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: 19513
diff changeset
6
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
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: 19513
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: 19513
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: 19513
diff changeset
10 option) any later version.
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
diff changeset
11
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
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: 19513
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: 19513
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: 19513
diff changeset
15 for more details.
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
diff changeset
16
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
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: 19513
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: 19513
diff changeset
19 <http://www.gnu.org/licenses/>.
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
diff changeset
20
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
diff changeset
21 */
8bb399569393 Add Octave copyright header block to audio project files
Mike Miller <mtmiller@ieee.org>
parents: 19513
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 #include "recorder_class.h"
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
35
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
36 #define BUFFER_SIZE 512
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
37
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
38 DEFINE_OCTAVE_ALLOCATOR (audiorecorder);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
39 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (audiorecorder, "audiorecorder", "audiorecorder");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
40
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
41 static int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
42 octave_record_callback (const void *input, void *output,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
43 unsigned long frames,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
44 const PaStreamCallbackTimeInfo* time,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
45 PaStreamCallbackFlags status,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
46 void *data)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
47 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
48 audiorecorder *recorder = (audiorecorder *)data;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
49 int channels = recorder->get_channels ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
50 float sample_l, sample_r;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
51 Matrix sound;
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
52 sound.resize (frames, 2);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
53 if (recorder->get_nbits () == 8)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
54 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
55 int8_t *input8 = (int8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
56 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
57 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
58 sample_l = input8[i * channels] / (pow (2.0, 7) - 1.0);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
59 sample_r = input8[i * channels + (channels - 1)] / (pow (2.0, 7) - 1.0);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
60 sound(i, 0) = sample_l;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
61 sound(i, 1) = sample_r;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
62 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
63 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
64 else if (recorder->get_nbits () == 16)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
65 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
66 int16_t *input16 = (int16_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
67 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
68 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
69 sample_l = input16[i * channels] / (pow (2.0, 15) - 1.0);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
70 sample_r = input16[i * channels + (channels - 1)] / (pow (2.0, 15) - 1.0);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
71 sound(i, 0) = sample_l;
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
72 sound(i, 1) = sample_r;
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
73 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
74 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
75 else if (recorder->get_nbits () == 24)
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 uint8_t *input24 = (uint8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
78 int32_t sample_l32, sample_r32;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
79 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
80 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
81 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
82 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
83 for (int j = 0; j < 3; j++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
84 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
85 _sample_l[j] = input24[i * channels * 3 + j];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
86 _sample_r[j] = input24[i * channels * 3 + (channels - 1) * 3 + j];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
87 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
88 if (sample_l32 & 0x00800000)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
89 sample_l32 |= 0xff000000;
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
90 if (sample_r32 & 0x00800000)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
91 sample_r32 |= 0xff000000;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
92 sound(i, 0) = sample_l32 / pow (2.0, 23);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
93 sound(i, 1) = sample_r32 / pow (2.0, 23);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
94 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
95 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
96
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
97 octave_value_list args, retval;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
98 args(0) = sound;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
99 retval = feval (recorder->octave_callback_function, args, 1);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
100 return retval(0).int_value ();
19508
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
103 static int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
104 portaudio_record_callback (const void *input, void *output,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
105 unsigned long frames,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
106 const PaStreamCallbackTimeInfo* time,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
107 PaStreamCallbackFlags status,
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
108 void *data)
19508
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 audiorecorder *recorder = (audiorecorder *)data;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
111 int channels = recorder->get_channels ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
112 float sample_l, sample_r;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
113 if (recorder->get_nbits () == 8)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
114 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
115 int8_t *input8 = (int8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
116 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
117 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
118 sample_l = input8[i * channels] / (pow (2.0, 7) - 1.0);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
119 sample_r = input8[i * channels + (channels - 1)] / (pow (2.0, 7) - 1.0);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
120 recorder->append (sample_l, sample_r);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
121 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
122 }
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
123 else if (recorder->get_nbits () == 16)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
124 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
125 int16_t *input16 = (int16_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
126 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
127 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
128 sample_l = input16[i * channels] / (pow (2.0, 15) - 1.0);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
129 sample_r = input16[i * channels + (channels - 1)] / (pow (2.0, 15) - 1.0);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
130 recorder->append (sample_l, sample_r);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
131 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
132 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
133 else if (recorder->get_nbits () == 24)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
134 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
135 uint8_t *input24 = (uint8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
136 int32_t sample_l32, sample_r32;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
137 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
138 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
139 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
140 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
141 for (int j = 0; j < 3; j++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
142 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
143 _sample_l[j] = input24[i * channels * 3 + j];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
144 _sample_r[j] = input24[i * channels * 3 + (channels - 1) * 3 + j];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
145 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
146 if (sample_l32 & 0x00800000)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
147 sample_l32 |= 0xff000000;
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
148 if (sample_r32 & 0x00800000)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
149 sample_r32 |= 0xff000000;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
150 recorder->append (sample_l32 / pow (2.0, 23), sample_r32 / pow (2.0, 23));
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
151 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
152 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
153
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
154 if (recorder->get_sample_number () > recorder->get_end_sample ())
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
155 return paComplete;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
156
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
157 return paContinue;
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
158 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
159
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
160 audiorecorder::audiorecorder (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
161 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
162 this->id = -1;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
163 this->sample_number = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
164 this->channels = 1;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
165 this->tag = charMatrix ("");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
166 Matrix userdata;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
167 this->userdata = octave_value (userdata);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
168 this->stream = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
169 this->end_sample = -1;
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
170 this->set_fs (44100);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
171 this->set_nbits (16);
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
172 this->set_channels (2);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
173 this->octave_callback_function = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
174 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
175
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
176 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
177 audiorecorder::print (std::ostream& os, bool pr_as_read_syntax) const
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
178 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
179 print_raw (os, pr_as_read_syntax);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
180 newline (os);
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
183 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
184 audiorecorder::print_raw (std::ostream& os, bool pr_as_read_syntax) const
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
185 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
186 os << 0;
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
189 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
190 audiorecorder::init (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
191 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
192 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
193 int device;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
194 err = Pa_Initialize ();
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
195 if (err != paNoError)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
196 {
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
197 error ("audiorecorder: Initialization error!");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
198 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
199 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
200
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
201 int numDevices = Pa_GetDeviceCount ();
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
202 if (numDevices < 0)
19508
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 error ("audiorecorder: No audio devices found!");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
205 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
206 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
207
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
208 if (this->get_id () == -1)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
209 device = Pa_GetDefaultInputDevice ();
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
210 else
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
211 device = this->get_id ();
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
212
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
213 this->input_parameters.device = device;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
214 this->input_parameters.channelCount = this->get_channels ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
215 this->input_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
216 this->input_parameters.suggestedLatency = Pa_GetDeviceInfo (device)->defaultHighInputLatency;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
217 this->input_parameters.hostApiSpecificStreamInfo = NULL;
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
220 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
221 audiorecorder::set_fs (int fs)
19508
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 this->fs = fs;
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
226 int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
227 audiorecorder::get_fs (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
228 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
229 return this->fs;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
230 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
231
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
232 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
233 audiorecorder::set_nbits (int nbits)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
234 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
235 this->nbits = nbits;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
236 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
237
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
238 int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
239 audiorecorder::get_nbits (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
240 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
241 return this->nbits;
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
244 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
245 audiorecorder::set_id (int id)
19508
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 this->id = id;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
248 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
249
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
250 int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
251 audiorecorder::get_id (void)
19508
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 return this->id;
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
256 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
257 audiorecorder::set_channels (int channels)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
258 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
259 assert (channels == 1 or channels == 2);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
260 this->channels = channels;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
261 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
262
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
263 int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
264 audiorecorder::get_channels (void)
19508
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 return this->channels;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
267 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
268
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
269 audio_type
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
270 audiorecorder::get_type (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
271 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
272 return this->type;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
273 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
274
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
275 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
276 audiorecorder::set_sample_number (unsigned int sample_number)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
277 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
278 this->sample_number = sample_number;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
279 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
280
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
281 unsigned int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
282 audiorecorder::get_sample_number (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
283 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
284 return this->sample_number;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
285 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
286
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
287 unsigned int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
288 audiorecorder::get_total_samples (void)
19508
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 return this->left.size ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
291 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
292
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
293 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
294 audiorecorder::set_end_sample (unsigned int end_sample)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
295 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
296 this->end_sample = end_sample;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
297 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
298
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
299 unsigned int
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
300 audiorecorder::get_end_sample (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
301 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
302 return this->end_sample;
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
305 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
306 audiorecorder::reset_end_sample (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
307 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
308 this->set_end_sample (this->left.size ());
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
309 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
310
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
311 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
312 audiorecorder::set_tag (charMatrix tag)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
313 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
314 this->tag = tag;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
315 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
316
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
317 charMatrix
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
318 audiorecorder::get_tag (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
319 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
320 return this->tag;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
321 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
322
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
323 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
324 audiorecorder::set_userdata (octave_value userdata)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
325 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
326 this->userdata = userdata;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
327 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
328
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
329 octave_value
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
330 audiorecorder::get_userdata (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
331 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
332 return this->userdata;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
333 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
334
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
335 octave_value
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
336 audiorecorder::getaudiodata (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
337 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
338 Matrix audio (2, this->left.size ());
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
339 for (int i = 0; i < this->left.size (); i++)
19508
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 audio(0, i) = this->left[i];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
342 audio(1, i) = this->right[i];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
343 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
344 return octave_value (audio);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
345 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
346
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
347 audioplayer *
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
348 audiorecorder::getplayer (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
349 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
350 audioplayer *player = new audioplayer ();
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
351 player->set_y (this->getaudiodata ());
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
352 player->set_fs (this->get_fs ());
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
353 player->set_nbits (this->get_nbits ());
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
354 player->init ();
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
355 return player;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
356 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
357
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
358 bool
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
359 audiorecorder::isrecording (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
360 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
361 if (this->get_stream () == 0)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
362 return false;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
363
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
364 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
365 err = Pa_IsStreamActive (stream);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
366 if (err != 0 and err != 1)
19508
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 error ("audiorecorder: Error checking stream activity status");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
369 return false;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
370 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
371
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
372 return (err == 1);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
373 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
374
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
375 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
376 audiorecorder::record (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
377 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
378 if (this->get_stream ())
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
379 this->stop ();
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
380
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
381 this->left.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
382 this->right.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
383 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
384 if (this->octave_callback_function != 0)
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 err = Pa_OpenStream (&stream, &(this->input_parameters), NULL, this->get_fs (), BUFFER_SIZE, paClipOff, octave_record_callback, (void *)this);
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 else
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 err = Pa_OpenStream (&stream, &(this->input_parameters), NULL, this->get_fs (), BUFFER_SIZE, paClipOff, portaudio_record_callback, (void *)this);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
391 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
392 if (err != paNoError)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
393 {
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
394 error ("audiorecorder: Error opening audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
395 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
396 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
397 err = Pa_StartStream (stream);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
398 if (err != paNoError)
19508
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 error ("audiorecorder: Error starting audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
401 return;
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 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
404
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
405 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
406 audiorecorder::recordblocking (float seconds)
19508
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 if (this->get_stream ())
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
409 this->stop ();
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
410
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
411 this->left.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
412 this->right.clear ();
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
413
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
414 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
415 err = Pa_OpenStream (&stream, &(this->input_parameters), NULL, this->get_fs (), BUFFER_SIZE, paClipOff, NULL, (void *)this);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
416 if (err != paNoError)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
417 {
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
418 error ("audiorecorder: Error opening audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
419 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
420 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
421
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
422 err = Pa_StartStream (stream);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
423 if (err != paNoError)
19508
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 error ("audiorecorder: Error starting audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
426 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
427 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
428
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
429 unsigned int frames = seconds * this->get_fs ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
430 uint8_t buffer[BUFFER_SIZE * 2 * 3];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
431 for (int i = 0; i < frames / BUFFER_SIZE; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
432 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
433 Pa_ReadStream (this->get_stream (), (void *)buffer, BUFFER_SIZE);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
434 if (this->octave_callback_function != 0)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
435 octave_record_callback ((void *)buffer, NULL, BUFFER_SIZE, 0, 0, (void *)this);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
436 else
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
437 portaudio_record_callback ((void *)buffer, NULL, BUFFER_SIZE, 0, 0, (void *)this);
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
438 }
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
441 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
442 audiorecorder::pause (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
443 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
444 if (this->get_stream () == 0)
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
445 return;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
446
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
447 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
448 err = Pa_StopStream (stream);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
449 if (err != paNoError)
19508
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 error ("audiorecorder: Error stoping audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
452 return;
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
453 }
19508
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
456 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
457 audiorecorder::resume (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
458 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
459 if (this->get_stream () == 0)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
460 return;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
461
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
462 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
463 err = Pa_StartStream (stream);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
464 if (err != paNoError)
19508
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 error ("audiorecorder: Error starting audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
467 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
468 }
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
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
471 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
472 audiorecorder::stop (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
473 {
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
474 if (this->get_stream () == 0)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
475 return;
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
476
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
477 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
478 if (not Pa_IsStreamStopped (this->get_stream ()))
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 err = Pa_AbortStream (this->get_stream ());
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
481 if (err != paNoError)
19508
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 error ("audioplayer: Error stopping audio playback stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
484 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
485 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
486 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
487
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
488 err = Pa_CloseStream (stream);
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
489 if (err != paNoError)
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
490 {
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
491 error ("audiorecorder: Error closing audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
492 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
493 }
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
494
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
495 this->set_sample_number (0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
496 this->reset_end_sample ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
497 stream = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
498 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
499
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
500 void
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
501 audiorecorder::append (float sample_l, float sample_r)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
502 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
503 this->left.push_back (sample_l);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
504 this->right.push_back (sample_r);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
505 this->set_sample_number (this->get_sample_number () + 1);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
506 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
507
19537
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
508 PaStream *
36a26a131209 Apply Octave coding style to audio project additions
Mike Miller <mtmiller@ieee.org>
parents: 19535
diff changeset
509 audiorecorder::get_stream (void)
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
510 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
511 return this->stream;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
512 }