# OnMessage(RealtimeMessageContext, Pipe, Message)

> Called immediately from RealtimeContext.SendMessage when a message was sent to this ProcessorInstance on the real-time side.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Audio](/engine/6000.7/script-reference/unityengine/audio.md)
* **Assembly:** UnityEngine.AudioModule

```csharp
ProcessorInstance.Response OnMessage(RealtimeMessageContext context, ProcessorInstance.Pipe pipe, ProcessorInstance.Message message)
```

### Parameters

**** (\[RealtimeMessageContext]\(/engine/6000.7/script-reference/unityengine/audio/realtimemessagecontext)): A [RealtimeMessageContext](/engine/6000.7/script-reference/unityengine/audio/realtimemessagecontext.md) giving cross-thread data communication via `pipe` (but no nested processing).**** (\[Pipe]\(/engine/6000.7/script-reference/unityengine/audio/processorinstance/pipe)): Cross-thread communications pipe.**** (\[Message]\(/engine/6000.7/script-reference/unityengine/audio/processorinstance/message)): The message someone sent to you through [RealtimeContext.SendMessage](/engine/6000.7/script-reference/unityengine/audio/realtimecontext/sendmessage.md). The contents are sent by reference, so you can modify them and the sender will see the changes.

### Returns

| Type                                                                                        | Description                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Response](/engine/6000.7/script-reference/unityengine/audio/processorinstance/response.md) | [ProcessorInstance.Response.Handled](/engine/6000.7/script-reference/unityengine/audio/processorinstance/response/handled.md) if this [ProcessorInstance](/engine/6000.7/script-reference/unityengine/audio/processorinstance.md) acknowledged and processed the message, [ProcessorInstance.Response.Unhandled](/engine/6000.7/script-reference/unityengine/audio/processorinstance/response/unhandled.md) if not or ignored. |

### Remarks

This is the real-time counterpart of [ProcessorInstance.IControl\<TRealtime>.OnMessage](/engine/6000.7/script-reference/unityengine/audio/processorinstance/icontrol1/onmessage.md). It runs synchronously on the real-time thread, within the originating [RealtimeContext](/engine/6000.7/script-reference/unityengine/audio/realtimecontext.md).

This has a default implementation returning [ProcessorInstance.Response.Unhandled](/engine/6000.7/script-reference/unityengine/audio/processorinstance/response/unhandled.md), so existing [ProcessorInstance.IRealtime](/engine/6000.7/script-reference/unityengine/audio/processorinstance/irealtime.md) implementations remain source-compatible; override it to handle real-time messages. Since overriding default methods isn't positively constrained by the compiler, you may find it helpful to implement such interface methods [explicitly](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/interfaces/explicit-interface-implementation)

Additional Resources: [RealtimeContext.SendMessage](/engine/6000.7/script-reference/unityengine/audio/realtimecontext/sendmessage.md)
