I had this problem, too. I was trying to record my phone calls with OBS. After fiddling around with various audio sources, without paying too much attention, I was able to record the call. This wasn't much use to me because the audio didn't play through the speakers, plus for some reason placing the call disabled microphone input. At the time I regarded these as two separate issues.
I realized that this proves that the problem originates not on the Android side, nor in the Bluetooth transmission of the audio to Linux. The problem lies somewhere between PulseAudio and the speakers.
I investigated further and noticed something. When I played music from the phone, OBS detected it as audio output. But when I placed a phone call, OBS detected it as audio input. This explained both of my problems!
What I did was set OBS to output my microphone:
- Connect your smartphone and computer with Bluetooth.
- Install OBS:
sudo apt install obs-studio
.
- In the "Sources" pane at the bottom of the screen, click the "+" sign to add a new audio source.
- Select either "Audio Capture Device (ALSA)" or "Audio Input Capture (PulseAudio)".
- You don't need to change anything on the "Create/Select Source" window that pops up, just click OK.
- You don't need to change anything on the "Properties" window that pops up, just click OK.
- A new set of bars will appear in the "Mixer" panel, the visualization showing that it is capturing your computer's microphone if you have one. Turn the volume down using the blue slider underneath it; you don't want feedback when we start outputting the microphone.
- Click the settings gear next to the Audio Capture Device entry.
- select "Advanced Audio Properties" on the menu.
- Place a call from your smartphone.
- In the window that pops up, select the "Audio Monitoring" drop down menu for "Audio Capture Device (ALSA)" and set it to "Monitor and Output". I found it works most consistently when the call is placed before the setting is changed.
- The speakers should now start playing the call! Should. This doesn't always work. Sometimes I had to remove and re-add the audio source to make it work.
There is probably a better way to do this with VLC streaming.
This isn't the end of the story if you want to record the call, because the call still disables the microphone, so you can't record yourself speaking. I will update this answer if I figure out how to do that.
Best Answer
Actually using rsync over MTP/usb
It's easier than everyone is saying, first notice that when GVFS mounts the MTP mount it'll be available under. You can force this by opening the phone up in a graphical file-browser (thunar/nautilus/etc)
go in there. Assuming you have one mtp device, this should work:
Find where you want to transfer the files too, and then rsync them to it
Rsync options
--inplace
: I highly suggest using--inplace
without which mtp may want to copy the file a new, and then rename it to the old one. That may result in copying the file to the SD card twice: once for the mtp transfer to the SD card, and another time because the MTP driver may not support (mv), it may (cp/rm) under the hood to be safe.--verbose
,--progress
,--recursive
but they're pretty self-documenting.--omit-dir-times
--no-perms
are required because mtp doesn't support that.