annotate libinterp/dldfcn/recorder_class.cc @ 19508:91ee78cdba6c

New files for audio playback and recording * player_class.cc, player_class.h: source files implementing player class for audio playback * recorder_class.cc, recorder_class.h: source files implementing recorder class for audio recording
author Vytautas Jančauskas <unaudio@gmail.com>
date Wed, 11 Sep 2013 22:08:20 +0300
parents
children b9df6b3fd5ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19508
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
1 #include <octave/oct.h>
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
2 #include <octave/ov.h>
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
3 #include <octave/parse.h>
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
4 #include <portaudio.h>
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
5 #include <stdint.h>
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
6
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
7 #include "common.h"
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
8 #include "player_class.h"
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
9 #include "recorder_class.h"
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
10
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
11 #define BUFFER_SIZE 512
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
12
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
13 DEFINE_OCTAVE_ALLOCATOR (audiorecorder);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
14 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
15
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
16 static int octave_record_callback (const void *input, void *output,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
17 unsigned long frames,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
18 const PaStreamCallbackTimeInfo* time,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
19 PaStreamCallbackFlags status,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
20 void *data)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
21 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
22 audiorecorder *recorder = (audiorecorder *)data;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
23 int channels = recorder->get_channels ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
24 int return_status;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
25 float sample_l, sample_r;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
26 Matrix sound;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
27 sound.resize(frames, 2);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
28 if (recorder->get_nbits () == 8)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
29 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
30 int8_t *input8 = (int8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
31 for (int i = 0; i < frames; i++)
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 sample_l = input8[i * channels] / (pow(2.0, 7) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
34 sample_r = input8[i * channels + (channels - 1)] / (pow(2.0, 7) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
35 sound(i, 0) = sample_l;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
36 sound(i, 1) = sample_r;
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 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
39 else if (recorder->get_nbits () == 16)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
40 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
41 int16_t *input16 = (int16_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
42 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
43 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
44 sample_l = input16[i * channels] / (pow(2.0, 15) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
45 sample_r = input16[i * channels + (channels - 1)] / (pow(2.0, 15) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
46 sound(i, 0) = sample_l;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
47 sound(i, 1) = sample_r;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
48 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
49 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
50 else if (recorder->get_nbits () == 24)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
51 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
52 uint8_t *input24 = (uint8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
53 int32_t sample_l32, sample_r32;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
54 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
55 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
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 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
58 for (int j = 0; j < 3; j++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
59 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
60 _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
61 _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
62 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
63 if (sample_l32 & 0x00800000)
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 sample_l32 |= 0xff000000;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
66 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
67 if (sample_r32 & 0x00800000)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
68 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
69 sample_r32 |= 0xff000000;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
70 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
71 sound(i, 0) = sample_l32 / pow(2.0, 23);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
72 sound(i, 1) = sample_r32 / pow(2.0, 23);
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 octave_value_list args, retval;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
76 args(0) = sound;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
77 retval = feval (recorder->octave_callback_function, args, 1);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
78 return_status = retval(0).int_value ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
79 return return_status;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
80 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
81
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
82 static int portaudio_record_callback (const void *input, void *output,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
83 unsigned long frames,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
84 const PaStreamCallbackTimeInfo* time,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
85 PaStreamCallbackFlags status,
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
86 void *data)
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 audiorecorder *recorder = (audiorecorder *)data;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
89 int channels = recorder->get_channels ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
90 float sample_l, sample_r;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
91 if (recorder->get_nbits () == 8)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
92 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
93 int8_t *input8 = (int8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
94 for (int i = 0; i < frames; i++)
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 sample_l = input8[i * channels] / (pow(2.0, 7) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
97 sample_r = input8[i * channels + (channels - 1)] / (pow(2.0, 7) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
98 recorder->append(sample_l, sample_r);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
99 }
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 else if (recorder->get_nbits () == 16)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
102 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
103 int16_t *input16 = (int16_t *)input;
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 sample_l = input16[i * channels] / (pow(2.0, 15) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
107 sample_r = input16[i * channels + (channels - 1)] / (pow(2.0, 15) - 1.0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
108 recorder->append(sample_l, sample_r);
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 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
111 else if (recorder->get_nbits () == 24)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
112 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
113 uint8_t *input24 = (uint8_t *)input;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
114 int32_t sample_l32, sample_r32;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
115 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
116 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
117 for (int i = 0; i < frames; i++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
118 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
119 for (int j = 0; j < 3; j++)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
120 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
121 _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
122 _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
123 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
124 if (sample_l32 & 0x00800000)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
125 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
126 sample_l32 |= 0xff000000;
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 if (sample_r32 & 0x00800000)
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 sample_r32 |= 0xff000000;
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 recorder->append(sample_l32 / pow(2.0, 23), sample_r32 / pow(2.0, 23));
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
133 }
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 if (recorder->get_sample_number () > recorder->get_end_sample ())
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
136 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
137 return paComplete;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
138 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
139 return paContinue;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
142 audiorecorder::audiorecorder ()
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 this->id = -1;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
145 this->sample_number = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
146 this->channels = 1;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
147 this->tag = charMatrix ("");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
148 Matrix userdata;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
149 this->userdata = octave_value (userdata);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
150 this->stream = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
151 this->end_sample = -1;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
152 this->set_fs(44100);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
153 this->set_nbits(16);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
154 this->set_channels(2);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
155 this->octave_callback_function = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
156 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
157
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
158 audiorecorder::~audiorecorder ()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
159 {
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 }
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 void audiorecorder::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
164 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
165 print_raw (os, pr_as_read_syntax);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
166 newline (os);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
167 }
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 void audiorecorder::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
170 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
171 os << 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
172 }
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 void audiorecorder::init ()
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 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
177 int device;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
178 err = Pa_Initialize ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
179 if (err != paNoError)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
180 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
181 error ("audiorecorder: Initialization error!");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
182 return;
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 int numDevices;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
185 numDevices = Pa_GetDeviceCount ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
186 if (numDevices < 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 error ("audiorecorder: No audio devices found!");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
189 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
190 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
191 if (this->get_id () == -1)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
192 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
193 device = Pa_GetDefaultInputDevice ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
194 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
195 else
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
196 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
197 device = this->get_id ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
198 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
199 this->input_parameters.device = device;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
200 this->input_parameters.channelCount = this->get_channels ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
201 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
202 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
203 this->input_parameters.hostApiSpecificStreamInfo = NULL;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
206 void audiorecorder::set_fs (int fs)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
207 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
208 this->fs = fs;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
209 }
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 int audiorecorder::get_fs ()
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 return this->fs;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
214 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
215
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
216 void audiorecorder::set_nbits (int nbits)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
217 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
218 this->nbits = nbits;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
219 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
220
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
221 int audiorecorder::get_nbits ()
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 return this->nbits;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
226 void audiorecorder::set_id (int id)
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 this->id = id;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
231 int audiorecorder::get_id ()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
232 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
233 return this->id;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
236 void audiorecorder::set_channels (int channels)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
237 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
238 assert(channels == 1 or channels == 2);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
239 this->channels = channels;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
242 int audiorecorder::get_channels ()
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 return this->channels;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
245 }
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 audio_type audiorecorder::get_type ()
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 return this->type;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
252 void audiorecorder::set_sample_number (unsigned int sample_number)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
253 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
254 this->sample_number = sample_number;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
257 unsigned int audiorecorder::get_sample_number ()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
258 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
259 return this->sample_number;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
260 }
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 unsigned int audiorecorder::get_total_samples ()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
263 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
264 return this->left.size ();
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
267 void audiorecorder::set_end_sample (unsigned int end_sample)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
268 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
269 this->end_sample = end_sample;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
270 }
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 unsigned int audiorecorder::get_end_sample ()
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 return this->end_sample;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
275 }
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 void audiorecorder::reset_end_sample ()
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 this->set_end_sample (this->left.size ());
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
282 void audiorecorder::set_tag (charMatrix tag)
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 this->tag = tag;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
287 charMatrix audiorecorder::get_tag ()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
288 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
289 return this->tag;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
290 }
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 void audiorecorder::set_userdata (octave_value userdata)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
293 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
294 this->userdata = userdata;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
297 octave_value audiorecorder::get_userdata ()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
298 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
299 return this->userdata;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
300 }
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 octave_value audiorecorder::getaudiodata()
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 Matrix audio (2, this->left.size());
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
305 for (int i = 0; i < this->left.size(); i++)
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 audio(0, i) = this->left[i];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
308 audio(1, i) = this->right[i];
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 return octave_value (audio);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
311 }
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 audioplayer *audiorecorder::getplayer ()
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 audioplayer *player = new audioplayer ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
316 player->set_y(this->getaudiodata ());
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
317 player->set_fs(this->get_fs ());
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
318 player->set_nbits(this->get_nbits ());
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
319 player->init();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
320 return player;
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
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
323 bool audiorecorder::isrecording()
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 if (this->get_stream() == 0)
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 return false;
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 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
330 err = Pa_IsStreamActive (stream);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
331 if (err != 0 and err != 1)
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 error ("audiorecorder: Error checking stream activity status");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
334 return false;
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 return bool(err);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
337 }
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 void audiorecorder::record()
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 if (this->get_stream())
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 this->stop ();
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->left.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
346 this->right.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
347 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
348 if (this->octave_callback_function != 0)
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 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
351 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
352 else
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
353 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
354 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
355 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
356 if (err != paNoError)
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 error ("audiorecorder: Error opening audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
359 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
360 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
361 err = Pa_StartStream (stream);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
362 if (err != paNoError)
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 error ("audiorecorder: Error starting audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
365 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
366 }
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 audiorecorder::recordblocking (float seconds)
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 if (this->get_stream ())
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
372 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
373 this->stop ();
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 this->left.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
376 this->right.clear ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
377 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
378 err = Pa_OpenStream (&stream, &(this->input_parameters), NULL, this->get_fs (), BUFFER_SIZE, paClipOff, NULL, (void *)this);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
379 if (err != paNoError)
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 error ("audiorecorder: Error opening audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
382 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
383 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
384 err = Pa_StartStream (stream);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
385 if (err != paNoError)
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
386 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
387 error ("audiorecorder: Error starting audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
388 return;
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 unsigned int frames = seconds * this->get_fs ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
391 uint8_t buffer[BUFFER_SIZE * 2 * 3];
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
392 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
393 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
394 Pa_ReadStream(this->get_stream (), (void *)buffer, BUFFER_SIZE);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
395 if (this->octave_callback_function != 0)
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 octave_record_callback((void *)buffer, NULL, BUFFER_SIZE, 0, 0, (void *)this);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
398 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
399 else
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 portaudio_record_callback((void *)buffer, NULL, BUFFER_SIZE, 0, 0, (void *)this);
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 }
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 void audiorecorder::pause ()
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 () == 0)
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 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
411 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
412 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
413 err = Pa_StopStream (stream);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
414 if (err != paNoError)
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 error ("audiorecorder: Error stoping audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
417 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
418 }
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 void audiorecorder::resume()
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 if (this->get_stream() == 0)
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 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
426 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
427 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
428 err = Pa_StartStream (stream);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
429 if (err != paNoError)
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 error ("audiorecorder: Error starting audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
432 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
433 }
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 void audiorecorder::stop()
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 if (this->get_stream() == 0)
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 return;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
441 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
442 PaError err;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
443 if (not Pa_IsStreamStopped (this->get_stream ()))
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 err = Pa_AbortStream (this->get_stream ());
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
446 if (err != paNoError)
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 error ("audioplayer: Error stopping audio playback stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
449 return;
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 }
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
452 err = Pa_CloseStream (stream);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
453 if (err != paNoError)
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 error ("audiorecorder: Error closing audio recording stream");
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
456 return;
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_sample_number (0);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
459 this->reset_end_sample ();
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
460 stream = 0;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
461 }
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 void audiorecorder::append (float sample_l, float sample_r)
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 this->left.push_back (sample_l);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
466 this->right.push_back (sample_r);
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
467 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
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 PaStream *audiorecorder::get_stream()
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
471 {
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
472 return this->stream;
91ee78cdba6c New files for audio playback and recording
Vytautas Jančauskas <unaudio@gmail.com>
parents:
diff changeset
473 }