10 Play Audio Files

From Waveshare Wiki
Jump to: navigation, search

Play Audio Files

For security reasons, you don't have direct access to audio devices through JupyterLab (environmental limitations), and we don't have a code block for users to run.

The program here comes from the audio_ctrl.py of the main program of the product, and you can refer to the code here to understand how the main program of the product implements the audio file playback function.

Functions related to audio playback in the main program of the product

There is a folder called sounds in the main folder of the product, and there are many subfolders in this folder: connected, others, recv_new_cmd, robot_started, searching_for_target, target_detected, target_locked.

In the default program we provide, there is only one audio file in connected and one in each robot_started.

When the main program of the robot is running, it will automatically play an audio file within a robot_started.

When a client uses a browser to connect to this WEB application, it will automatically randomly play an audio file within the connected.

You can put custom audio files in these folders as voice packs to customize your product.

import pygame # import pygame library for audio playback 
import random # import random library for random selection of audio files 
import yaml # import yaml library for reading configuration files 
import os # import os library for file operations 
import threading # Import the threading library for multithreading

# Get the configuration file 
curpath = os.path.realpath(__file__) # Get the absolute path of the current script 
thisPath = os.path.dirname(curpath) # Get the directory where the current script is located 
with open(thisPath + '/config.yaml', 'r') as yaml_file: # Open the configuration file 
    config = yaml.safe_load(yaml_file) # Load configuration files using yaml library 

# Initialize pygame.mixer and set the default volume for audio output 
pygame.mixer.init() 
pygame.mixer.music.set_volume(config['audio_config']['default_volume'])

# Create an event object that controls audio playback 
play_audio_event = threading. Event()

# Read the minimum playback interval from the config file 
min_time_bewteen_play = config['audio_config']['min_time_bewteen_play']

# Define the function to play audio 
def play_audio(input_audio_file): 
    try: 
       pygame.mixer.music.load(input_audio_file) # Load the audio file 
       pygame.mixer.music.play() # Play audio 
    except: 
       play_audio_event.clear() # Clear the event flag when an error occurs 
       return 
    while pygame.mixer.music.get_busy(): # Wait for audio playback to complete 
       pass 
    time.sleep(min_time_bewteen_play) # Wait for minimum playback interval
    play_audio_event.clear() # Clear event

# Define the function to play random audio 
def play_random_audio(input_dirname, force_flag): 
    if play_audio_event.is_set() and not force_flag: 
       return 
    # Get all audio files in the specified directory 
    audio_files = [f for f in os.listdir(current_ path + "/sounds/" + input_dirname) if f.endswith((".mp3", ".wav")))] 
    # Randomly select an audio file from the list of audio files 
    audio_file = random.choice(audio_files) 
    play_audio_event.set() # Set up the event 
    # Create a thread to play the audio 
    audio_ thread = threading. Thread(target=play_audio, args=(current_path + "/sounds/" + input_dirname + "/" + audio_file,)) 
    audio_thread.start() # Start the thread

# Define the thread function to play audio 
def play_audio_thread(input_file): 
    if play_audio_event.is_set(): # Return if the event has already been set
       return 
    play_audio_event.set()  # Set the event 
    # Create a thread to play audio 
    audio_thread = threading. Thread(target=play_audio, args=(input_file,)) 
    audio_thread.start() # Start the thread

# Define the function to play the specified file 
def play_file(audio_file): 
    audio_file = current_path + "/sounds/" + audio_file # Build the full path of the audio file 
    play_audio_thread(audio_file) # Play the audio in a new thread

# Define the function to set the audio volume 
def set_audio_volume(input_volume): 
    input_volume = float(input_volume) # Convert the input volume to floating-point number 
    if input_volume > 1: # If the volume is greater than 1, set it to 1 
       input_volume = 1 
    elif input_volume < 0: # If the volume is less than 0, set to 0 
       input_volume = 0 
    pygame.mixer.music.set_volume(input_volume) # Set the volume

# Define a function to set the minimum playback interval 
def set_min_time_between(input_time): 
    global min_time_bewteen_play # Use the global variable 
    min_time_bewteen_play = input_time # Set the minimum playback interval