詩的私的ジャック JACK THE POETICAL PRIVATE S&M

詩的私的ジャック JACK THE POETICAL PRIVATE S&M

詩的私的ジャック JACK THE POETICAL PRIVATE S&M

「どんなところが面白いですか? 研究って」
萌絵はきいた。
「そうだね……。それも、よくきかれるけどね」
結城寛が微笑む。
「うまく言葉で説明できないし、自分でも理屈はよくわからない。でも、これよりも面白いものが、人類に残されているかって思うよ」
「大学院に進学しようかどうか迷っているんです」
萌絵は相談してみることにした。
犀川先生にご相談すれば良いわ」
杉東が横から言う。
「将来のこととかも含めて」
「ええ、先生は進学した方が良いって……」
「なんだ、それじゃあ、迷うことはないでしょう?」と杉東。

「将来を決めてしまうなんて、恐ろしいじゃないか。そんな恐いことはしたくない」犀川が言う。「台風の進路だって、扇形に広がっているだろう? 人間の進路はもっと広角だ」

native webrtc (objc) で audio track に echo cancel, auto gain control などのオプションを設定する

音声を送る場合は

let audioTrack = factory.audioTrackWithID("...")

のような感じで作るがオプション (RTCMediaConstraints) を現状 RTCPeerConnectionFactory からだと渡せないのでやはり自前で書く必要がある

- (RTCAudioTrack*)audioTrackWithID:(NSString*)audioId constraints:(RTCMediaConstraints*)constraints {
    
    rtc::scoped_refptr<webrtc::AudioSourceInterface> source = self.nativeFactory->CreateAudioSource(constraints.constraints);
    rtc::scoped_refptr<webrtc::AudioTrackInterface> track =
    self.nativeFactory->CreateAudioTrack([audioId UTF8String], source);
    return [[RTCAudioTrack alloc] initWithMediaTrack:track];
}

このようなメソッドを用意し

        let audioConstraints = RTCMediaConstraints(mandatoryConstraints: [
            RTCPair(key: "googAutoGainControl", value: "false"),
            RTCPair(key: "googAutoGainControl2", value: "false"),
            RTCPair(key: "googEchoCancellation", value: "false"),
            RTCPair(key: "googEchoCancellation2", value: "false"),
            RTCPair(key: "googNoiseSuppression", value: "false"),
            RTCPair(key: "googNoiseSuppression2", value: "false"),
            RTCPair(key: "googHighpassFilter", value: "false"),
            ], optionalConstraints: [])
        
        let audioTrack = factory.audioTrackWithID("...", constraints: audioConstraints)

上のように audio track を作ると echo cancel, auto gain control などを無効・有効に出来る。 人間の会話を送る場合は特にこれらを無効にする必用はないが、音楽などを送る場合は適してないので無効にすると良い。

ここで指定出来るオプションはここに書いてある。

video のほうは track と source が分かれて method がちゃんと生えてるのでこのようなことをする必用はない。

native webrtc (mac) で audio の input device を変更する

既に存在する PeerConnectionFactory から変更する方法が変わらなかったので、とりあえず初期化の時に変更する方法

        webrtc::AudioDeviceModule *adm = webrtc::CreateAudioDeviceModule(0, webrtc::AudioDeviceModule::kPlatformDefaultAudio);
        int ret = adm->Init();
        NSAssert(ret == 0, @"failed init audio device modules");
        
        for (int i = 0; i < adm->RecordingDevices(); i++) {
            char name[webrtc::kAdmMaxDeviceNameSize];
            char guid[webrtc::kAdmMaxGuidSize];
            int ret = adm->RecordingDeviceName(i, name, guid);
            NSAssert(ret == 0, @"failed RecordingDeviceName");
            NSLog(@"%d %s %s", i, name, guid);
        }
        
        adm->SetRecordingDevice(...);

として AudioDeviceModule を初期化しこれを webrtc::CreatePeerConnectionFactory に渡す必用がある。

RTCPeerConnectionFactory.mm のような wrapper を自分で書いちゃうのが早そう。

git のブランチ間でのスキーマの差分を ALTER 文とかで出す

git difftool -x=schemalex branch1...branch2 path/to/schema

とやると出来る。

別に schemalex ではなくてもよく command <before> <after> で diff を求められるツールがあれば良い。*1

ちなみに git diff でやる場合には gitconfig に

diff ["sqldiff"]
        command = ...

gitattribuets に

*.sql diff=sqldiff

のように書く必用があるが *2 command には <path> <tmp_path1> <hex1> <mode1> <tmp_path2> <hex2> <tmp_path2> と渡るので *3 git difftool のほうが使いやすそうな感じがする。