Skip to content

Commit 05a18a2

Browse files
committed
audio record and play
1 parent 02b5548 commit 05a18a2

File tree

6 files changed

+22
-10
lines changed

6 files changed

+22
-10
lines changed

audio.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ def say(self, what, locale='en'):
7676
def normalize(self, snd_data):
7777
"Average the volume out"
7878
MAXIMUM = 16384
79+
#times = float(MAXIMUM) / audioop.rms(snd_data, 2)
7980
times = float(MAXIMUM)/max(abs(i) for i in snd_data)
81+
logging.info("times: " + str(times))
8082

8183
r = array('h')
8284
for i in snd_data:
@@ -90,15 +92,23 @@ def record(self, elapse):
9092

9193
r = array('h')
9294

93-
while (c * 2.0 * 8192 / RATE) < elapse:
94-
c += 1
95-
# little endian, signed short
96-
snd_data = array('h', self.stream_in.read(CHUNK_SIZE))
97-
if byteorder == 'big':
98-
snd_data.byteswap()
99-
r.extend(snd_data)
95+
t = time.time()
96+
while time.time() - t < elapse:
97+
try:
98+
snd_data = array('h', self.stream_in.read(CHUNK_SIZE))
99+
r.extend(snd_data)
100+
logging.info("read: " + str(len(snd_data)) + " elapse: " + str(time.time() - t))
101+
except IOError as ex:
102+
if ex[1] != pyaudio.paInputOverflowed:
103+
raise
104+
#buf = '\x00' * CHUNK_SIZE #white noise
105+
logging.info("white noise")
106+
107+
108+
logging.info("read: " + str(len(r)) + " elapse: " + str(time.time() - t))
109+
100110

101-
sample_width = p.get_sample_size(FORMAT)
111+
sample_width = self.pyaudio.get_sample_size(FORMAT)
102112

103113
r = self.normalize(r)
104114

@@ -121,7 +131,7 @@ def play(self, filename):
121131

122132
# open stream based on the wave object which has been input.
123133
stream = self.pyaudio.open(format =
124-
p.get_format_from_width(wf.getsampwidth()),
134+
self.pyaudio.get_format_from_width(wf.getsampwidth()),
125135
channels = wf.getnchannels(),
126136
rate = wf.getframerate(),
127137
output = True)
@@ -134,6 +144,7 @@ def play(self, filename):
134144
# writing to the stream is what *actually* plays the sound.
135145
stream.write(data)
136146
data = wf.readframes(CHUNK_SIZE)
147+
logging.info("play")
137148

138149
# cleanup stuff.
139150
stream.close()

data/program_no_name.data

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"coderbot_turnLeft\" x=\"674\" y=\"68\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_turnRight\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_turnRight\"><next><block type=\"coderbot_turnRight\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_turnRight\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_turnLeft\"><next><block type=\"coderbot_turnLeft\"><next><block type=\"coderbot_moveForward\"><next><block type=\"coderbot_turnLeft\"><next><block type=\"coderbot_moveForward\"></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></xml>", "code": "get_bot().left(speed=80, elapse=0.5)\nget_bot().forward(speed=100, elapse=1)\nget_bot().forward(speed=100, elapse=1)\nget_bot().right(speed=80, elapse=0.5)\nget_bot().forward(speed=100, elapse=1)\nget_bot().right(speed=80, elapse=0.5)\nget_bot().right(speed=80, elapse=0.5)\nget_bot().forward(speed=100, elapse=1)\nget_bot().right(speed=80, elapse=0.5)\nget_bot().forward(speed=100, elapse=1)\nget_bot().forward(speed=100, elapse=1)\nget_bot().forward(speed=100, elapse=1)\nget_bot().left(speed=80, elapse=0.5)\nget_bot().left(speed=80, elapse=0.5)\nget_bot().forward(speed=100, elapse=1)\nget_bot().left(speed=80, elapse=0.5)\nget_bot().forward(speed=100, elapse=1)\n", "name": "no_name"}
1+
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"></xml>", "code": "", "name": "no_name"}

data/program_sound_rec_test.data

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"coderbot_audio_record\" x=\"9\" y=\"56\"><value name=\"FILENAME\"><block type=\"text\"><field name=\"TEXT\">test01.wav</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\"><field name=\"NUM\">5</field></block></value></block></xml>", "code": "get_audio().record_to_file(filename='test01.wav', elapse=5)\n", "name": "sound_rec_test"}

sounds/test01.wav

392 KB
Binary file not shown.

sounds/test02.wav

8.04 KB
Binary file not shown.

sounds/test03.wav

336 KB
Binary file not shown.

0 commit comments

Comments
 (0)