Skip to content
Advertisement

How to change VLC-python output device?

In my project, I need to get sound from a radio stream URL and play it. But it needs to be played in a specific output device called “VB-Cable Input (Virtual Audio Cable)”.

I couldn’t find a way to do it. This is my current code:

import vlc
import time

url = "https://shout25.crossradio.com.br:18156/1"

# Create VLC instance, media player and media
instance = vlc.Instance()
player = instance.media_player_new()
media = instance.media_new(url)
player.set_media(media)

# Get list of output devices
def get_device():
    mods = player.audio_output_device_enum()
    if mods:
        mod = mods
        while mod:
            mod = mod.contents
            # If VB-Cable is found, return it's module and device id
            if 'CABLE Input (VB-Audio Virtual Cable)' in str(mod.description):
                device = mod.device
                module = mod.description
                return device,module
            mod = mod.next

# Sets the module and device id to VB-Cable           
device,module = get_device()

# Sets VB-Cable as output device
player.audio_output_device_set(device,module)

# Trying the function @Random Davis stated, but results still the same
vlc.libvlc_audio_output_device_set(player, module, device)

# It should return VB-Cable as current audio output, but None is returned...
print(player.audio_output_device_get())

# Audio plays in default output device, which is incorrect
player.play()   
time.sleep(60)

I searched through StackOverflow and the VLC documentation, but couldn’t get the result I expected, I believe I’m using the functions in the wrong way.

Advertisement

Answer

After some research, I found this implementation of audio_output_device_set() in GitHub

As @RandomDavis said, the problem was indeed in this function. All I had to do was switching the first argument to None and leave the rest as it is.

This is the correct code:

# Sets VB-Cable as output device
player.audio_output_device_set(None, device)

Still not quite sure why inserting any values other than None makes the function invalid. But the problem is now solved.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement