View Full Version : Kenku FM support
sedgetone
June 22nd, 2023, 20:59
I’m sure l’m not alone in using Kenku FM with Discord. Having VLC support is useful but it would be nice to have a modern player that is a bit more fully featured. We’d still be able to use Syrinscape with but also gain access to many other sound sources. Please up vote my request.
https://fgapp.idea.informer.com/proj/fgapp?ia=141016
Jiminimonka
June 22nd, 2023, 23:25
Voted, Kenku FM is very useful.
DaddieCat
June 23rd, 2023, 03:14
Voted, I agree.
Lo Zeno
June 23rd, 2023, 09:27
I would love it: there's one campaign I run where Syrinscape is not the ideal choice because it's missing sounds and moods that would be theme-appropriate, and instead with Kenku I can use a sound library that I built over the years specifically for that game.
Since Kenku can be controlled via HTTP calls just like Syrinscape, it should be at least possible to integrate it in the new sound context feature:
https://www.kenku.fm/docs/using-kenku-remote
Rainbird
June 23rd, 2023, 11:47
Voted for :-)
Gwydion
June 23rd, 2023, 12:03
Question for folks here. I ike kenku but still struggle with quality of discord audio even with the stereo sound. Also find that sounds can cut out a bit for me using it. It might be that I run everything off one laptop and I stream and have multiple sound programs I'm running. Probably just taxing my computer too much. Do others run into similar issues? Right now I'm using vdo.ninja but I keep testing different solutions.
sedgetone
June 23rd, 2023, 12:41
I find it works pretty well on my Windows desktop PC, quality is sometimes a bit hit or miss from my Mac laptop though. I really can't say I've had any problems with it from a desktop machine.
Lo Zeno
June 23rd, 2023, 12:46
Question for folks here. I ike kenku but still struggle with quality of discord audio even with the stereo sound. Also find that sounds can cut out a bit for me using it. It might be that I run everything off one laptop and I stream and have multiple sound programs I'm running. Probably just taxing my computer too much. Do others run into similar issues? Right now I'm using vdo.ninja but I keep testing different solutions.
In my case it works rather nicely, the sound quality is pretty good to my untrained ear and I don't notice any sound cut off. What are the specs of your laptop?
Another thing to consider might be the bandwidth, if your internet connection does not have enough bandwidth to manage streaming the sound, using Discord, and running FGU at the same time it might end up cutting sounds every now and then.
Gwydion
June 23rd, 2023, 12:54
In my case it works rather nicely, the sound quality is pretty good to my untrained ear and I don't notice any sound cut off. What are the specs of your laptop?
Another thing to consider might be the bandwidth, if your internet connection does not have enough bandwidth to manage streaming the sound, using Discord, and running FGU at the same time it might end up cutting sounds every now and then.
Cool. Bandwidth shouldn't be a big issue. I have 1,000 down and 20 up and use an ethernet connection.
My laptop isn't a potato but not top of the line. Intel i7-9750H @2.60 GHz, 16 gb RAM.
Lo Zeno
June 23rd, 2023, 14:38
Yeah your bandwidth is definitely fine. Honestly your hardware should be fine too for all I know, your CPU is a 6 core with max clock at 4.50 GHz... I assume you already tried shutting down all unnecessary programs and stuff in your system tray when using Kenku FM?
Gwydion
June 23rd, 2023, 14:59
Thanks. Yeah, I do. However, with me streaming and running syrinscape and usually at least one other audio program I try to look at usage and I think it is just everything combined. One of these days I'll offload streaming to a separate pc or something.
bayne7400
June 23rd, 2023, 15:16
The big issue with this is the type of request the web interface uses. VLC operates on GET requests. FG can handle this and once it gets to VLC that program does the work to make the action happen. Kenku uses PUT requests. This can't be done with an extension.
Edit: as far as my rudimentary understanding goes.
Lo Zeno
June 23rd, 2023, 15:23
The big issue with this is the type of request the web interface uses. VLC operates on GET requests. FG can handle this and once it gets to VLC that program does the work to make the action happen. Kenku uses PUT requests. This can't be done with an extension.
Edit: as far as my rudimentary understanding goes.
Pure curiosity on my part: what is it that makes it not possible? is there no way to attach a request body to an http request? Or is it because there is no direct access to an http client and the lua functions that wrap it don't expose post/put/delete methods? or something else entirely?
cas206
June 23rd, 2023, 15:33
I have used Kenku and it's been great...when it works. Maybe someone will see this thread and make a module to make this happen. However, I can understand why Smiteworks might not want to touch this. First, Kenku is a side project from the Owlbear Rodeo dev's and only maintained as time allows. Currently, it only works about half the time I go to use it. Secondly, Discord has a habit of shutting down projects that can pipe music through their service. This could cause big problems between Discord and the music industry. So Kenku currently lives on the sufferance of Discord.
Saagael
June 23rd, 2023, 16:37
Pure curiosity on my part: what is it that makes it not possible? is there no way to attach a request body to an http request? Or is it because there is no direct access to an http client and the lua functions that wrap it don't expose post/put/delete methods? or something else entirely?
You are correct. The only access extension devs have to web requests is through the openURL function, which takes in only two parameters: the url, and a callback function. The request loads the url, and when that completes it calls the callback function. As far as I'm aware there's no access to the underlying http client, and no way to interact with the request outside of specifying a url and a callback function.
Moon Wizard
June 23rd, 2023, 19:28
This is actually controlled by the Unity game engine. We can only make URL calls. There is no access to specific URL server type behaviors, such as headers for HTTP requests.
Regards,
JPG
sedgetone
June 24th, 2023, 11:33
Such a shame, I thought cURL support was in LUA. As for the reliability of Kenku FM, I've honestly never had a problem with the app.
In fact I don't use Kenku FM as a bot in Discord, I use Voice Meeter Banana and in in Windows 10 Sounds panel route the output of Kenku FM application to Banana's AUX in. Then in Discord I set my mic in to be the output of Banana. I use ASIO as my audio backend for Banana with Cantabile as a VST host; this is so I can run my mic through Reapers reafir in subtract mode to reduce background noise like my PCs fan and add some compression or other effects to my mic. This way I don't have to setup multiple bots for different servers, all my sound sources are essentially the mic input to Discord. My players use push-to-talk and my mic is always open. Not the most straightforward of setups but it works for me and my crew.
Lo Zeno
June 26th, 2023, 16:42
This is actually controlled by the Unity game engine. We can only make URL calls. There is no access to specific URL server type behaviors, such as headers for HTTP requests.
Regards,
JPG
My knowledge of Unity is very limited, so if I'm mistaken please feel free to correct me, but I remember that in UnityEngine.Networking the UnityWebRequest class provides methods to call get, put, post, head, delete HTTP verbs, `SetRequestHeader` to set headers, and more. Am I remembering wrong, or maybe mixing frameworks in my memory?
Moon Wizard
June 26th, 2023, 17:10
You are right. I had to review the code which was written some time ago to refresh my memory on how this stuff works.
The original implementation of our URL handling was done using Application.openURL. We don't use the UnityEngine.Networking library at all, but we do make some limited use of System.Net.WebClient. It looks like the WebClient class does support headers, so that might be a possibility in the future with some API changes. It's not something we would be implementing right now.
Regards,
JPG
Lo Zeno
June 26th, 2023, 17:15
You are right. I had to review the code which was written some time ago to refresh my memory on how this stuff works.
The original implementation of our URL handling was done using Application.openURL. We don't use the UnityEngine.Networking library at all, but we do make some limited use of System.Net.WebClient. It looks like the WebClient class does support headers, so that might be a possibility in the future with some API changes. It's not something we would be implementing right now.
Regards,
JPG
If you can use .NET objects without limitations, System.Net.Http.HttpClient would be an even better choice (newer API, supports asynchronous calls, arguably more flexible than WebClient)
Moon Wizard
June 26th, 2023, 17:34
But not all URLs are HTTP server scheme. Specifically, file:// is used quite a lot; and I know that custom ones have been used before, such as syrinscape-online://. It's best to use a generic class when possible.
EDIT: It's actually not clear what the best object class is for this scenario. There is no clear information in the few searches I just did that specifies which object class to use for non-http URLs, or whether that matters. When we get to that point, we'll probably use whichever is the most readable code-wise.
Regards,
JPG
Lo Zeno
June 27th, 2023, 11:27
But not all URLs are HTTP server scheme. Specifically, file:// is used quite a lot; and I know that custom ones have been used before, such as syrinscape-online://. It's best to use a generic class when possible.
EDIT: It's actually not clear what the best object class is for this scenario. There is no clear information in the few searches I just did that specifies which object class to use for non-http URLs, or whether that matters. When we get to that point, we'll probably use whichever is the most readable code-wise.
Regards,
JPG
Just for the sake of conversation, I don't know all the needs of FGU so I just compared to what I've done in the past which is wrap every URL in a System.Uri (https://learn.microsoft.com/en-us/dotnet/api/system.uri?view=net-7.0) object, then based on the Uri.Scheme property I'd decide how to manage it (whether via HttpClient, SmtpClient, FtpWebRequest, or FileWebRequest). The only reason I suggested HttpClient is because WebClient is a legacy object that is considered deprecated since .net 6, I wasn't going much further than that. I don't think .NET has a generic class to handle all URLs including custom schemes, it looks like their approach is to have specific clients for each protocol used. bUnity's Application.openUrl, from what I remember, tried to be a wrapper around all these implementations (plus the implementations of other platforms like Android and iOS), selecting the right one for you based on the scheme, too bad it's limited to uri-only requests, no headers, verbs or request bodies.
Powered by vBulletin® Version 4.2.1 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.