Skip to content

Error in AudioRecorder control example #3938

Description

@nascin

Duplicate Check

Describe the bug

When I run the example code and start recording the audio, the event takes a while to occur. When I click stop, it feels like recording has started. Finally, several error messages and depreciation warnings.

Code sample

Code
import flet as ft

async def main(page: ft.Page):
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
    page.appbar = ft.AppBar(title=ft.Text("Audio Recorder"), center_title=True)

    path = "test-audio-file.wav"

    async def handle_start_recording(e):
        print(f"StartRecording: {path}")
        await audio_rec.start_recording_async(path)

    async def handle_stop_recording(e):
        output_path = await audio_rec.stop_recording_async()
        print(f"StopRecording: {output_path}")
        if page.web and output_path is not None:
            await page.launch_url_async(output_path)

    async def handle_list_devices(e):
        devices = await audio_rec.get_input_devices_async()
        print(devices)

    async def handle_has_permission(e):
        try:
            print(f"HasPermission: {await audio_rec.has_permission_async()}")
        except Exception as e:
            print(e)

    async def handle_pause(e):
        print(f"isRecording: {await audio_rec.is_recording_async()}")
        if await audio_rec.is_recording_async():
            await audio_rec.pause_recording_async()

    async def handle_resume(e):
        print(f"isPaused: {await audio_rec.is_paused_async()}")
        if await audio_rec.is_paused_async():
            await audio_rec.resume_recording_async()

    async def handle_audio_encoding_test(e):
        for i in list(ft.AudioEncoder):
            print(f"{i}: {await audio_rec.is_supported_encoder_async(i)}")

    async def handle_state_change(e):
        print(f"State Changed: {e.data}")

    audio_rec = ft.AudioRecorder(
        audio_encoder=ft.AudioEncoder.WAV,
        on_state_changed=handle_state_change,
    )
    page.overlay.append(audio_rec)
    await page.update_async()

    await page.add_async(
        ft.ElevatedButton("Start Audio Recorder", on_click=handle_start_recording),
        ft.ElevatedButton("Stop Audio Recorder", on_click=handle_stop_recording),
        ft.ElevatedButton("List Devices", on_click=handle_list_devices),
        ft.ElevatedButton("Pause Recording", on_click=handle_pause),
        ft.ElevatedButton("Resume Recording", on_click=handle_resume),
        ft.ElevatedButton("Test AudioEncodings", on_click=handle_audio_encoding_test),
        ft.ElevatedButton("Has Permission", on_click=handle_has_permission),
    )


ft.app(main)

To reproduce

Run with the command flet run -r -d;
I click on start recording;
I click on stop recording.

Expected behavior

No response

Screenshots / Videos

Captures

[Upload media here]

Operating System

Windows

Operating system details

Windows 11

Flet version

0.24.1

Regression

I'm not sure / I don't know

Suggestions

No response

Logs

Logs
(_env) PS C:\NASCIN\flet\project-0109-sofie> flet run -r -d
C:\NASCIN\flet\project-0109-sofie\main.py:108: DeprecationWarning: update_async() is deprecated in version 0.21.0 and will be removed in version 0.26.0. Use Page.update() method instead.
  await page.update_async()
C:\NASCIN\flet\project-0109-sofie\main.py:110: DeprecationWarning: add_async() is deprecated in version 0.21.0 and will be removed in version 0.26.0. Use Page.add() method instead.
  await page.add_async(
C:\NASCIN\flet\project-0109-sofie\main.py:68: DeprecationWarning: start_recording_async() is deprecated in version 0.21.0 and will be removed in version 0.26.0. Use start_recording() method instead.
  await audio_rec.start_recording_async(path)
StartRecording: test-audio-file.wav
Task exception was never retrieved
future: <Task finished name='Task-15' coro=<__run_socket_server.<locals>.on_event() done, defined at C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_runtime\app.py:217> exception=TimeoutError("Timeout waiting for invokeMethod start_recording({'outputPath': 'test-audio-file.wav'}) call")>
Traceback (most recent call last):
  File "C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_runtime\app.py", line 219, in on_event
    await conn.sessions[e.sessionID].on_event_async(
  File "C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_core\page.py", line 906, in on_event_async
    await handler(ce)
  File "C:\NASCIN\flet\project-0109-sofie\main.py", line 68, in handle_start_recording
    await audio_rec.start_recording_async(path)
  File "C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_core\audio_recorder.py", line 104, in start_recording_async
    return self.start_recording(output_path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_core\audio_recorder.py", line 90, in start_recording
    started = self.invoke_method(
              ^^^^^^^^^^^^^^^^^^^
  File "C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_core\control.py", line 340, in invoke_method
    return self.__page._invoke_method(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\NASCIN\flet\project-0109-sofie\_env\Lib\site-packages\flet_core\page.py", line 1343, in _invoke_method
    raise TimeoutError(
TimeoutError: Timeout waiting for invokeMethod start_recording({'outputPath': 'test-audio-file.wav'}) call
State Changed: stopped
StopRecording: None
C:\NASCIN\flet\project-0109-sofie\main.py:108: DeprecationWarning: update_async() is deprecated in version 0.21.0 and will be removed in version 0.26.0. Use Page.update() method instead.
  await page.update_async()

Additional details

No response

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions