MaixCAM MaixPy Audio Record
Update history
Date | Version | Author | Update content |
---|---|---|---|
2024-05-20 | 1.0.0 | lxowalle | Initial document |
Introduction
This document provides the usage of audio recording and supports recording audio in PCM
and WAV
formats.
The MaixCAM
has a microphone on board, so you can use the recording function directly.
How to use
Getting PCM
data
If you don't pass path
when constructing a Recorder
object, it will only record audio and not save it to a file, but you can save it to a file manually.
from maix import audio, time, app
r = audio.Recorder()
r.volume(12)
print("sample_rate:{} format:{} channel:{}".format(r.sample_rate(), r.format(), r.channel()))
while not app.need_exit():
data = r.record()
print("data size", len(data))
time.sleep_ms(10)
print("record finish!")
Steps:
Import the audio, time and app modules:
from maix import audio, time, app
Initialize Recorder
r = audio.Recorder() r.volume(12)
Note that the default sample rate is 48k, the sample format is little-endian format - signed 16-bit, and the sample channel is 1. You can also customise the parameters like this
r = audio.Recorder(sample_rate=48000, format=audio.Format.FMT_S16_LE, channel = 1)
. So far only tested with sample rate 48000, formatFMT_S16_LE
, and number of sampling channels 1.r.volume(12)
is used to set the volume, the volume range is [0,100]
Start recording
data = r.record()
data
isbytes
type data inPCM
format that holds the currently recorded audio. ThePCM
format is set when initialising theRecorder
object, see step 2. Note that if the recording is too fast and there is no data in the audio buffer, it is possible to return an emptybytes
of data.
Done, you can do voice processing on the
PCM
data returned byr.record()
when doing your own applications.
Records audio and saves it in WAV
format.
If you pass path
when constructing a Recorder
object, the recorded audio will be saved to a path
file, and you can also get the currently recorded PCM
data via the record
method. path
only supports paths with .pcm
and .wav
suffixes, and the record
method does not return WAV
headers when recording .wav
, it only returns PCM
data.
from maix import audio, time, app
r = audio.Recorder("/root/output.wav")
r.volume(12)
print("sample_rate:{} format:{} channel:{}".format(r.sample_rate(), r.format(), r.channel()))
while not app.need_exit():
data = r.record()
print("data size", len(data))
time.sleep_ms(10)
print("record finish!")
The code means basically the same as above.
Record audio and save to WAV
format (blocking)
If the record_ms
parameter is set during recording, recording audio will block until the time set by record_ms
is reached, unit: ms.
from maix import audio, time, app
r = audio.Recorder("/root/output.wav")
r.volume(12)
print("sample_rate:{} format:{} channel:{}".format(r.sample_rate(), r.format(), r.channel()))
r.record(5000)
print("record finish!")
The above example will keep recording 5000
ms and save it to WAV
format, during the recording period it will block in record
method, note that PCM
data will not be returned when record
is set to record_ms
.
Other
The Player
and Recorder
modules have some bugs
to be worked out, make sure they are created before other modules (Camera
module, Display
module, etc.). For example:
# Create Player and Recorder first.
p = audio.Player()
r = audio.Recorder()
# Then create the Camera
c = camera.Camera()