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.