このプロジェクトは安定していると考えられており、現在、重要な機能の開発は計画されていません。ただし、プル リクエストや問題は歓迎です。サポート/メンテナンスは時間が許す限り提供されます。
これは golang の sACN 実装です。 ESTA による E1.31 プロトコルに基づいています。コピーはここにあります。
これはまだ完全な実装ではありませんが、将来的には実装される可能性があります。完全な DMX パッケージを確認したい場合は、OLA プロジェクトを参照してください。
godoc.org にもいくつかのドキュメントがあります。このプロジェクトは、Go 1.11 で導入された Go モジュールをサポートします。
go get github.com/Hundemeier/go-sacn/sacn
sACN パケットを受信する最も簡単な方法は、 sacn.NewReceiverSocket
使用することです。
最新情報については、このリポジトリが含まれる godoc.org Web サイトにアクセスしてください。
receiver.Stop()
を介して、Receiver でのパケットの受信を停止できます。受信を停止してすべてのチャンネルを閉じるまでに最大 2.5 秒かかる場合があることに注意してください。一度受信機を停止した場合は、 receiver.Start()
を介して再起動できます。
DMX データを送信するには、 Transmitter
オブジェクトを初期化する必要があります。これは、プロトコル固有のアクションをすべて処理します (現時点ではすべてではありません)。データを送信したい場合は、ユニバースをアクティブ化できます。その後、512 バイト配列のチャネルを使用して、それらをネットワーク経由で送信できます。
受信者のアドレス指定には、ユニキャストとマルチキャストの 2 つの異なるタイプがあります。マルチキャストを使用する場合、一部のオペレーティング システム (Windows など) ではバインド アドレスを指定する必要があることに注意してください。両方を同時に使用することも、任意の数のユニキャスト アドレスを使用することもできます。マルチキャストを使用するかどうかを設定するには、 transmitter.SetMulticast(<universe>, <bool>)
を呼び出します。 transmitter.SetDestinations(<universe>, <[]string>)
を介して複数のユニキャスト宛先をスライスとして設定できます。既存の宛先は上書きされることに注意してください。宛先を追加する場合は、使用された net.UDPAddr オブジェクトのディープ コピーを返すtransmitter.Destination(<universe>)
を使用できます。
GoDoc の例:
送信機の例:
package main
import (
"log"
"math/rand"
"time"
"github.com/Hundemeier/go-sacn/sacn"
)
func main () {
//instead of "" you could provide an ip-address that the socket should bind to
trans , err := sacn . NewTransmitter ( "" , [ 16 ] byte { 1 , 2 , 3 }, "test" )
if err != nil {
log . Fatal ( err )
}
//activates the first universe
ch , err := trans . Activate ( 1 )
if err != nil {
log . Fatal ( err )
}
//deactivate the channel on exit
defer close ( ch )
//set a unicast destination, and/or use multicast
trans . SetMulticast ( 1 , true ) //this specific setup will not multicast on windows,
//because no bind address was provided
//set some example ip-addresses
trans . SetDestinations ( 1 , [] string { "192.168.1.13" , "192.168.1.1" })
//send some random data for 10 seconds
for i := 0 ; i < 20 ; i ++ {
ch <- [ 512 ] byte { byte ( rand . Int ()), byte ( i & 0xFF )}
time . Sleep ( 500 * time . Millisecond )
}
}