Estou tentando usar o mpg123 para reproduzir um arquivo mp3, mas estou com dificuldades para fazer isso em uma GPU.
Ao fazer muita pesquisa, o comando mais próximo que encontrei para minha exigência foi:
mplayer -vo vdpau and -vc ffh264vdpau, ffmpeg12vdpau, ffmwmv3vdpau, ffvc1vdpau -ao alsa filename.mp4
Mas depois de pesquisar alguns desses comandos, percebi que eles são voltados para a decodificação de vídeo.
Eu tentei executar esse comando adaptando-o para o mpg123 da seguinte maneira (só para ver qual resposta eu obteria):
mpg123 -vo vdpau and -vc ffh264vdpau, ffmpeg12vdpau, ffmwmv3vdpau, ffvc1vdpau -ao alsa /root/Downloads/Traintoleave.mp3
O seguinte é a saída que recebi:
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.23.8; written and copyright by Michael Hipp and others
free software (LGPL) without any warranty but with best wishes
Decoder: x86-64 (AVX)
Trying output module: vdpau, device: <nil>
[src/libout123/legacy_module.c:40] error: Unable to open requested module 'vdpau'.
[src/libout123/legacy_module.c:42] error: The only available statically compiled module is 'alsa'.
[src/libout123/libout123.c:432] error: Found no driver out of [vdpau] working with device <default>.
main: [src/mpg123.c:333] error: out123 error 3: failure loading driver module
Eu ainda não entendo como posso usar o mpg123 para fazer o arquivo de áudio rodar na minha GPU NVIDIA e monitorar seu tempo de execução.
Qualquer ajuda ou conselho será muito apreciado.
EDITAR:
Eu executei o seguinte comando no terminal:
sudo aplay -L
e obteve a seguinte saída:
default
Default
front:CARD=PCH,DEV=0
HDA Intel PCH, ALC280 Analog
Front speakers
surround40:CARD=PCH,DEV=0
HDA Intel PCH, ALC280 Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
HDA Intel PCH, ALC280 Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
HDA Intel PCH, ALC280 Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
HDA Intel PCH, ALC280 Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
HDA Intel PCH, ALC280 Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
hdmi:CARD=NVidia,DEV=0
HDA NVidia, HDMI 0
HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
HDA NVidia, HDMI 1
HDMI Audio Output
No entanto, esta é apenas uma informação para aplay e não mpg123. Eu encontrei de outra fonte que o aplay é usado para reproduzir apenas arquivos wav.
Graças a outra pergunta do stackoverflow, consegui acompanhar com êxito os IDs do meu dispositivo. Eu corri o comando sudo aplay -l
e recebi a seguinte saída:
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC280 Analog [ALC280 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
Eu usei esta informação para reproduzir um arquivo mp3 usando mpg123 digitando o seguinte comando:
mpg123 -D hw:1,3 sample.mp3
Isso me deu a seguinte saída:
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.23.8; written and copyright by Michael Hipp and others
free software (LGPL) without any warranty but with best wishes
Invalid shared memory segment size
Invalid shared memory segment size
Terminal control enabled, press 'h' for listing of keys and functions.
Playing MPEG stream 1 of 1: sample.mp3 ...
Invalid shared memory segment size
MPEG 1.0 L III cbr128 44100 stereo
Invalid shared memory segment size
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7246:(snd_pcm_recover) underrun occured
[0:06] Decoding of sample.mp3 finished.
Não sei se esse arquivo de áudio foi reproduzido na GPU ou em outro processador. Como posso confirmar que este arquivo foi reproduzido na GPU?
EDITAR:
O VLC pode ser usado para decodificar áudio usando o poder da GPU? Eu tenho a idéia deste link, mas não tenho certeza disso: link