Did first 3
This commit is contained in:
parent
a2a32fea1a
commit
7ff9b9bc80
|
@ -36,25 +36,28 @@
|
|||
#include "shared-bindings/analogio/AnalogIn.h"
|
||||
#include "shared-bindings/util.h"
|
||||
|
||||
//|class AnalogIn:
|
||||
//|""":class:`AnalogIn` -- read analog voltage
|
||||
//|============================================
|
||||
//| class AnalogIn:
|
||||
//| """.. currentmodule:: analogio
|
||||
//|
|
||||
//|Usage::
|
||||
//| :class:`AnalogIn` -- read analog voltage
|
||||
//| ============================================
|
||||
//|
|
||||
//|import analogio
|
||||
//|from board import *
|
||||
//| Usage::
|
||||
//|
|
||||
//|adc = analogio.AnalogIn(A1)
|
||||
//|val = adc.value"""
|
||||
//| import analogio
|
||||
//| from board import *
|
||||
//|
|
||||
//|def __init__(self, pin: microcontroller.Pin):
|
||||
//| adc = analogio.AnalogIn(A1)
|
||||
//| val = adc.value"""
|
||||
//|
|
||||
//|"""Use the AnalogIn on the given pin. The reference voltage varies by
|
||||
//|platform so use ``reference_voltage`` to read the configured setting.
|
||||
|
||||
//| def __init__(self, pin: microcontroller.Pin):
|
||||
//| """Use the AnalogIn on the given pin. The reference voltage varies by
|
||||
//| platform so use ``reference_voltage`` to read the configured setting.
|
||||
//|
|
||||
//| :param ~microcontroller.Pin pin: the pin to read from"""
|
||||
//| ...
|
||||
//|
|
||||
//|:param ~microcontroller.Pin pin: the pin to read from"""
|
||||
//|...
|
||||
STATIC mp_obj_t analogio_analogin_make_new(const mp_obj_type_t *type,
|
||||
mp_uint_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
|
||||
// check number of arguments
|
||||
|
@ -70,9 +73,10 @@ STATIC mp_obj_t analogio_analogin_make_new(const mp_obj_type_t *type,
|
|||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//|def deinit(self, ) -> Any:
|
||||
//|"""Turn off the AnalogIn and release the pin for other use."""
|
||||
//|...
|
||||
//| def deinit(self, ) -> Any:
|
||||
//| """Turn off the AnalogIn and release the pin for other use."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t analogio_analogin_deinit(mp_obj_t self_in) {
|
||||
analogio_analogin_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
common_hal_analogio_analogin_deinit(self);
|
||||
|
@ -85,15 +89,17 @@ STATIC void check_for_deinit(analogio_analogin_obj_t *self) {
|
|||
raise_deinited_error();
|
||||
}
|
||||
}
|
||||
//|def __enter__(self, ) -> Any:
|
||||
//|"""No-op used by Context Managers."""
|
||||
//|...
|
||||
//| def __enter__(self, ) -> Any:
|
||||
//| """No-op used by Context Managers."""
|
||||
//| ...
|
||||
//|
|
||||
// Provided by context manager helper.
|
||||
|
||||
//|def __exit__(self, ) -> Any:
|
||||
//|"Automatically deinitializes the hardware when exiting a context. See
|
||||
//|:ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//|...
|
||||
//| def __exit__(self, ) -> Any:
|
||||
//| """Automatically deinitializes the hardware when exiting a context. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t analogio_analogin___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_analogio_analogin_deinit(args[0]);
|
||||
|
@ -101,12 +107,12 @@ STATIC mp_obj_t analogio_analogin___exit__(size_t n_args, const mp_obj_t *args)
|
|||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(analogio_analogin___exit___obj, 4, 4, analogio_analogin___exit__);
|
||||
|
||||
//|value: Any =
|
||||
//|"""The value on the analog pin between 0 and 65535 inclusive (16-bit). (read-only)
|
||||
//| value: Any = ...
|
||||
//| """The value on the analog pin between 0 and 65535 inclusive (16-bit). (read-only)
|
||||
//|
|
||||
//| Even if the underlying analog to digital converter (ADC) is lower
|
||||
//| resolution, the value is 16-bit."""
|
||||
//|
|
||||
//|Even if the underlying analog to digital converter (ADC) is lower
|
||||
//|resolution, the value is 16-bit."""
|
||||
//|...
|
||||
STATIC mp_obj_t analogio_analogin_obj_get_value(mp_obj_t self_in) {
|
||||
analogio_analogin_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -121,10 +127,10 @@ const mp_obj_property_t analogio_analogin_value_obj = {
|
|||
(mp_obj_t)&mp_const_none_obj},
|
||||
};
|
||||
|
||||
//|reference_voltage: Any =
|
||||
//|"""The maximum voltage measurable (also known as the reference voltage) as a
|
||||
//|`float` in Volts."""
|
||||
//|...
|
||||
//| reference_voltage: Any = ...
|
||||
//| """The maximum voltage measurable (also known as the reference voltage) as a
|
||||
//| `float` in Volts."""
|
||||
//|
|
||||
STATIC mp_obj_t analogio_analogin_obj_get_reference_voltage(mp_obj_t self_in) {
|
||||
analogio_analogin_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
|
|
@ -36,26 +36,28 @@
|
|||
#include "shared-bindings/util.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
|
||||
//|class AnalogOut:
|
||||
//|""".. currentmodule:: analogio
|
||||
//| class AnalogOut:
|
||||
//| """.. currentmodule:: analogio
|
||||
//|
|
||||
//|:class:`AnalogOut` -- output analog voltage
|
||||
//|============================================
|
||||
//| :class:`AnalogOut` -- output analog voltage
|
||||
//| ============================================
|
||||
//|
|
||||
//|The AnalogOut is used to output analog values (a specific voltage).
|
||||
//| The AnalogOut is used to output analog values (a specific voltage).
|
||||
//|
|
||||
//|Example usage::
|
||||
//| Example usage::
|
||||
//|
|
||||
//|import analogio
|
||||
//|from microcontroller import pin
|
||||
//| import analogio
|
||||
//| from microcontroller import pin
|
||||
//|
|
||||
//|dac = analogio.AnalogOut(pin.PA02) # output on pin PA02
|
||||
//|dac.value = 32768 # makes PA02 1.65V"""
|
||||
//|def __init__(self, pin: microcontroller.Pin):
|
||||
//|"""Use the AnalogOut on the given pin.
|
||||
//| dac = analogio.AnalogOut(pin.PA02) # output on pin PA02
|
||||
//| dac.value = 32768 # makes PA02 1.65V"""
|
||||
//|
|
||||
//| def __init__(self, pin: microcontroller.Pin):
|
||||
//| """Use the AnalogOut on the given pin.
|
||||
//|
|
||||
//| :param ~microcontroller.Pin pin: the pin to output to"""
|
||||
//| ...
|
||||
//|
|
||||
//|:param ~microcontroller.Pin pin: the pin to output to"""
|
||||
//|...
|
||||
STATIC mp_obj_t analogio_analogout_make_new(const mp_obj_type_t *type, mp_uint_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
|
||||
// check arguments
|
||||
mp_arg_check_num(n_args, kw_args, 1, 1, false);
|
||||
|
@ -69,9 +71,10 @@ STATIC mp_obj_t analogio_analogout_make_new(const mp_obj_type_t *type, mp_uint_t
|
|||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//|def deinit(self, ) -> Any:
|
||||
//|"""Turn off the AnalogOut and release the pin for other use."""
|
||||
//|...
|
||||
//| def deinit(self, ) -> Any:
|
||||
//| """Turn off the AnalogOut and release the pin for other use."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t analogio_analogout_deinit(mp_obj_t self_in) {
|
||||
analogio_analogout_obj_t *self = self_in;
|
||||
|
||||
|
@ -81,15 +84,17 @@ STATIC mp_obj_t analogio_analogout_deinit(mp_obj_t self_in) {
|
|||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(analogio_analogout_deinit_obj, analogio_analogout_deinit);
|
||||
|
||||
//|def __enter__(self, ) -> Any:
|
||||
//|"""No-op used by Context Managers."""
|
||||
//|...
|
||||
//| def __enter__(self, ) -> Any:
|
||||
//| """No-op used by Context Managers."""
|
||||
//| ...
|
||||
//|
|
||||
// Provided by context manager helper.
|
||||
|
||||
//|def __exit__(self, ) -> Any:
|
||||
//|"""Automatically deinitializes the hardware when exiting a context. See
|
||||
//|:ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//|...
|
||||
//| def __exit__(self, ) -> Any:
|
||||
//| """Automatically deinitializes the hardware when exiting a context. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t analogio_analogout___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_analogio_analogout_deinit(args[0]);
|
||||
|
@ -97,12 +102,12 @@ STATIC mp_obj_t analogio_analogout___exit__(size_t n_args, const mp_obj_t *args)
|
|||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(analogio_analogout___exit___obj, 4, 4, analogio_analogout___exit__);
|
||||
|
||||
//|value: Any =
|
||||
//|"""The value on the analog pin between 0 and 65535 inclusive (16-bit). (write-only)
|
||||
//| value: Any = ...
|
||||
//| """The value on the analog pin between 0 and 65535 inclusive (16-bit). (write-only)
|
||||
//|
|
||||
//| Even if the underlying digital to analog converter (DAC) is lower
|
||||
//| resolution, the value is 16-bit."""
|
||||
//|
|
||||
//|Even if the underlying digital to analog converter (DAC) is lower
|
||||
//|resolution, the value is 16-bit."""
|
||||
//|...
|
||||
STATIC mp_obj_t analogio_analogout_obj_set_value(mp_obj_t self_in, mp_obj_t value) {
|
||||
analogio_analogout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
if (common_hal_analogio_analogout_deinited(self)) {
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "shared-bindings/analogio/AnalogIn.h"
|
||||
#include "shared-bindings/analogio/AnalogOut.h"
|
||||
|
||||
//| :mod:`analogio` --- Analog hardware support
|
||||
//| """:mod:`analogio` --- Analog hardware support
|
||||
//| =================================================
|
||||
//|
|
||||
//| .. module:: analogio
|
||||
|
@ -70,7 +70,7 @@
|
|||
//| This example will initialize the the device, read
|
||||
//| :py:data:`~analogio.AnalogIn.value` and then
|
||||
//| :py:meth:`~analogio.AnalogIn.deinit` the hardware. The last step is optional
|
||||
//| because CircuitPython will do it automatically after the program finishes.
|
||||
//| because CircuitPython will do it automatically after the program finishes."""
|
||||
//|
|
||||
|
||||
STATIC const mp_rom_map_elem_t analogio_module_globals_table[] = {
|
||||
|
|
|
@ -35,64 +35,66 @@
|
|||
#include "shared-bindings/util.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
|
||||
//|class I2SOut:
|
||||
//|""".. currentmodule:: audiobusio
|
||||
//| class I2SOut:
|
||||
//| """.. currentmodule:: audiobusio
|
||||
//|
|
||||
//|:class:`I2SOut` -- Output an I2S audio signal
|
||||
//|========================================================
|
||||
//| :class:`I2SOut` -- Output an I2S audio signal
|
||||
//| ========================================================
|
||||
//|
|
||||
//|I2S is used to output an audio signal on an I2S bus."""
|
||||
//|def __init__(self, bit_clock: microcontroller.Pin, word_select: microcontroller.Pin, data: microcontroller.Pin, *, left_justified: bool):
|
||||
//|"""Create a I2SOut object associated with the given pins.
|
||||
//| I2S is used to output an audio signal on an I2S bus."""
|
||||
//|
|
||||
//|:param ~microcontroller.Pin bit_clock: The bit clock (or serial clock) pin
|
||||
//|:param ~microcontroller.Pin word_select: The word select (or left/right clock) pin
|
||||
//|:param ~microcontroller.Pin data: The data pin
|
||||
//|:param bool left_justified: True when data bits are aligned with the word select clock. False
|
||||
//|when they are shifted by one to match classic I2S protocol.
|
||||
//| def __init__(self, bit_clock: microcontroller.Pin, word_select: microcontroller.Pin, data: microcontroller.Pin, *, left_justified: bool):
|
||||
//| """Create a I2SOut object associated with the given pins.
|
||||
//|
|
||||
//|Simple 8ksps 440 Hz sine wave on `Metro M0 Express <https://www.adafruit.com/product/3505>`_
|
||||
//|using `UDA1334 Breakout <https://www.adafruit.com/product/3678>`_::
|
||||
//| :param ~microcontroller.Pin bit_clock: The bit clock (or serial clock) pin
|
||||
//| :param ~microcontroller.Pin word_select: The word select (or left/right clock) pin
|
||||
//| :param ~microcontroller.Pin data: The data pin
|
||||
//| :param bool left_justified: True when data bits are aligned with the word select clock. False
|
||||
//| when they are shifted by one to match classic I2S protocol.
|
||||
//|
|
||||
//|import audiobusio
|
||||
//|import audiocore
|
||||
//|import board
|
||||
//|import array
|
||||
//|import time
|
||||
//|import math
|
||||
//| Simple 8ksps 440 Hz sine wave on `Metro M0 Express <https://www.adafruit.com/product/3505>`_
|
||||
//| using `UDA1334 Breakout <https://www.adafruit.com/product/3678>`_::
|
||||
//|
|
||||
//|# Generate one period of sine wave.
|
||||
//|length = 8000 // 440
|
||||
//|sine_wave = array.array("H", [0] * length)
|
||||
//|for i in range(length):
|
||||
//|sine_wave[i] = int(math.sin(math.pi * 2 * i / 18) * (2 ** 15) + 2 ** 15)
|
||||
//| import audiobusio
|
||||
//| import audiocore
|
||||
//| import board
|
||||
//| import array
|
||||
//| import time
|
||||
//| import math
|
||||
//|
|
||||
//|sine_wave = audiocore.RawSample(sine_wave, sample_rate=8000)
|
||||
//|i2s = audiobusio.I2SOut(board.D1, board.D0, board.D9)
|
||||
//|i2s.play(sine_wave, loop=True)
|
||||
//|time.sleep(1)
|
||||
//|i2s.stop()
|
||||
//| # Generate one period of sine wave.
|
||||
//| length = 8000 // 440
|
||||
//| sine_wave = array.array("H", [0] * length)
|
||||
//| for i in range(length):
|
||||
//| sine_wave[i] = int(math.sin(math.pi * 2 * i / 18) * (2 ** 15) + 2 ** 15)
|
||||
//|
|
||||
//|Playing a wave file from flash::
|
||||
//| sine_wave = audiocore.RawSample(sine_wave, sample_rate=8000)
|
||||
//| i2s = audiobusio.I2SOut(board.D1, board.D0, board.D9)
|
||||
//| i2s.play(sine_wave, loop=True)
|
||||
//| time.sleep(1)
|
||||
//| i2s.stop()
|
||||
//|
|
||||
//|import board
|
||||
//|import audioio
|
||||
//|import audiocore
|
||||
//|import audiobusio
|
||||
//|import digitalio
|
||||
//| Playing a wave file from flash::
|
||||
//|
|
||||
//| import board
|
||||
//| import audioio
|
||||
//| import audiocore
|
||||
//| import audiobusio
|
||||
//| import digitalio
|
||||
//|
|
||||
//|
|
||||
//|f = open("cplay-5.1-16bit-16khz.wav", "rb")
|
||||
//|wav = audiocore.WaveFile(f)
|
||||
//| f = open("cplay-5.1-16bit-16khz.wav", "rb")
|
||||
//| wav = audiocore.WaveFile(f)
|
||||
//|
|
||||
//|a = audiobusio.I2SOut(board.D1, board.D0, board.D9)
|
||||
//| a = audiobusio.I2SOut(board.D1, board.D0, board.D9)
|
||||
//|
|
||||
//| print("playing")
|
||||
//| a.play(wav)
|
||||
//| while a.playing:
|
||||
//| pass
|
||||
//| print("stopped")"""
|
||||
//| ...
|
||||
//|
|
||||
//|print("playing")
|
||||
//|a.play(wav)
|
||||
//|while a.playing:
|
||||
//|pass
|
||||
//|print("stopped")"""
|
||||
//|...
|
||||
STATIC mp_obj_t audiobusio_i2sout_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_bit_clock, ARG_word_select, ARG_data, ARG_left_justified };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
|
@ -115,9 +117,10 @@ STATIC mp_obj_t audiobusio_i2sout_make_new(const mp_obj_type_t *type, size_t n_a
|
|||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//|def deinit(self, ) -> Any:
|
||||
//|"""Deinitialises the I2SOut and releases any hardware resources for reuse."""
|
||||
//|...
|
||||
//| def deinit(self, ) -> Any:
|
||||
//| """Deinitialises the I2SOut and releases any hardware resources for reuse."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_deinit(mp_obj_t self_in) {
|
||||
audiobusio_i2sout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
common_hal_audiobusio_i2sout_deinit(self);
|
||||
|
@ -130,15 +133,17 @@ STATIC void check_for_deinit(audiobusio_i2sout_obj_t *self) {
|
|||
raise_deinited_error();
|
||||
}
|
||||
}
|
||||
//|def __enter__(self, ) -> Any:
|
||||
//|"""No-op used by Context Managers."""
|
||||
//|...
|
||||
//| def __enter__(self, ) -> Any:
|
||||
//| """No-op used by Context Managers."""
|
||||
//| ...
|
||||
//|
|
||||
// Provided by context manager helper.
|
||||
|
||||
//|def __exit__(self, ) -> Any:
|
||||
//|"""Automatically deinitializes the hardware when exiting a context. See
|
||||
//|:ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//|...
|
||||
//| def __exit__(self, ) -> Any:
|
||||
//| """Automatically deinitializes the hardware when exiting a context. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_audiobusio_i2sout_deinit(args[0]);
|
||||
|
@ -147,14 +152,15 @@ STATIC mp_obj_t audiobusio_i2sout_obj___exit__(size_t n_args, const mp_obj_t *ar
|
|||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(audiobusio_i2sout___exit___obj, 4, 4, audiobusio_i2sout_obj___exit__);
|
||||
|
||||
|
||||
//|def play(self, sample: Any, *, loop: Any = False) -> Any:
|
||||
//|"""Plays the sample once when loop=False and continuously when loop=True.
|
||||
//|Does not block. Use `playing` to block.
|
||||
//| def play(self, sample: Any, *, loop: Any = False) -> Any:
|
||||
//| """Plays the sample once when loop=False and continuously when loop=True.
|
||||
//| Does not block. Use `playing` to block.
|
||||
//|
|
||||
//|Sample must be an `audiocore.WaveFile`, `audiocore.RawSample`, or `audiomixer.Mixer`.
|
||||
//| Sample must be an `audiocore.WaveFile`, `audiocore.RawSample`, or `audiomixer.Mixer`.
|
||||
//|
|
||||
//| The sample itself should consist of 8 bit or 16 bit samples."""
|
||||
//| ...
|
||||
//|
|
||||
//|The sample itself should consist of 8 bit or 16 bit samples."""
|
||||
//|...
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj_play(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_sample, ARG_loop };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
|
@ -173,9 +179,10 @@ STATIC mp_obj_t audiobusio_i2sout_obj_play(size_t n_args, const mp_obj_t *pos_ar
|
|||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(audiobusio_i2sout_play_obj, 1, audiobusio_i2sout_obj_play);
|
||||
|
||||
//|def stop(self, ) -> Any:
|
||||
//|"""Stops playback."""
|
||||
//|...
|
||||
//| def stop(self, ) -> Any:
|
||||
//| """Stops playback."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj_stop(mp_obj_t self_in) {
|
||||
audiobusio_i2sout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -184,9 +191,9 @@ STATIC mp_obj_t audiobusio_i2sout_obj_stop(mp_obj_t self_in) {
|
|||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(audiobusio_i2sout_stop_obj, audiobusio_i2sout_obj_stop);
|
||||
|
||||
//|playing: Any =
|
||||
//|"""True when the audio sample is being output. (read-only)"""
|
||||
//|...
|
||||
//| playing: Any = ...
|
||||
//| """True when the audio sample is being output. (read-only)"""
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj_get_playing(mp_obj_t self_in) {
|
||||
audiobusio_i2sout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -201,9 +208,10 @@ const mp_obj_property_t audiobusio_i2sout_playing_obj = {
|
|||
(mp_obj_t)&mp_const_none_obj},
|
||||
};
|
||||
|
||||
//|def pause(self, ) -> Any:
|
||||
//|"""Stops playback temporarily while remembering the position. Use `resume` to resume playback."""
|
||||
//|...
|
||||
//| def pause(self, ) -> Any:
|
||||
//| """Stops playback temporarily while remembering the position. Use `resume` to resume playback."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj_pause(mp_obj_t self_in) {
|
||||
audiobusio_i2sout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -216,9 +224,10 @@ STATIC mp_obj_t audiobusio_i2sout_obj_pause(mp_obj_t self_in) {
|
|||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(audiobusio_i2sout_pause_obj, audiobusio_i2sout_obj_pause);
|
||||
|
||||
//|def resume(self, ) -> Any:
|
||||
//|"""Resumes sample playback after :py:func:`pause`."""
|
||||
//|...
|
||||
//| def resume(self, ) -> Any:
|
||||
//| """Resumes sample playback after :py:func:`pause`."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj_resume(mp_obj_t self_in) {
|
||||
audiobusio_i2sout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -231,9 +240,9 @@ STATIC mp_obj_t audiobusio_i2sout_obj_resume(mp_obj_t self_in) {
|
|||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(audiobusio_i2sout_resume_obj, audiobusio_i2sout_obj_resume);
|
||||
|
||||
//|paused: Any =
|
||||
//|"""True when playback is paused. (read-only)"""
|
||||
//|...
|
||||
//| paused: Any = ...
|
||||
//| """True when playback is paused. (read-only)"""
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_i2sout_obj_get_paused(mp_obj_t self_in) {
|
||||
audiobusio_i2sout_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
|
|
@ -36,57 +36,58 @@
|
|||
#include "shared-bindings/util.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
|
||||
//|class PDMIn:
|
||||
//|""".. currentmodule:: audiobusio
|
||||
//| class PDMIn:
|
||||
//| """.. currentmodule:: audiobusio
|
||||
//|
|
||||
//|:class:`PDMIn` -- Record an input PDM audio stream
|
||||
//|========================================================
|
||||
//| :class:`PDMIn` -- Record an input PDM audio stream
|
||||
//| ========================================================
|
||||
//|
|
||||
//|PDMIn can be used to record an input audio signal on a given set of pins."""
|
||||
//| PDMIn can be used to record an input audio signal on a given set of pins."""
|
||||
//|
|
||||
//|def __init__(self, clock_pin: microcontroller.Pin, data_pin: microcontroller.Pin, *, sample_rate: int = 16000, bit_depth: int = 8, mono: bool = True, oversample: int = 64, startup_delay: float = 0.11):
|
||||
//|"""Create a PDMIn object associated with the given pins. This allows you to
|
||||
//|record audio signals from the given pins. Individual ports may put further
|
||||
//|restrictions on the recording parameters. The overall sample rate is
|
||||
//|determined by `sample_rate` x ``oversample``, and the total must be 1MHz or
|
||||
//|higher, so `sample_rate` must be a minimum of 16000.
|
||||
//| def __init__(self, clock_pin: microcontroller.Pin, data_pin: microcontroller.Pin, *, sample_rate: int = 16000, bit_depth: int = 8, mono: bool = True, oversample: int = 64, startup_delay: float = 0.11):
|
||||
//| """Create a PDMIn object associated with the given pins. This allows you to
|
||||
//| record audio signals from the given pins. Individual ports may put further
|
||||
//| restrictions on the recording parameters. The overall sample rate is
|
||||
//| determined by `sample_rate` x ``oversample``, and the total must be 1MHz or
|
||||
//| higher, so `sample_rate` must be a minimum of 16000.
|
||||
//|
|
||||
//| :param ~microcontroller.Pin clock_pin: The pin to output the clock to
|
||||
//| :param ~microcontroller.Pin data_pin: The pin to read the data from
|
||||
//| :param int sample_rate: Target sample_rate of the resulting samples. Check `sample_rate` for actual value.
|
||||
//| Minimum sample_rate is about 16000 Hz.
|
||||
//| :param int bit_depth: Final number of bits per sample. Must be divisible by 8
|
||||
//| :param bool mono: True when capturing a single channel of audio, captures two channels otherwise
|
||||
//| :param int oversample: Number of single bit samples to decimate into a final sample. Must be divisible by 8
|
||||
//| :param float startup_delay: seconds to wait after starting microphone clock
|
||||
//| to allow microphone to turn on. Most require only 0.01s; some require 0.1s. Longer is safer.
|
||||
//| Must be in range 0.0-1.0 seconds."""
|
||||
//|
|
||||
//|:param ~microcontroller.Pin clock_pin: The pin to output the clock to
|
||||
//|:param ~microcontroller.Pin data_pin: The pin to read the data from
|
||||
//|:param int sample_rate: Target sample_rate of the resulting samples. Check `sample_rate` for actual value.
|
||||
//|Minimum sample_rate is about 16000 Hz.
|
||||
//|:param int bit_depth: Final number of bits per sample. Must be divisible by 8
|
||||
//|:param bool mono: True when capturing a single channel of audio, captures two channels otherwise
|
||||
//|:param int oversample: Number of single bit samples to decimate into a final sample. Must be divisible by 8
|
||||
//|:param float startup_delay: seconds to wait after starting microphone clock
|
||||
//|to allow microphone to turn on. Most require only 0.01s; some require 0.1s. Longer is safer.
|
||||
//|Must be in range 0.0-1.0 seconds."""
|
||||
//|...
|
||||
|
||||
//|Record 8-bit unsigned samples to buffer::
|
||||
//| """Record 8-bit unsigned samples to buffer::
|
||||
//|
|
||||
//|import audiobusio
|
||||
//|import board
|
||||
//| import audiobusio
|
||||
//| import board
|
||||
//|
|
||||
//|# Prep a buffer to record into
|
||||
//|b = bytearray(200)
|
||||
//|with audiobusio.PDMIn(board.MICROPHONE_CLOCK, board.MICROPHONE_DATA, sample_rate=16000) as mic:
|
||||
//|mic.record(b, len(b))
|
||||
//| # Prep a buffer to record into
|
||||
//| b = bytearray(200)
|
||||
//| with audiobusio.PDMIn(board.MICROPHONE_CLOCK, board.MICROPHONE_DATA, sample_rate=16000) as mic:
|
||||
//| mic.record(b, len(b))
|
||||
//|
|
||||
//|Record 16-bit unsigned samples to buffer::
|
||||
//| Record 16-bit unsigned samples to buffer::
|
||||
//|
|
||||
//|import audiobusio
|
||||
//|import board
|
||||
//| import audiobusio
|
||||
//| import board
|
||||
//|
|
||||
//| # Prep a buffer to record into. The array interface doesn't allow for
|
||||
//| # constructing with a set size so we append to it until we have the size
|
||||
//| # we want.
|
||||
//| b = array.array("H")
|
||||
//| for i in range(200):
|
||||
//| b.append(0)
|
||||
//| with audiobusio.PDMIn(board.MICROPHONE_CLOCK, board.MICROPHONE_DATA, sample_rate=16000, bit_depth=16) as mic:
|
||||
//| mic.record(b, len(b))"""
|
||||
//| ...
|
||||
//|
|
||||
//|# Prep a buffer to record into. The array interface doesn't allow for
|
||||
//|# constructing with a set size so we append to it until we have the size
|
||||
//|# we want.
|
||||
//|b = array.array("H")
|
||||
//|for i in range(200):
|
||||
//|b.append(0)
|
||||
//|with audiobusio.PDMIn(board.MICROPHONE_CLOCK, board.MICROPHONE_DATA, sample_rate=16000, bit_depth=16) as mic:
|
||||
//|mic.record(b, len(b))
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_pdmin_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_clock_pin, ARG_data_pin, ARG_sample_rate, ARG_bit_depth, ARG_mono, ARG_oversample, ARG_startup_delay };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
|
@ -138,9 +139,10 @@ STATIC mp_obj_t audiobusio_pdmin_make_new(const mp_obj_type_t *type, size_t n_ar
|
|||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//|def deinit(self, ) -> Any:
|
||||
//|"""Deinitialises the PDMIn and releases any hardware resources for reuse."""
|
||||
//|...
|
||||
//| def deinit(self, ) -> Any:
|
||||
//| """Deinitialises the PDMIn and releases any hardware resources for reuse."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_pdmin_deinit(mp_obj_t self_in) {
|
||||
audiobusio_pdmin_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
common_hal_audiobusio_pdmin_deinit(self);
|
||||
|
@ -153,14 +155,16 @@ STATIC void check_for_deinit(audiobusio_pdmin_obj_t *self) {
|
|||
raise_deinited_error();
|
||||
}
|
||||
}
|
||||
//|def __enter__(self, ) -> Any:
|
||||
//|"""No-op used by Context Managers."""
|
||||
//|...
|
||||
//| def __enter__(self, ) -> Any:
|
||||
//| """No-op used by Context Managers."""
|
||||
//| ...
|
||||
//|
|
||||
// Provided by context manager helper.
|
||||
|
||||
//|def __exit__(self, ) -> Any:
|
||||
//|"""Automatically deinitializes the hardware when exiting a context."""
|
||||
//|...
|
||||
//| def __exit__(self, ) -> Any:
|
||||
//| """Automatically deinitializes the hardware when exiting a context."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_pdmin_obj___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_audiobusio_pdmin_deinit(args[0]);
|
||||
|
@ -169,17 +173,18 @@ STATIC mp_obj_t audiobusio_pdmin_obj___exit__(size_t n_args, const mp_obj_t *arg
|
|||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(audiobusio_pdmin___exit___obj, 4, 4, audiobusio_pdmin_obj___exit__);
|
||||
|
||||
|
||||
//|def record(self, destination: Any, destination_length: Any) -> Any:
|
||||
//|"""Records destination_length bytes of samples to destination. This is
|
||||
//|blocking.
|
||||
//| def record(self, destination: Any, destination_length: Any) -> Any:
|
||||
//| """Records destination_length bytes of samples to destination. This is
|
||||
//| blocking.
|
||||
//|
|
||||
//|An IOError may be raised when the destination is too slow to record the
|
||||
//|audio at the given rate. For internal flash, writing all 1s to the file
|
||||
//|before recording is recommended to speed up writes.
|
||||
//| An IOError may be raised when the destination is too slow to record the
|
||||
//| audio at the given rate. For internal flash, writing all 1s to the file
|
||||
//| before recording is recommended to speed up writes.
|
||||
//|
|
||||
//| :return: The number of samples recorded. If this is less than ``destination_length``,
|
||||
//| some samples were missed due to processing time."""
|
||||
//| ...
|
||||
//|
|
||||
//|:return: The number of samples recorded. If this is less than ``destination_length``,
|
||||
//|some samples were missed due to processing time."""
|
||||
//|...
|
||||
STATIC mp_obj_t audiobusio_pdmin_obj_record(mp_obj_t self_obj, mp_obj_t destination, mp_obj_t destination_length) {
|
||||
audiobusio_pdmin_obj_t *self = MP_OBJ_TO_PTR(self_obj);
|
||||
check_for_deinit(self);
|
||||
|
@ -210,10 +215,10 @@ STATIC mp_obj_t audiobusio_pdmin_obj_record(mp_obj_t self_obj, mp_obj_t destinat
|
|||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_3(audiobusio_pdmin_record_obj, audiobusio_pdmin_obj_record);
|
||||
|
||||
//|sample_rate: Any =
|
||||
//|"""The actual sample_rate of the recording. This may not match the constructed
|
||||
//|sample rate due to internal clock limitations."""
|
||||
//|...
|
||||
//| sample_rate: Any = ...
|
||||
//| """The actual sample_rate of the recording. This may not match the constructed
|
||||
//| sample rate due to internal clock limitations."""
|
||||
//|
|
||||
STATIC mp_obj_t audiobusio_pdmin_obj_get_sample_rate(mp_obj_t self_in) {
|
||||
audiobusio_pdmin_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "shared-bindings/audiobusio/I2SOut.h"
|
||||
#include "shared-bindings/audiobusio/PDMIn.h"
|
||||
|
||||
//| :mod:`audiobusio` --- Support for audio input and output over digital bus
|
||||
//| """:mod:`audiobusio` --- Support for audio input and output over digital bus
|
||||
//| =========================================================================
|
||||
//|
|
||||
//| .. module:: audiobusio
|
||||
|
@ -56,7 +56,7 @@
|
|||
//|
|
||||
//| All libraries change hardware state and should be deinitialized when they
|
||||
//| are no longer needed. To do so, either call :py:meth:`!deinit` or use a
|
||||
//| context manager.
|
||||
//| context manager."""
|
||||
//|
|
||||
|
||||
STATIC const mp_rom_map_elem_t audiobusio_module_globals_table[] = {
|
||||
|
|
|
@ -35,45 +35,52 @@
|
|||
#include "shared-bindings/audiocore/RawSample.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
|
||||
//|class RawSample:
|
||||
//|""".. currentmodule:: audiocore
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//| class RawSample:
|
||||
//| """.. currentmodule:: audiocore
|
||||
//|
|
||||
//|:class:`RawSample` -- A raw audio sample buffer
|
||||
//|========================================================
|
||||
//| :class:`RawSample` -- A raw audio sample buffer
|
||||
//| ========================================================
|
||||
//|
|
||||
//|An in-memory sound sample"""
|
||||
//| An in-memory sound sample"""
|
||||
//|
|
||||
//|def __init__(self, buffer: array.array, *, channel_count: int = 1, sample_rate: int = 8000):
|
||||
//|"""Create a RawSample based on the given buffer of signed values. If channel_count is more than
|
||||
//|1 then each channel's samples should alternate. In other words, for a two channel buffer, the
|
||||
//|first sample will be for channel 1, the second sample will be for channel two, the third for
|
||||
//|channel 1 and so on.
|
||||
//| def __init__(self, buffer: array.array, *, channel_count: int = 1, sample_rate: int = 8000):
|
||||
//| """Create a RawSample based on the given buffer of signed values. If channel_count is more than
|
||||
//| 1 then each channel's samples should alternate. In other words, for a two channel buffer, the
|
||||
//| first sample will be for channel 1, the second sample will be for channel two, the third for
|
||||
//| channel 1 and so on.
|
||||
//|
|
||||
//|:param array.array buffer: An `array.array` with samples
|
||||
//|:param int channel_count: The number of channels in the buffer
|
||||
//|:param int sample_rate: The desired playback sample rate
|
||||
//| :param array.array buffer: An `array.array` with samples
|
||||
//| :param int channel_count: The number of channels in the buffer
|
||||
//| :param int sample_rate: The desired playback sample rate
|
||||
//|
|
||||
//|Simple 8ksps 440 Hz sin wave::
|
||||
//| Simple 8ksps 440 Hz sin wave::
|
||||
//|
|
||||
//|import audiocore
|
||||
//|import audioio
|
||||
//|import board
|
||||
//|import array
|
||||
//|import time
|
||||
//|import math
|
||||
//| import audiocore
|
||||
//| import audioio
|
||||
//| import board
|
||||
//| import array
|
||||
//| import time
|
||||
//| import math
|
||||
//|
|
||||
//|# Generate one period of sine wav.
|
||||
//|length = 8000 // 440
|
||||
//|sine_wave = array.array("h", [0] * length)
|
||||
//|for i in range(length):
|
||||
//|sine_wave[i] = int(math.sin(math.pi * 2 * i / 18) * (2 ** 15))
|
||||
//| # Generate one period of sine wav.
|
||||
//| length = 8000 // 440
|
||||
//| sine_wave = array.array("h", [0] * length)
|
||||
//| for i in range(length):
|
||||
//| sine_wave[i] = int(math.sin(math.pi * 2 * i / 18) * (2 ** 15))
|
||||
//|
|
||||
//| dac = audioio.AudioOut(board.SPEAKER)
|
||||
//| sine_wave = audiocore.RawSample(sine_wave)
|
||||
//| dac.play(sine_wave, loop=True)
|
||||
//| time.sleep(1)
|
||||
//| dac.stop()"""
|
||||
//| ...
|
||||
//|
|
||||
//|dac = audioio.AudioOut(board.SPEAKER)
|
||||
//|sine_wave = audiocore.RawSample(sine_wave)
|
||||
//|dac.play(sine_wave, loop=True)
|
||||
//|time.sleep(1)
|
||||
//|dac.stop()"""
|
||||
//|...
|
||||
STATIC mp_obj_t audioio_rawsample_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_buffer, ARG_channel_count, ARG_sample_rate };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
|
@ -105,9 +112,10 @@ STATIC mp_obj_t audioio_rawsample_make_new(const mp_obj_type_t *type, size_t n_a
|
|||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//|def deinit(self, ) -> Any:
|
||||
//|"""Deinitialises the AudioOut and releases any hardware resources for reuse."""
|
||||
//|...
|
||||
//| def deinit(self, ) -> Any:
|
||||
//| """Deinitialises the AudioOut and releases any hardware resources for reuse."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audioio_rawsample_deinit(mp_obj_t self_in) {
|
||||
audioio_rawsample_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
common_hal_audioio_rawsample_deinit(self);
|
||||
|
@ -121,15 +129,17 @@ STATIC void check_for_deinit(audioio_rawsample_obj_t *self) {
|
|||
}
|
||||
}
|
||||
|
||||
//|def __enter__(self, ) -> Any:
|
||||
//|"""No-op used by Context Managers."""
|
||||
//|...
|
||||
//| def __enter__(self, ) -> Any:
|
||||
//| """No-op used by Context Managers."""
|
||||
//| ...
|
||||
//|
|
||||
// Provided by context manager helper.
|
||||
|
||||
//|def __exit__(self, ) -> Any:
|
||||
//|"""Automatically deinitializes the hardware when exiting a context. See
|
||||
//|:ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//|...
|
||||
//| def __exit__(self, ) -> Any:
|
||||
//| """Automatically deinitializes the hardware when exiting a context. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audioio_rawsample_obj___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_audioio_rawsample_deinit(args[0]);
|
||||
|
@ -137,12 +147,12 @@ STATIC mp_obj_t audioio_rawsample_obj___exit__(size_t n_args, const mp_obj_t *ar
|
|||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(audioio_rawsample___exit___obj, 4, 4, audioio_rawsample_obj___exit__);
|
||||
|
||||
//|sample_rate: Any =
|
||||
//|"""32 bit value that dictates how quickly samples are played in Hertz (cycles per second).
|
||||
//|When the sample is looped, this can change the pitch output without changing the underlying
|
||||
//|sample. This will not change the sample rate of any active playback. Call ``play`` again to
|
||||
//|change it."""
|
||||
//|...
|
||||
//| sample_rate: Any = ...
|
||||
//| """32 bit value that dictates how quickly samples are played in Hertz (cycles per second).
|
||||
//| When the sample is looped, this can change the pitch output without changing the underlying
|
||||
//| sample. This will not change the sample rate of any active playback. Call ``play`` again to
|
||||
//| change it."""
|
||||
//|
|
||||
STATIC mp_obj_t audioio_rawsample_obj_get_sample_rate(mp_obj_t self_in) {
|
||||
audioio_rawsample_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
|
|
@ -33,43 +33,45 @@
|
|||
#include "shared-bindings/util.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
|
||||
//|class WaveFile:
|
||||
//|""".. currentmodule:: audiocore
|
||||
//| class WaveFile:
|
||||
//| """.. currentmodule:: audiocore
|
||||
//|
|
||||
//|:class:`WaveFile` -- Load a wave file for audio playback
|
||||
//|========================================================
|
||||
//| :class:`WaveFile` -- Load a wave file for audio playback
|
||||
//| ========================================================
|
||||
//|
|
||||
//|A .wav file prepped for audio playback. Only mono and stereo files are supported. Samples must
|
||||
//|be 8 bit unsigned or 16 bit signed. If a buffer is provided, it will be used instead of allocating
|
||||
//|an internal buffer."""
|
||||
//|def __init__(self, file: typing.BinaryIO, buffer: bytearray):
|
||||
//|"""Load a .wav file for playback with `audioio.AudioOut` or `audiobusio.I2SOut`.
|
||||
//| A .wav file prepped for audio playback. Only mono and stereo files are supported. Samples must
|
||||
//| be 8 bit unsigned or 16 bit signed. If a buffer is provided, it will be used instead of allocating
|
||||
//| an internal buffer."""
|
||||
//|
|
||||
//|:param typing.BinaryIO file: Already opened wave file
|
||||
//|:param bytearray buffer: Optional pre-allocated buffer, that will be split in half and used for double-buffering of the data. If not provided, two 512 byte buffers are allocated internally.
|
||||
//| def __init__(self, file: typing.BinaryIO, buffer: bytearray):
|
||||
//| """Load a .wav file for playback with `audioio.AudioOut` or `audiobusio.I2SOut`.
|
||||
//|
|
||||
//| :param typing.BinaryIO file: Already opened wave file
|
||||
//| :param bytearray buffer: Optional pre-allocated buffer, that will be split in half and used for double-buffering of the data. If not provided, two 512 byte buffers are allocated internally.
|
||||
//|
|
||||
//|
|
||||
//|Playing a wave file from flash::
|
||||
//| Playing a wave file from flash::
|
||||
//|
|
||||
//|import board
|
||||
//|import audiocore
|
||||
//|import audioio
|
||||
//|import digitalio
|
||||
//| import board
|
||||
//| import audiocore
|
||||
//| import audioio
|
||||
//| import digitalio
|
||||
//|
|
||||
//|# Required for CircuitPlayground Express
|
||||
//|speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
|
||||
//|speaker_enable.switch_to_output(value=True)
|
||||
//| # Required for CircuitPlayground Express
|
||||
//| speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
|
||||
//| speaker_enable.switch_to_output(value=True)
|
||||
//|
|
||||
//|data = open("cplay-5.1-16bit-16khz.wav", "rb")
|
||||
//|wav = audiocore.WaveFile(data)
|
||||
//|a = audioio.AudioOut(board.A0)
|
||||
//| data = open("cplay-5.1-16bit-16khz.wav", "rb")
|
||||
//| wav = audiocore.WaveFile(data)
|
||||
//| a = audioio.AudioOut(board.A0)
|
||||
//|
|
||||
//| print("playing")
|
||||
//| a.play(wav)
|
||||
//| while a.playing:
|
||||
//| pass
|
||||
//| print("stopped")"""
|
||||
//| ...
|
||||
//|
|
||||
//|print("playing")
|
||||
//|a.play(wav)
|
||||
//|while a.playing:
|
||||
//|pass
|
||||
//|print("stopped")"""
|
||||
//|...
|
||||
STATIC mp_obj_t audioio_wavefile_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
|
||||
mp_arg_check_num(n_args, kw_args, 1, 2, false);
|
||||
|
||||
|
@ -92,9 +94,9 @@ STATIC mp_obj_t audioio_wavefile_make_new(const mp_obj_type_t *type, size_t n_ar
|
|||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//|def deinit(self, ) -> Any:
|
||||
//|"""Deinitialises the WaveFile and releases all memory resources for reuse."""
|
||||
//|...
|
||||
//| def deinit(self, ) -> Any:
|
||||
//| """Deinitialises the WaveFile and releases all memory resources for reuse."""
|
||||
//| ...
|
||||
STATIC mp_obj_t audioio_wavefile_deinit(mp_obj_t self_in) {
|
||||
audioio_wavefile_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
common_hal_audioio_wavefile_deinit(self);
|
||||
|
@ -108,15 +110,17 @@ STATIC void check_for_deinit(audioio_wavefile_obj_t *self) {
|
|||
}
|
||||
}
|
||||
|
||||
//|def __enter__(self, ) -> Any:
|
||||
//|"""No-op used by Context Managers."""
|
||||
//|...
|
||||
//| def __enter__(self, ) -> Any:
|
||||
//| """No-op used by Context Managers."""
|
||||
//| ...
|
||||
//|
|
||||
// Provided by context manager helper.
|
||||
|
||||
//|def __exit__(self, ) -> Any:
|
||||
//|"""Automatically deinitializes the hardware when exiting a context. See
|
||||
//|:ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//|...
|
||||
//| def __exit__(self, ) -> Any:
|
||||
//| """Automatically deinitializes the hardware when exiting a context. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t audioio_wavefile_obj___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_audioio_wavefile_deinit(args[0]);
|
||||
|
@ -124,11 +128,11 @@ STATIC mp_obj_t audioio_wavefile_obj___exit__(size_t n_args, const mp_obj_t *arg
|
|||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(audioio_wavefile___exit___obj, 4, 4, audioio_wavefile_obj___exit__);
|
||||
|
||||
//|sample_rate: Any =
|
||||
//|"""32 bit value that dictates how quickly samples are loaded into the DAC
|
||||
//|in Hertz (cycles per second). When the sample is looped, this can change
|
||||
//|the pitch output without changing the underlying sample."""
|
||||
//|...
|
||||
//| sample_rate: Any = ...
|
||||
//| """32 bit value that dictates how quickly samples are loaded into the DAC
|
||||
//| in Hertz (cycles per second). When the sample is looped, this can change
|
||||
//| the pitch output without changing the underlying sample."""
|
||||
//|
|
||||
STATIC mp_obj_t audioio_wavefile_obj_get_sample_rate(mp_obj_t self_in) {
|
||||
audioio_wavefile_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -151,9 +155,9 @@ const mp_obj_property_t audioio_wavefile_sample_rate_obj = {
|
|||
(mp_obj_t)&mp_const_none_obj},
|
||||
};
|
||||
|
||||
//|bits_per_sample: Any =
|
||||
//|"""Bits per sample. (read only)"""
|
||||
//|...
|
||||
//| bits_per_sample: Any = ...
|
||||
//| """Bits per sample. (read only)"""
|
||||
//|
|
||||
STATIC mp_obj_t audioio_wavefile_obj_get_bits_per_sample(mp_obj_t self_in) {
|
||||
audioio_wavefile_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
@ -167,10 +171,9 @@ const mp_obj_property_t audioio_wavefile_bits_per_sample_obj = {
|
|||
(mp_obj_t)&mp_const_none_obj,
|
||||
(mp_obj_t)&mp_const_none_obj},
|
||||
};
|
||||
|
||||
//|channel_count: Any =
|
||||
//|"""Number of audio channels. (read only)"""
|
||||
//|...
|
||||
//| channel_count: Any = ...
|
||||
//| """Number of audio channels. (read only)"""
|
||||
//|
|
||||
STATIC mp_obj_t audioio_wavefile_obj_get_channel_count(mp_obj_t self_in) {
|
||||
audioio_wavefile_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "shared-bindings/audiocore/WaveFile.h"
|
||||
//#include "shared-bindings/audiomixer/Mixer.h"
|
||||
|
||||
//| :mod:`audiocore` --- Support for audio samples and mixer
|
||||
//| """:mod:`audiocore` --- Support for audio samples and mixer
|
||||
//| ========================================================
|
||||
//|
|
||||
//| .. module:: audiocore
|
||||
|
@ -50,7 +50,7 @@
|
|||
//| :maxdepth: 3
|
||||
//|
|
||||
//| RawSample
|
||||
//| WaveFile
|
||||
//| WaveFile"""
|
||||
//|
|
||||
|
||||
STATIC const mp_rom_map_elem_t audiocore_module_globals_table[] = {
|
||||
|
|
Loading…
Reference in New Issue