Case
sendspin-go -> sendspin-dotnet
Start the server first, then the client. The client discovers or looks up the server, initiates the WebSocket connection, advertises PCM as its only supported audio format, streams audio derived from almost_silent.flac, and compares canonical PCM hashes.
Server
sendspin-go
Client
sendspin-dotnet
Status
Passed
PCM hashes match exactly
Inspection
Summaries, logs, and builds
Matrix result
RAW{
"case_dir": "artifacts/results/data/macos__client-initiated-pcm__sendspin-go__to__sendspin-dotnet",
"client_exit_code": 0,
"client_impl": "sendspin-dotnet",
"reason": "PCM hashes match exactly",
"scenario_id": "client-initiated-pcm",
"server_exit_code": 0,
"server_impl": "sendspin-go",
"status": "passed"
}Server summary (JSON)
RAW{
"audio": {
"bit_depth": 16,
"channels": 1,
"clip_seconds": 5,
"duration_seconds": 5,
"fixture": "/Users/runner/work/conformance/conformance/repos/sendspin-cli/tests/fixtures/almost_silent.flac",
"frame_count": 40000,
"sample_rate": 8000,
"sent_audio_chunk_count": 100,
"sent_encoded_byte_count": 80000,
"sent_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e"
},
"client": {
"client_id": "sendspin-dotnet-client-id",
"name": "sendspin-dotnet-client",
"supported_roles": [
"player@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "sendspin-go",
"initiator_role": "client",
"peer_hello": {
"payload": {
"artwork@v1_support": {
"channels": [
{
"format": "jpeg",
"media_height": 256,
"media_width": 256,
"source": "album"
}
]
},
"client_id": "sendspin-dotnet-client-id",
"device_info": {
"manufacturer": "Sendspin Conformance",
"product_name": "Conformance Dotnet Client",
"software_version": "0.1.0"
},
"name": "sendspin-dotnet-client",
"player@v1_support": {
"buffer_capacity": 2000000,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
]
},
"supported_roles": [
"player@v1"
],
"version": 1
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "client-initiated-pcm",
"server_id": "sendspin-go-server",
"server_name": "sendspin-go server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
}Server log
RAW{
"audio": {
"bit_depth": 16,
"channels": 1,
"clip_seconds": 5,
"duration_seconds": 5,
"fixture": "/Users/runner/work/conformance/conformance/repos/sendspin-cli/tests/fixtures/almost_silent.flac",
"frame_count": 40000,
"sample_rate": 8000,
"sent_audio_chunk_count": 100,
"sent_encoded_byte_count": 80000,
"sent_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"source_flac_sha256": "8fdda8244e318c63cd8b699fe461cd7cdddbb729327a0ba00d1bfdbe2192fe17",
"source_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e"
},
"client": {
"client_id": "sendspin-dotnet-client-id",
"name": "sendspin-dotnet-client",
"supported_roles": [
"player@v1"
]
},
"discovery_method": "registry_advertised",
"implementation": "sendspin-go",
"initiator_role": "client",
"peer_hello": {
"payload": {
"artwork@v1_support": {
"channels": [
{
"format": "jpeg",
"media_height": 256,
"media_width": 256,
"source": "album"
}
]
},
"client_id": "sendspin-dotnet-client-id",
"device_info": {
"manufacturer": "Sendspin Conformance",
"product_name": "Conformance Dotnet Client",
"software_version": "0.1.0"
},
"name": "sendspin-dotnet-client",
"player@v1_support": {
"buffer_capacity": 2000000,
"supported_commands": [
"volume",
"mute"
],
"supported_formats": [
{
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
]
},
"supported_roles": [
"player@v1"
],
"version": 1
},
"type": "client/hello"
},
"preferred_codec": "pcm",
"role": "server",
"scenario_id": "client-initiated-pcm",
"server_id": "sendspin-go-server",
"server_name": "sendspin-go server",
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
}
Client summary (JSON)
RAW{
"audio": {
"audio_chunk_count": 100,
"received_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"received_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"received_sample_count": 40000
},
"client_id": "sendspin-dotnet-client-id",
"client_name": "sendspin-dotnet-client",
"implementation": "sendspin-dotnet",
"initiator_role": "client",
"peer_hello": {
"active_roles": [
"player@v1"
],
"connection_reason": "playback",
"name": "sendspin-go server",
"server_id": "sendspin-go-server",
"version": 1
},
"preferred_codec": "pcm",
"reason": null,
"role": "client",
"scenario_id": "client-initiated-pcm",
"server": {
"connection_reason": "playback",
"server_id": "sendspin-go-server",
"server_name": "sendspin-go server"
},
"status": "ok",
"stream": {
"bit_depth": 16,
"channels": 1,
"codec": "pcm",
"sample_rate": 8000
}
}Client log
RAW05:35:22 info: Sendspin.SDK.Client.SendspinClientService[0] Connecting to ws://127.0.0.1:18937/sendspin
05:35:22 info: Sendspin.SDK.Connection.SendspinConnection[0] Connecting to ws://127.0.0.1:18937/sendspin...
05:35:22 info: Sendspin.SDK.Connection.SendspinConnection[0] Connected to ws://127.0.0.1:18937/sendspin
05:35:22 info: Sendspin.SDK.Client.SendspinClientService[0] Sending client/hello: {"type":"client/hello","payload":{"client_id":"sendspin-dotnet-client-id","name":"sendspin-dotnet-client","version":1,"supported_roles":["player@v1"],"player@v1_support":{"supported_formats":[{"codec":"pcm","channels":1,"sample_rate":8000,"bit_depth":16}],"buffer_capacity":2000000,"supported_commands":["volume","mute"]},"artwork@v1_support":{"channels":[{"source":"album","format":"jpeg","media_width":256,"media_height":256}]},"device_info":{"product_name":"Conformance Dotnet Client","manufacturer":"Sendspin Conformance","software_version":"0.1.0"}}}
05:35:22 info: Sendspin.SDK.Client.SendspinClientService[0] Server hello received: sendspin-go-server (sendspin-go server), reason: playback, roles: player@v1
05:35:22 info: Sendspin.SDK.Client.SendspinClientService[0] Sending initial client/state: {"type":"client/state","payload":{"state":"synchronized","player":{"volume":100,"muted":false}}}
05:35:22 info: Sendspin.SDK.Client.SendspinClientService[0] Handshake complete with server sendspin-go-server (sendspin-go server)
05:35:22 info: Sendspin.SDK.Client.SendspinClientService[0] Stream starting: PCM 8000Hz 1ch 16bit
05:35:22 info: Sendspin.SDK.Connection.SendspinConnection[0] Server closed connection: NormalClosure - done
05:35:23 warn: Sendspin.SDK.Client.SendspinClientService[0] Time sync burst aborted System.InvalidOperationException: WebSocket is not connected at Sendspin.SDK.Connection.SendspinConnection.SendMessageAsync[T](T message, CancellationToken cancellationToken) in /Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Connection/SendSpinConnection.cs:line 169 at Sendspin.SDK.Client.SendspinClientService.SendSingleProbeAsync(Int32 index, CancellationToken cancellationToken) in /Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs:line 640 at Sendspin.SDK.Client.SendspinClientService.SendTimeSyncBurstAsync(CancellationToken cancellationToken) in /Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs:line 588
{
"status": "ok",
"reason": null,
"implementation": "sendspin-dotnet",
"role": "client",
"scenario_id": "client-initiated-pcm",
"initiator_role": "client",
"preferred_codec": "pcm",
"client_name": "sendspin-dotnet-client",
"client_id": "sendspin-dotnet-client-id",
"server": {
"server_id": "sendspin-go-server",
"server_name": "sendspin-go server",
"connection_reason": "playback"
},
"peer_hello": {
"server_id": "sendspin-go-server",
"name": "sendspin-go server",
"version": 1,
"active_roles": [
"player@v1"
],
"connection_reason": "playback"
},
"stream": {
"codec": "pcm",
"sample_rate": 8000,
"channels": 1,
"bit_depth": 16
},
"audio": {
"received_pcm_sha256": "9d447b5b270bc99b45bb9a616937e436c941ca56c477f9cbe16a93275a6b059e",
"received_encoded_sha256": "b3481a3f75dea856a961e7842d12f8344c7147b3925f9f0b67c5445700bd4cf2",
"received_sample_count": 40000,
"audio_chunk_count": 100
}
}
Server build log · sendspin-go-server · built · 1.01s
RAWNo build detail was recorded.
Client build log · sendspin-dotnet-client · built · 15.75s
RAWnce/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(890,43): warning SA1117: The parameters should all be placed on the same line or each parameter should be placed on its own line. (https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1117.md) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(1029,9): warning S108: Either remove or fill this block of code. (https://rules.sonarsource.com/csharp/RSPEC-108) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(1053,13): warning S1481: Remove the unused local variable 'message'. (https://rules.sonarsource.com/csharp/RSPEC-1481) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(974,9): warning S108: Either remove or fill this block of code. (https://rules.sonarsource.com/csharp/RSPEC-108) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(1122,24): warning SA1503: Braces should not be omitted (https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1503.md) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(1131,24): warning SA1503: Braces should not be omitted (https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1503.md) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Client/SendSpinClient.cs(986,30): warning SA1116: The parameters should begin on the line after the declaration, whenever the parameter span across multiple lines (https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1116.md) [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
CSC : warning AD0001: Analyzer 'StyleCop.Analyzers.OrderingRules.SA1201ElementsMustAppearInTheCorrectOrder' threw an exception of type 'System.Collections.Generic.KeyNotFoundException' with message 'The given key 'RecordStructDeclaration' was not present in the dictionary.'. [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
CSC : warning AD0001: Analyzer 'StyleCop.Analyzers.OrderingRules.SA1201ElementsMustAppearInTheCorrectOrder' threw an exception of type 'System.Collections.Generic.KeyNotFoundException' with message 'The given key 'RecordStructDeclaration' was not present in the dictionary.'. [/Users/runner/work/conformance/conformance/repos/sendspin-dotnet/src/Sendspin.SDK/Sendspin.SDK.csproj::TargetFramework=net10.0]
/Users/runner/work/conformance/conformance/adapters/sendspin-dotnet/client/Program.cs(576,52): warning CS0067: The event 'HashingAudioPipeline.ErrorOccurred' is never used [/Users/runner/work/conformance/conformance/adapters/sendspin-dotnet/client/Conformance.SendspinDotnet.Client.csproj]
593 Warning(s)
0 Error(s)
Time Elapsed 00:00:14.31