@@ -25,15 +25,32 @@ AudioFlinger provides:
2525
2626## Quick Start
2727
28+ ### Initialization
29+
30+ AudioFlinger uses a singleton pattern. Initialize it once at startup with your hardware configuration:
31+
32+ ``` python
33+ from mpos.audio.audioflinger import AudioFlinger
34+
35+ # Initialize with I2S and buzzer (typical Fri3d badge setup)
36+ i2s_pins = {' sck' : 2 , ' ws' : 47 , ' sd' : 16 , ' sd_in' : 15 }
37+ buzzer = machine.PWM(machine.Pin(46 ))
38+ AudioFlinger(i2s_pins = i2s_pins, buzzer_instance = buzzer)
39+
40+ # After initialization, use class methods directly (no .get() needed)
41+ AudioFlinger.play_wav(" music.wav" )
42+ AudioFlinger.set_volume(70 )
43+ ```
44+
2845### Playing WAV Files
2946
3047``` python
3148from mpos import Activity
32- import mpos.audio.audioflinger as AudioFlinger
49+ from mpos.audio.audioflinger import AudioFlinger
3350
3451class MusicPlayerActivity (Activity ):
3552 def onCreate (self ):
36- # Play a music file
53+ # Play a music file (class method - no .get() needed)
3754 success = AudioFlinger.play_wav(
3855 " M:/sdcard/music/song.wav" ,
3956 stream_type = AudioFlinger.STREAM_MUSIC ,
@@ -53,6 +70,8 @@ class MusicPlayerActivity(Activity):
5370### Playing RTTTL Ringtones
5471
5572``` python
73+ from mpos.audio.audioflinger import AudioFlinger
74+
5675# Play notification sound via buzzer
5776rtttl = " Nokia:d=4,o=5,b=225:8e6,8d6,8f#,8g#,8c#6,8b,d,8p,8b,8a,8c#,8e"
5877AudioFlinger.play_rtttl(
@@ -75,6 +94,8 @@ Nokia:d=4,o=5,b=225:8e6,8d6,8f#,8g#
7594### Volume Control
7695
7796``` python
97+ from mpos.audio.audioflinger import AudioFlinger
98+
7899# Set volume (0-100)
79100AudioFlinger.set_volume(70 )
80101
@@ -97,7 +118,7 @@ AudioFlinger supports recording audio from an I2S microphone to WAV files.
97118### Basic Recording
98119
99120``` python
100- import mpos.audio.audioflinger as AudioFlinger
121+ from mpos.audio.audioflinger import AudioFlinger
101122
102123# Check if microphone is available
103124if AudioFlinger.has_microphone():
@@ -149,7 +170,7 @@ if AudioFlinger.is_playing():
149170
150171``` python
151172from mpos import Activity
152- import mpos.audio.audioflinger as AudioFlinger
173+ from mpos.audio.audioflinger import AudioFlinger
153174import lvgl as lv
154175import time
155176
@@ -233,6 +254,8 @@ AudioFlinger implements a 3-tier priority-based audio focus system inspired by A
233254### Example: Priority in Action
234255
235256``` python
257+ from mpos.audio.audioflinger import AudioFlinger
258+
236259# Start playing music (priority 0)
237260AudioFlinger.play_wav(" music.wav" , stream_type = AudioFlinger.STREAM_MUSIC )
238261
@@ -300,7 +323,7 @@ Audio device preference is configured in the Settings app under **"Advanced Sett
300323
301324``` python
302325from mpos import Activity
303- import mpos.audio.audioflinger as AudioFlinger
326+ from mpos.audio.audioflinger import AudioFlinger
304327import lvgl as lv
305328
306329class SimpleMusicPlayerActivity (Activity ):
@@ -472,6 +495,8 @@ Check if buzzer is available for RTTTL playback.
4724954 . Use equal or higher priority stream type
473496
474497``` python
498+ from mpos.audio.audioflinger import AudioFlinger
499+
475500# Check if playback was rejected
476501success = AudioFlinger.play_wav(" sound.wav" , stream_type = AudioFlinger.STREAM_MUSIC )
477502if not success:
@@ -582,25 +607,32 @@ ffmpeg -i input.wav -acodec pcm_s16le -ar 22050 -ac 1 output.wav
582607** Possible causes:**
583608
5846091 . ** No microphone available**
585- ``` python
586- if not AudioFlinger.has_microphone():
587- print (" No microphone on this device" )
588- ```
610+ ``` python
611+ from mpos.audio.audioflinger import AudioFlinger
612+
613+ if not AudioFlinger.has_microphone():
614+ print (" No microphone on this device" )
615+ ```
589616
5906172 . ** Currently playing audio**
591- ``` python
592- # I2S can only be TX or RX, not both
593- if AudioFlinger.is_playing():
594- AudioFlinger.stop()
595- time.sleep_ms(100 ) # Wait for cleanup
596- AudioFlinger.record_wav(" recording.wav" )
597- ```
618+ ```python
619+ from mpos.audio.audioflinger import AudioFlinger
620+ import time
621+
622+ # I2S can only be TX or RX, not both
623+ if AudioFlinger.is_playing():
624+ AudioFlinger.stop()
625+ time.sleep_ms(100 ) # Wait for cleanup
626+ AudioFlinger.record_wav(" recording.wav" )
627+ ```
598628
5996293 . ** Already recording**
600- ``` python
601- if AudioFlinger.is_recording():
602- print (" Already recording" )
603- ```
630+ ```python
631+ from mpos.audio.audioflinger import AudioFlinger
632+
633+ if AudioFlinger.is_recording():
634+ print (" Already recording" )
635+ ```
604636
6056374 . ** Wrong board** - Waveshare doesn' t have a microphone
606638
@@ -635,6 +667,8 @@ ffmpeg -i input.wav -acodec pcm_s16le -ar 44100 -ac 2 output.wav
635667AudioFlinger runs in a separate thread, so playback doesn' t block the UI:
636668
637669```python
670+ from mpos.audio.audioflinger import AudioFlinger
671+
638672# This doesn't block - returns immediately
639673AudioFlinger.play_wav(" long_song.wav" , stream_type = AudioFlinger.STREAM_MUSIC )
640674
@@ -663,6 +697,8 @@ On desktop builds (Linux/macOS), AudioFlinger provides simulated recording for t
663697This allows testing the Sound Recorder app and other recording features without hardware.
664698
665699```python
700+ from mpos.audio.audioflinger import AudioFlinger
701+
666702# Desktop simulation is automatic when machine.I2S is not available
667703# The generated WAV file contains a 440Hz tone
668704AudioFlinger.record_wav(" test.wav" , duration_ms = 5000 )
0 commit comments