L16をUDPで送受信するJavaサンプルを書いてみた
何となくL16オーディオデータを送受信するサーバとクライアントが書きたくなったので書いてみました。 こういうのはCで書くことが多いので、Javaで書くのは初めてです。 お酒が入っているので結構いい加減です。
L16ってビッグエンディアンでPCM 16ビット取ればいいんでしたっけ? 間違っていたらごめんなさい。。。
44.1khzサンプリングで取得した音声データをlocalhostに投げつけています。
そのうち、RTPにでもしてSAP+SDPで広報して、sdr/vat対応してみようかな。。。 なお、やらない可能性も高いのでご注意下さい。
import javax.sound.sampled.*;
import java.net.*;
/** 送信側 */
public class snd {
  public static void main(String[] args) {
    try {
      byte[] buf = new byte[1400];
      DatagramSocket soc = new DatagramSocket();
      DatagramPacket pkt = new DatagramPacket(buf,
                                 buf.length,
                                 InetAddress.getByName("127.0.0.1"),
                                 11111);
      AudioFormat fmt = new AudioFormat(44100.0F, 16, 2, true, true);
      DataLine.Info info = new DataLine.Info(TargetDataLine.class, fmt);
      TargetDataLine targetDataLine = (TargetDataLine)AudioSystem.getLine(info);
      targetDataLine.open(fmt);
      AudioInputStream in = new AudioInputStream(targetDataLine);
      targetDataLine.start();
      while (true) {
        in.read(buf, 0, buf.length);
        soc.send(pkt);
      }
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
}
import javax.sound.sampled.*;
import java.net.*;
/** 受信側 */
public class recv {
  public static void main(String[] args) {
    try {
      byte[] buf = new byte[1400];
      DatagramSocket soc = new DatagramSocket(11111);
      DatagramPacket pkt = new DatagramPacket(buf,buf.length);
      AudioFormat fmt = new AudioFormat(44100.0F, 16, 2, true, true);
      DataLine.Info info = new DataLine.Info(SourceDataLine.class, fmt);
      SourceDataLine srcLine = (SourceDataLine)AudioSystem.getLine(info);
      srcLine.open(fmt);
      srcLine.start();
      while (true) {
        soc.receive(pkt);
        srcLine.write(pkt.getData(), 0, pkt.getData().length);
      }
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
}
最近のエントリ
- ShowNet 2025のルーティングをざっくり紹介
- RoCEとUltra Ethernetの検証:ShowNet 2025
- ソフトルータ推進委員会のスタンプラリー
- 800G関連の楽しい雑談@Interop Tokyo 2025
- VXLAN Group Based Policyを利用したマネージメントセグメント
- ShowNet伝送2025
過去記事
