My initial intention is to remote control my Electone in my home from my school. That requires streaming Electone's sound to my PC at school.

The remote part is pretty easy: send a Raspberry Pi with a Cirrus Logic Audio Card to home and tell my mom to connect Electone's Line-out with Raspberry Pi's Line-in. But how to stream the audio input from Line-in to my working PC?

I don't expect the latency allows me to do real-time recording as my home is 2 thousand kilometers away. So I don't need any fancy stuff to reduce latency. At the beginning, I was thinking of using PulseAudio which has network forwarding capability. But later I found PulseAudio is cumbersome to config and poorly documented. What's worse, it doesn't support compressing. That's to say, a 192kB/s network stream would chock up the poor internet in my home. And I don't really need real-time performance it might have emphasized.

Then I found the non-commercial, open-source, absolutely-free, cross-platform VLC media player to be an extremely versatile streaming tool. If you have been using it for a while, you might have already found "Stream... (Ctrl+S)" under the menu "Media", but it's for streaming video along with audio. To stream audio only, the way is a little bit twisted.

First, open Playlist. This can be achieved via "View" -> "Playlist" or Ctrl + L. Then find "Devices" -> "Audio Capture" from the list on the left. Then all possible audio source is shown on the right.

Playlist Window Showing All Audio Capture Devices

Playlist Window Showing All Audio Capture Devices

Two things should be mentioned:

  1. It seems to have only PulseAudio interface, as I can see nothing before I launch PulseAudio server.
  2. Titles begin with "Monitor" is equivalent to "Stereo Mixing" in Windows sound control panel, i.e. what you are hearing on that output.

Right click on the input to be streamed, select "Stream..." in the context menu. Click "Next" in Stream Output window.

From "Destination Setup" window you can add stream destinations. I have HTTP tested so far and It worked great. You should be able to save the audio as a file at the same time by adding a "File" destination. Let's assume you added an HTTP destination with port 8080 and root path ("/"). Click "Next" when you are all set.

You definitely want "Active Transcoding" enabled here as uncompressed audio takes up a lot of bandwidth. Select an audio preset or optionally make some customization and click "Next". Then click "Stream".

Now take out another computer, launch VLC media player, click "Media" -> "Open Network Stream... (Ctrl_N)" and enter following address:

http://<ip_of_your_streaming_pc>:8080/

Click "Play" and you should hear the sound with an about-2-seconds delay. That's the result of caches on both PCs adding up. You can reduce it in some detailed settings.

You can use your imagination to take the vantage of this feature. Wireless home speaker system, for example.