SamDel / ChromeCast-Desktop-Audio-Streamer

Stream the sound of your desktop to your Chromecast Audio device
MIT License
416 stars 30 forks source link

Identify the song that is playing #33

Open SamDel opened 5 years ago

SamDel commented 5 years ago

Here's another topic for a future enhancement: Why not incorporate the audio technology that can identify the song that is playing, and display it on the Home Screen? Several Apps do this now: Shazam, SoundHound, and Google Sound Search (https://assistant.google.com/services/a/uid/00000024216d4bb8?hl=en-US ), to name a few. Then there's databases like 'Musipedia' (https://www.musipedia.org/ ), as well as Audio Fingerprinting (https://www.acrcloud.com/identify-songs-music-recognition-online/ ) ... Perhaps one of these services could be integrated with DesktopAudioStreamer to provide a similar result... (Food for thought)

Interestingly, when I now ask Google: "Hey, Google, What song is playing?" Google responds: "You're listening to 'Sandpiper'."... However, when Google is playing from an external source ("Hey, Google, Play sum Jazz.") , the same question results in Google properly identifying and saying the current song and artist...

So at this point, it seems that Google is not aware of the audio content in the DesktopAudioStream ('Sandpiper')... MAYBE, if any of the above references can be integrated, the App could update the screen with the song title (and maybe the artist as well), so it would be displayed along with the App name, For example, the screen would display something like: (" 'Time After Time' by 'Miles Davis' on 'Sandpiper'." -- see image below), AND you could ask Google 'What's playing?', and it would respond audibly with: "You're listening to 'Time After Time' by 'Miles Davis' on 'Sandpiper'."

Title ArtistIdea

Originally posted by @FA-Bubba in https://github.com/SamDel/ChromeCast-Desktop-Audio-Streamer/issues/29#issuecomment-472436110


On the id issue, the song name could be retrieved by this without trying to ID the song: https://www.last.fm/api/show/user.getRecentTracks - however I looked around a bit and unfortunately all the various last.fm scrobblers, official and non-official seem to be either dead or on their way out. On the recognition front, Cortana song ID service is also discontinued and Shazam isn't supporting PC anymore, arccloud & audd are payola...

dday4thedeceiver commented 5 years ago

Assuming all/most audio players will have some UI element indicating song title, It might be simplest to maintain a catalog of most popular players and their respective elements, and simply read off of those.

Another idea (to make this a bit more flexible) is to have this functionality as a separate project and just implement a simple facility in Sandpiper to read the song title, perhaps by monitoring some text file for changes.

Or the basic functionality could be built in so if this file doesn't exist internal facility could be used. The internal facility could perhaps be user-configurable, removing the need to maintain the catalog.... a list of window class, process and a regexp to extract the song name from the title.

If this is done, a nice extension would be to write the song title (and artist?) to another file so it can be read and used by other programs (for example to announce the title)

SamDel commented 5 years ago

The only time you can send a song title to a device is when you load the stream. For this application you'll normally start the stream once, and play the same stream for hours.

I didn't find a solution yet to change the title on the device periodically. Restarting the stream for each song will create a drop-out.

FA-Bubba commented 5 years ago

I haven't received any posts since May 7... Has there been no activity, or am I not being copied?

FA-Bubba commented 5 years ago

A new issue: While the Streamer is active, we'll ask Google a question, and if the answer is a YouTube clip, Google plays it, but the Streamer interrupts it and resumes streaming the music before the YouTube clip has finished.

FA-Bubba commented 5 years ago

I have confirmed that the Streamer casts in stereo -- I finally pulled out an old set of bookshelf speakers that have a 3.5mm input port, and connected them with a Chromecast Audio. Playing a Left/Right Channel clip (https://www.youtube.com/watch?v=j-ToyylwoHE ) confirmed correct stereo separation.

This will enable me to complete my multi-room stereo setup (not withstanding that issue that Google has ceased the Chromecast Audio product -- I have a few, but am now looking for a substitute for the last 4 rooms.)

SamDel commented 5 years ago

By default you get notifications from threads you're participating in. If you want to get notifications of all threads you have to click the watch button on top. You can change your notification settings here.

The application should not interrupt Youtube, it should not start the stream again until the Youtube clip stopped playing (when the statustext the device returns is empty). Can you post the logs?

Thanks for confirming!

FA-Bubba commented 5 years ago

I cleared-out the log since the Streamer has been running a long time. I then asked Google to play a YouTube video; Google presented me with a few selections, and I tapped one. It started to play, then it was abruptly cut off, and Streamer restarted.

Log-2019-06-19-v2-1-4-StreamCutsOffYouTube.TXT

SamDel commented 5 years ago

Thanks. It's a bug. You were playing a group. Then you asked Google to play a Youtube video on an individual device.

The 'Automatically restart ...' option only checked the status of the group before restarting. In this situation the status of the group didn't change, only the status of the individual device changed to 'Youtube'.

In 2.3.1 the 'Automatically restart ...' option also checks the status of all individual devices in a group, before restarting the group. Can you try?

FA-Bubba commented 5 years ago

Thank you... I loaded v 2.3.1, and the sequence worked as expected: I asked Google to play a video, and it played until it ended (or I told Google to "Stop playing the video"), after a short pause, the audio stream resumed.

Prior to updating the App, I was running v 2.1.4, and had not received any notifications of new versions. Your comment to me above alerted me to install v2.3.1...

I thought I was receiving ALL communications about version updates, but I guess not.

SamDel commented 5 years ago

Great!

For the notifications you should click the 'Watch' button: image

FA-Bubba commented 5 years ago

By the way, something I hinted at a few posts ago is that Google officially ceased producing Chromecast Audio devices. This occurred in January, and existing inventories are disappearing, but they can still be found. I really needed the Chromecast Audio device to fulfill my multi-room audio, and have managed to order what I believe are enough devices for my home...

To be clear, Google is still producing the Google Home devices, but I wanted (needed) true separation of left & right channels which Chromecast Audio does quite well.

I am interested to learn if (how) Google will replace that capability...

FA-Bubba commented 5 years ago

Thank you!... I fixed my "Watch" setting, and am now catching-up on all the posts since March!

FA-Bubba commented 5 years ago

FYI, I added a new pair of speakers and a new Chromecast Audio. I connected them, added the Chromecast to my Google Home, Named them and added them to the appropriate Speaker Groups.

At first they were not in sync with the other speakers, which was disappointing. I tried a few things, and it resolved, so ALL speakers are again in sync. In case someone else has a similar experience, here is what I did that resulted in the new additions getting in sync (I'm not sure if any ONE of these would have done it, or if ALL of these actions need to be done):

  1. I shut down the Desktop Audio Streamer App.
  2. I rebooted my PC
  3. I powered-off the new Chromecast Audio device & powered it back up. (This should also update the Firmware, if needed, about a 10-minute process).
  4. I restarted the Desktop Audio Streamer. -- The new speakers were in sync with all of the other speakers.