The noises feature doesn't work for me anymore in Mojave.
This is the gist of what I'm doing in my code, it used to work in 10.11 but I upgraded to 10.14 and the callbacks no longer fire.
local noiseCallback = {
[1] = function() hs.alert.show("start!") end,
[2] = function() hs.alert.show("finish!") end,
[3] = function() hs.alert.show("you did it!") end,
}
noisesListener = hs.noises.new(function(noiseType)
noiseCallback[noiseType]()
end)
local mod = {}
function mod.start()
noisesListener:start()
end
function mod.stop()
noisesListener:stop()
end
hs.hotkey.bind(cah, "y", function()
hs.alert.show("listening")
noisesListener:start()
end)
Thanks
Maybe this is something @trishume can help with?
Darn. I haven't upgraded to Mojave yet but I will soon and then I might be able to reproduce this and possibly fix.
When I first tried this feature, I thought it wasn't very useful, I could only produce the 'sssss' sound, so how useful could it be if I could only trigger one thing with it?
But then I realized since there's a start and end event, I could track the duration and do something useful with it. So I started building a morse code thingy where longer hissing meant a different event and you could associate a hissing pattern to an action.
So I built most of the initial logic for my idea and then sadly upgraded to mojave so I never finished the actual thing I imagined. Recently I got that itch again, so I gave it a UI that I'm triggering with a modifier key.
I'm patient, but I really want to try hissing at this UI. I've been dreaming about this for a year.
Huh, I used to use that module some a couple of machines ago, but hadn't really used it recently... I can confirm that it no longer seems to work in Mojave.
Taking a quick look at the Security and Privacy settings panel, I'm going to guess that Hammerspoon needs to be given access to the microphone, but I don't see a way to add it manually, so we'd need to find a way to trigger the request... @cmsj or @latenitefilms, any thoughts? @trishume did you ever get a chance to try it out in Mojave?
I've never actually tried hs.noises, but...
In theory, macOS should automatically prompt the user for access if Hammerspoon requires microphone access. It's possible that if you've updated your machine from High Sierra to Mojave, that something could have gone funky with permissions? You could try resetting your microphone permissions by triggering tccutil reset Microphone from Terminal.
If you're running Hammerspoon from Xcode, I believe you must have the NSMicrophoneUsageDescription key in the Info.plist for the notification to actually trigger. I've added a pull request here: #2172
It might also be worth adding a function for requestAccessForMediaType:completionHandler: to hs.sound?
When executing the following code with the #2172 pull request code, I get the attached notification.
noises = hs.noises.new(function(result)
print(string.format("Result: %s", result))
end):start()

...which seems to fix the issue:
2019-09-08 20:30:39: Welcome to the Hammerspoon Console!
You can run any Lua code in here.
2019-09-08 20:30:42: -- Lazy extension loading enabled
2019-09-08 20:30:42: -- Loading ~/.hammerspoon/init.lua
2019-09-08 20:30:42: init.lua loaded
2019-09-08 20:30:42: -- Done.
> noises = hs.noises.new(function(result)
print(string.format("Result: %s", result))
end):start()
2019-09-08 20:32:03: -- Loading extension: noises
2019-09-08 20:33:04: Result: 1
2019-09-08 20:33:04: Result: 2
2019-09-08 20:33:39: Result: 1
2019-09-08 20:33:40: Result: 2
2019-09-08 20:33:40: Result: 1
2019-09-08 20:33:40: Result: 2
2019-09-08 20:33:41: Result: 1
2019-09-08 20:33:41: Result: 2
You can also check out https://talonvoice.com/ which is a scriptable input system which I worked with to integrate my noise recognizers, and then the author of Talon optimized them to use Accelerate.framework SIMD functions so it uses even less CPU.
@trishume - I am actually very interested in the idea of voice coding. I recently remembered that 2013 pycon video and I just did a couple of days research about what's available these days. I really liked the idea of connecting it to HS and doing all the automation in lua, but it seems like all these systems have their own scripting engines.
talonvoice looks cool, I love the idea of combining the hisses with regular voice commands. I'll check it out. I wonder how usable it is without dragon.
Thanks
I tried talonvoice, it's an amazing tool.
I managed to send the hiss events back to hammerspoon from talonvoice. It's a bit awkward because it communicates via hammerspoon:// urls which feels a bit slow, but it works.
I recommend trying to do everything within Talon, it's very powerful and all the hot reloading and things will work better and quicker that way. Talon can do basically everything Hammerspoon can, although it may not be documented and you have to look at examples or ask in the Talon Slack.
Talon can do basically everything Hammerspoon can
I am too invested in HS, it's not even funny how reliant I am on it. I can't imagine going back and rewriting everything in python.
Most of the things I need are not time sensitive, so I can accept some slowness due to talon>HS communication. I wonder if an applescript API in HS would have been better than hammerspoon:// urls for communication.
can confirm that 0.9.76 fixes the problem, thanks!
Most helpful comment
Darn. I haven't upgraded to Mojave yet but I will soon and then I might be able to reproduce this and possibly fix.