Skip to content

Instantly share code, notes, and snippets.

@mabdrabo
Created January 28, 2014 23:05
Show Gist options
  • Save mabdrabo/8678538 to your computer and use it in GitHub Desktop.
Save mabdrabo/8678538 to your computer and use it in GitHub Desktop.
Simple script to record sound from the microphone, dependencies: easy_install pyaudio
import pyaudio
import wave
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "file.wav"
audio = pyaudio.PyAudio()
# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True,
frames_per_buffer=CHUNK)
print "recording..."
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print "finished recording"
# stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
@adfadasdf-cymklajkjsk
Copy link

Sorry but the code won't work

@SpirosArk
Copy link

Sorry but the code won't work

What's the error?

@TheEccentricDuck
Copy link

Sorry but the code won't work

I think I know the problem, you may have a python3 interpreter while this code is written in python2. You need to delete the spaces after any print and turn it into print(...)

@bg172
Copy link

bg172 commented May 29, 2021

Hi, I got this error when I tried to record audio

Traceback (most recent call last):
  File "listen.py", line 23, in <module>
    data = stream.read(CHUNKSIZE)
  File "/.../python/venv/lib/python3.5/site-packages/pyaudio.py", line 608, in read
    return pa.read_stream(self._stream, num_frames, exception_on_overflow)
OSError: [Errno -9981] Input overflowed

Why it is happening?
How can I fix that?

same here, did you find the fix ?

I had same issue on RPi3b+ and fixed it with picking up input device:

stream = self.audio.open(format=FORMAT, input_device_index = 2,
                                 channels=CHANNELS,
                                 rate=RATE,
                                 input=True,    # Save the recorded data in a .wav format
                             frames_per_buffer=CHUNK)

I achieved a much better stability by setting CHUNK to an integer fraction of RATE, e.g. CHUNK = int(RATE/10), otherwise still had same exception mostly already in 10s to 80s after starting the loop with stream.read(chunk). And anyway for such data sources it is a good approach to use "try" and be ready for exceptions and know how much gets lost:)

@sinanaybar
Copy link

Hi,thanks good

@deluxerootit
Copy link

How can I add timestamp on the recorded audio?

I mean like putting current time on each frame in opencv:
cv2.putText(frame, str(datetime.now()), (20, 40), font, 2, (255, 255, 255), 2, cv2.LINE_AA)

@el07694
Copy link

el07694 commented Jun 24, 2022

You can use pydub module for this i think.
For example

from pydub import AudioSegment
...
...
...
    data = stream.read(CHUNK)
    slice = AudioSegment(data, sample_width=???, frame_rate=???, channels=???)
    slice_len = len(slice) #slice_len is the duration of data frame in milliseconds

@sujantkumarkv
Copy link

hey all, i know this is too old a gist, but i came here from nvidia forum. Any help is appreciated.

This script is assuming i physically have the jetson right and using its microphone? because i'm connected to it via ssh on my macbook & physically very far. So, i guess I somehow need to send the audio packets/bytes to it?

and does pyaudio help with that? anyone has clues how to proceed? thanks :)

cc @mabdrabo @el07694 @deluxerootit @sinanaybar @bg172 @TheEccentricDuck @shilan @kongkip @YveOms @creboy @jdelange @muthiyanbhushan @Raman99444 @soni30 @Shinoy-12 @salilsaxena @davekimble2 @ajfarkas @kanik9 @progware @ecambronero @ClaudiaMarchPiris @PiepsC @Skykiller664 @pomarec @s1st3r @morenol @sharpriy @riadibadulla @marijnruyts @Dinesh2903 @danidz @HarrisMx @maelfosso @xe1gyq @rdhara @MihailRis @Akshay0724 @nmnhut2010 @ashishmd @rachit1994 @kevinmgamboa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment