… nothing gets played though. I’m guessing I have some option incorrect? I need to use something other than :binary maybe since these are plain strings?
Does the protocol expect lines that are separated by newline \n? Netcat sends the newline character over (if you press enter) and the Elixir code sends the string but not the newline.
Does sending "noteon 0 40 100\n" from Elixir work? That’s one difference I can think of.
If you need to receive line-based data see also the Erlang docs for inet:setopts, specifically {packet, line}. It only applies to received packets.