<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OBS | imakat.com</title>
	<atom:link href="https://imakat.com/tag/obs/feed/" rel="self" type="application/rss+xml" />
	<link>https://imakat.com</link>
	<description>工夫と改善で人生をちょっと豊かに</description>
	<lastBuildDate>Sat, 18 Oct 2025 23:22:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/imakat.com/wp-content/uploads/2023/07/cropped-80d64ecd340db4e2ca3224859b04caed.png?fit=32%2C32&#038;ssl=1</url>
	<title>OBS | imakat.com</title>
	<link>https://imakat.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">160909258</site>	<item>
		<title>【Mac】BlackHoleと複数出力装置が不要になった。〜UR24C dspMixアプリのアップデート〜</title>
		<link>https://imakat.com/2024/07/15/22832/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Mon, 15 Jul 2024 06:16:21 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[音楽制作]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[cubase]]></category>
		<category><![CDATA[DAW]]></category>
		<category><![CDATA[OBS]]></category>
		<category><![CDATA[UR24C]]></category>
		<category><![CDATA[BlackHole]]></category>
		<category><![CDATA[複数出力装置]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=22832</guid>

					<description><![CDATA[UR24CのdspMixが3.0に更新されていた。 以前の投稿でオーディオインターフェースUR24Cのループバック機能を使って、画面上のWeb音声、QuiceTimePlayer音声、マイク音声を操作する方法を紹介しまし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">UR24CのdspMixが3.0に更新されていた。</h3>



<p><a href="https://imakat.com/2022/08/04/15583/" target="_blank">以前の投稿</a>でオーディオインターフェースUR24Cのループバック機能を使って、画面上のWeb音声、QuiceTimePlayer音声、マイク音声を操作する方法を紹介しましたが、いつのまにか最近、UR24CのdspMixアプリが3.0に進化していました。これにより、MacのAudio MIDI設定、Cubaseのオーディオシステム設定、OBSのPreferenceが変更になりますので、紹介します。</p>



<p>実は以前から、私の設定では、DAWの動画と音声、YouTubeなどWeb音声、QuickTime音声、iPadおよびiPhoneの動画および音声、Webカメラ動画、マイク音声、パペットの動作、これらを全てを、OBS上で再生することは可能になっていました。</p>



<p>dspMixアプリですが、以前はDAWだけでしたが、MusicとVoiceというチャネルが追加になっています。今のところ、操作が以前より多少楽になったという印象ですが、実はもっと凄い追加機能があるのかもしれません。</p>


<div class="sc-dynamic-embed">
  <style>
  /* リンクの見た目を整える */
  .sc-dynamic-embed .sc-link-container { 
      display: flex; 
      margin-bottom: 10px; 
      flex-wrap: wrap; 
      align-items: center; 
  }
  .sc-dynamic-embed .sc-link { margin-bottom: 0; }
  .sc-dynamic-embed .sc-link a {
    font-size: 15px; /* dynamicと合わせた基本サイズ */
    font-weight: normal;
    text-decoration: underline;
    color: #0073aa;
  }
  .sc-dynamic-embed .sc-link a:hover { text-decoration: none; color: #000; }
  
  /* ★スマホ画面（幅500px以下）の時は文字を縮小して統一感を出す */
  @media (max-width: 500px) {
    .sc-dynamic-embed .sc-link a { font-size: 13px; }
  }

  /* 行梱包時の基本スタイル */
  .sc-dynamic-embed .imk-line {
      display: inline-block;
      width: 100%;
      border-radius: 2px;
      transition: background-color 0.1s;
  }

  /* 古い枠内字幕ボックスを強制消去 */
  .sc-dynamic-embed #subtitleOverlay,
  .sc-dynamic-embed #scSubtitleOverlay,
  .sc-dynamic-embed .overlay-cue,
  .sc-dynamic-embed .band {
      display: none !important;
      opacity: 0 !important;
      visibility: hidden !important;
      pointer-events: none !important;
  }
  </style>

  <div class="sc-link-container">
    <p class="sc-link">
      <a href="https://imakat.com/ds62/?drid=20" target="_blank"
         onclick="return scStopAndGo(event, this);">
        👉低画質・枠外字幕はこちら
      </a>
    </p>
  </div>

  <style>
            :root{ --dr5emd-max: 1920px; }
            .video-wrap{position:relative;width:100%;margin:0 auto}
            figure.wp-block-video.aligncenter{
              width:100%;
              max-width:min(var(--dr5emd-max, 1920px), 98vw);
              margin:0 auto;
            }
            #subtitleOverlay{
              position:absolute; left:0; right:0; bottom:6%;
              padding:0 2%; text-align:center; pointer-events:none; z-index:2;
            }
            #subtitleOverlay .band{
              display:inline-block; background:rgba(0,0,0,0.35);
              padding:6px 10px; border-radius:8px; max-width:96%;
              margin:0 auto; box-shadow:0 1px 2px rgba(0,0,0,0.15);
            }
            #subtitleOverlay .overlay-cue{
              color:#fff; font-weight:600;
              font-size:clamp(16px, 3.6vw, 32px);
              line-height:1.32; white-space:pre-wrap; margin:2px 0;
              -webkit-text-stroke:.6px rgba(0,0,0,.7);
              text-shadow:-1px -1px 0 rgba(0,0,0,.6), 1px -1px 0 rgba(0,0,0,.6),
                          -1px  1px 0 rgba(0,0,0,.6), 1px  1px 0 rgba(0,0,0,.6);
            }
            @media (max-width:430px){
              #subtitleOverlay .overlay-cue{ font-size:clamp(16px, 4.2vw, 22px); }
            }
            .dr5emd-sublist details > p{
              height:200px; overflow:auto; background-color:#EDF7FF;
              padding:2px 6px; margin:0; box-shadow:3px 3px 4px black;
              position: relative;
            }
            .dr5emd-sublist details > summary{
              padding:2px 6px; width:100%;
              background-color:#ddd; border:none;
              box-shadow:3px 3px 4px black; cursor:pointer; list-style:none;
            }
            /* ▼ 自動スクロール時のハイライト（文字の太さを標準へ変更） */
            .active-hl {
                background-color: #ffff00 !important;
                color: #ff0000 !important;
                font-weight: normal; /* 標準の太さ */
                border-bottom: 2px solid red;
                display: inline-block;
                border-radius: 2px;
            }
            </style><div class="dr5emd-container"><figure class="wp-block-video aligncenter"><div class="video-wrap"><video id="myVideo" controls controlsList="nodownload" poster="https://imakat.com/rd.php?id=UV2YxXWv.png" playsinline preload="metadata" style="width:100%;height:auto;">  <source src="https://imakat.com/rd.php?id=pGBj1qA9.mp4" type="video/mp4">  <track src="https://imakat.com/rd.php?id=ffzz5qBk.vtt" label="日本語" srclang="ja" kind="subtitles"></video><div id="subtitleOverlay" aria-hidden="true"></div></div><script>
document.addEventListener("DOMContentLoaded", function(){
  var video=document.getElementById("myVideo");
  var trackEl=video?video.querySelector("track[kind='subtitles'], track[kind='captions']"):null;
  var overlay=document.getElementById("subtitleOverlay"); if(!video||!overlay) return;
  video.addEventListener("contextmenu", function(e){ e.preventDefault(); return false; }, false);
  function setNative(mode){
    try{
      if(video.textTracks && video.textTracks.length){
        for(var i=0;i<video.textTracks.length;i++){ video.textTracks[i].mode = mode; }
      }
      if(trackEl && trackEl.track) trackEl.track.mode = mode;
    }catch(e){}
  }
  var isOverlay=true,lastSig="";
  function sig(active){if(!active||active.length===0)return"";var a=[];for(var i=0;i<active.length;i++){var c=active[i];a.push([c.startTime,c.endTime,c.text].join("|"));}return a.join("||");}
  function cueLine(c){var d=document.createElement("div");d.className="overlay-cue";d.setAttribute("translate","yes");if(typeof c.getCueAsHTML==="function")d.appendChild(c.getCueAsHTML());else d.textContent=c.text;return d;}
  function render(){
    if(!isOverlay || !trackEl || !trackEl.track) return;
    var ac=trackEl.track.activeCues,s=sig(ac); if(s===lastSig) return; lastSig=s;
    overlay.innerHTML=""; if(!ac || ac.length===0) return;
    var b=document.createElement("div"); b.className="band"; b.setAttribute("translate","yes");
    Array.from(ac).sort(function(a,b){return a.startTime-b.startTime;}).forEach(function(c){b.appendChild(cueLine(c));});
    overlay.appendChild(b);
  }
  function useOverlay(){isOverlay=true;overlay.style.display="";setNative("hidden");lastSig="";render();}
  function useNative(){isOverlay=false;overlay.style.display="none";setNative("showing");lastSig="";}
  useOverlay();
  if(trackEl){
    if(trackEl.track){ try{ trackEl.track.addEventListener("cuechange",render); }catch(e){} }
    trackEl.addEventListener("load", function(){ try{ if(trackEl.track) trackEl.track.addEventListener("cuechange",render); }catch(e){} render(); });
  }
  video.addEventListener("loadedmetadata",render);
  function handleWebkitMode(){ var m = video.webkitPresentationMode || "inline"; (m==="picture-in-picture"||m==="fullscreen") ? useNative() : useOverlay(); }
  if("webkitPresentationMode" in video){ video.addEventListener("webkitpresentationmodechanged",handleWebkitMode); handleWebkitMode(); }
  if("webkitCurrentPlaybackTargetIsWireless" in video){
    video.addEventListener("webkitcurrentplaybacktargetiswirelesschanged", function(){ video.webkitCurrentPlaybackTargetIsWireless ? useNative() : useOverlay(); });
  }
  if("pictureInPictureEnabled" in document){
    video.addEventListener("enterpictureinpicture",useNative);
    video.addEventListener("leavepictureinpicture",useOverlay);
  }
  document.addEventListener("fullscreenchange", function(){
    var fs=document.fullscreenElement;
    if(!fs) return useOverlay();
    (fs===video || (fs && fs.contains && fs.contains(video))) ? useNative() : useOverlay();
  });
});
</script>
                <figcaption></figcaption></figure><div class="dr5emd-sublist"><details><summary>字幕一覧(クリック)</summary> <p>
(<a href="#" class="imk-cue" data-seek="0:00">00:00:00</a>)  今回は、<br>
(<a href="#" class="imk-cue" data-seek="0:07">00:00:07</a>)  新しくアップデートされたUR24CのDSPMIXアプリ3.0をインストールしたので、<br>
(<a href="#" class="imk-cue" data-seek="0:22">00:00:22</a>)  これに伴って変更点を説明していきたいと思います。<br>
(<a href="#" class="imk-cue" data-seek="0:30">00:00:30</a>)  まずそのdspMIXアプリをインストールすると、<br>
(<a href="#" class="imk-cue" data-seek="0:35">00:00:35</a>)  こんなような画面になります。<br>
(<a href="#" class="imk-cue" data-seek="0:38">00:00:38</a>)  これ以前は、<br>
(<a href="#" class="imk-cue" data-seek="0:42">00:00:42</a>)  この縦列チャンネルのところはですね、<br>
(<a href="#" class="imk-cue" data-seek="0:45">00:00:45</a>)  DAWだけだったんですけども、<br>
(<a href="#" class="imk-cue" data-seek="0:48">00:00:48</a>)  新しくMusicとVoiceというものが増えています。<br>
(<a href="#" class="imk-cue" data-seek="0:53">00:00:53</a>)  それでさらに、<br>
(<a href="#" class="imk-cue" data-seek="0:55">00:00:55</a>)  ここに配信モードのようなページが<br>
(<a href="#" class="imk-cue" data-seek="1:00">00:01:00</a>)  増えています。<br>
(<a href="#" class="imk-cue" data-seek="1:05">00:01:05</a>)  実際使うときは、<br>
(<a href="#" class="imk-cue" data-seek="1:07">00:01:07</a>)  今私はこの配信モードというものを使っています。<br>
(<a href="#" class="imk-cue" data-seek="1:11">00:01:11</a>)  この方が、<br>
(<a href="#" class="imk-cue" data-seek="1:13">00:01:13</a>)  このレバーを扱いやすいというか、<br>
(<a href="#" class="imk-cue" data-seek="1:18">00:01:18</a>)  直感的です。<br>
(<a href="#" class="imk-cue" data-seek="1:21">00:01:21</a>)  こんなような形でですね、<br>
(<a href="#" class="imk-cue" data-seek="1:25">00:01:25</a>)  DSPが変わっています。<br>
(<a href="#" class="imk-cue" data-seek="1:32">00:01:32</a>)  次にですね、<br>
(<a href="#" class="imk-cue" data-seek="1:34">00:01:34</a>)  Audio MIDI設定のところを見てみたいんですが、<br>
(<a href="#" class="imk-cue" data-seek="1:40">00:01:40</a>)  これがAudio MIDI設定ですね。<br>
(<a href="#" class="imk-cue" data-seek="1:45">00:01:45</a>)  今回ですね、新たにインストールしたdspMIXによってですね、<br>
(<a href="#" class="imk-cue" data-seek="1:50">00:01:50</a>)  3つの新しい装置が追加になっています。<br>
(<a href="#" class="imk-cue" data-seek="1:55">00:01:55</a>)  1つはDAW、UR24C DAW<br>
(<a href="#" class="imk-cue" data-seek="1:59">00:01:59</a>)  2つ目がUR24C Streaming/Music、<br>
(<a href="#" class="imk-cue" data-seek="2:06">00:02:06</a>)  3つ目がUR24C Voiceと、<br>
(<a href="#" class="imk-cue" data-seek="2:09">00:02:09</a>)  この3つが追加されます。<br>
(<a href="#" class="imk-cue" data-seek="2:16">00:02:16</a>)  出力はUR24C DAWを指定します！！詳しくは最後の９をご覧ください。<br>
(<a href="#" class="imk-cue" data-seek="2:23">00:02:23</a>)  それからマイクはですね、UR24C Voiceをですね指定します。<br>
(<a href="#" class="imk-cue" data-seek="2:35">00:02:35</a>)  こうしておきます。<br>
(<a href="#" class="imk-cue" data-seek="2:38">00:02:38</a>)  ちなみにこれを見ると、サウンドですね、<br>
(<a href="#" class="imk-cue" data-seek="2:42">00:02:42</a>)  サウンドから見ても同じように、<br>
(<a href="#" class="imk-cue" data-seek="2:45">00:02:45</a>)  出力はUR24C DAWを指定します！！詳しくは最後の９をご覧ください。<br>
(<a href="#" class="imk-cue" data-seek="3:02">00:03:02</a>)  入力の方がSteinberg UR24C Voiceとしてあります。<br>
(<a href="#" class="imk-cue" data-seek="3:07">00:03:07</a>)  結局ですね、<br>
(<a href="#" class="imk-cue" data-seek="3:11">00:03:11</a>)  以前使っていたこのBlackHole16chというのは、<br>
(<a href="#" class="imk-cue" data-seek="3:15">00:03:15</a>)  使わなくても良くなりました。<br>
(<a href="#" class="imk-cue" data-seek="3:18">00:03:18</a>)  この複数出力装置も、これまで使ってたんですが、<br>
(<a href="#" class="imk-cue" data-seek="3:23">00:03:23</a>)  まあ使ってないです。<br>
(<a href="#" class="imk-cue" data-seek="3:25">00:03:25</a>)  使わなくて良くなりました。<br>
(<a href="#" class="imk-cue" data-seek="3:29">00:03:29</a>)  チェック全部外してます。以上のようになりました。<br>
(<a href="#" class="imk-cue" data-seek="3:36">00:03:36</a>)  それからCubaseの設定なんですけども、<br>
(<a href="#" class="imk-cue" data-seek="3:40">00:03:40</a>)  Cubaseはですね、<br>
(<a href="#" class="imk-cue" data-seek="3:43">00:03:43</a>)  オーディオシステムのところですけども、<br>
(<a href="#" class="imk-cue" data-seek="3:46">00:03:46</a>)  スタジオから入りましてですね、<br>
(<a href="#" class="imk-cue" data-seek="3:53">00:03:53</a>)  このスタジオ設定、<br>
(<a href="#" class="imk-cue" data-seek="3:55">00:03:55</a>)  この中にあるオーディオシステム、<br>
(<a href="#" class="imk-cue" data-seek="3:59">00:03:59</a>)  このASIOドライバーをですね、UR24C DAWにしました。<br>
(<a href="#" class="imk-cue" data-seek="4:06">00:04:06</a>)  で、することによって、<br>
(<a href="#" class="imk-cue" data-seek="4:12">00:04:12</a>)  オーディオコネクション側にも反映しまして、<br>
(<a href="#" class="imk-cue" data-seek="4:17">00:04:17</a>)  入力の方はですね、同じくUR24C DAWを選びます。<br>
(<a href="#" class="imk-cue" data-seek="4:25">00:04:25</a>)  一応これ、Monoでの録音をしたいので、<br>
(<a href="#" class="imk-cue" data-seek="4:29">00:04:29</a>)  バスをですね、Monoに設定してあります。<br>
(<a href="#" class="imk-cue" data-seek="4:34">00:04:34</a>)  UR24C INPUT-1ですね。<br>
(<a href="#" class="imk-cue" data-seek="4:42">00:04:42</a>)  この1だけの方にですね、してあります。<br>
(<a href="#" class="imk-cue" data-seek="4:45">00:04:45</a>)  それから出力側ですが、同じくUR24C DAWにしてあります。<br>
(<a href="#" class="imk-cue" data-seek="4:53">00:04:53</a>)  こういうデバイスポートですね。<br>
(<a href="#" class="imk-cue" data-seek="5:01">00:05:01</a>)  こういう形で設定しておきます。<br>
(<a href="#" class="imk-cue" data-seek="5:05">00:05:05</a>)  それから最後に、<br>
(<a href="#" class="imk-cue" data-seek="5:10">00:05:10</a>)  OBSの設定の変更です。<br>
(<a href="#" class="imk-cue" data-seek="5:14">00:05:14</a>)  OBSはですね、<br>
(<a href="#" class="imk-cue" data-seek="5:17">00:05:17</a>)  Preferenceから入って、<br>
(<a href="#" class="imk-cue" data-seek="5:21">00:05:21</a>)  音声、グローバル音声デバイス、<br>
(<a href="#" class="imk-cue" data-seek="5:25">00:05:25</a>)  この中でデスクトップ音声は既定でよくて、<br>
(<a href="#" class="imk-cue" data-seek="5:36">00:05:36</a>)  マイク音声は、Steinberg UR24C Voive、このように変更しました。<br>
(<a href="#" class="imk-cue" data-seek="5:40">00:05:40</a>)  以上のようにしますと、<br>
(<a href="#" class="imk-cue" data-seek="5:45">00:05:45</a>)  再生してみますと、<br>
(<a href="#" class="imk-cue" data-seek="5:47">00:05:47</a>)  例えばこれはWeb上の音楽ですね。<br>
(<a href="#" class="imk-cue" data-seek="5:53">00:05:53</a>)  それからCubase DAWを再生してみます。<br>
(<a href="#" class="imk-cue" data-seek="6:31">00:06:31</a>)  ちょっと、よく似た曲なんで、<br>
(<a href="#" class="imk-cue" data-seek="6:33">00:06:33</a>)  Web側を止めます。<br>
(<a href="#" class="imk-cue" data-seek="6:43">00:06:43</a>)  Cubaseは、今Cubaseが動いています。<br>
(<a href="#" class="imk-cue" data-seek="6:49">00:06:49</a>)  次に、<br>
(<a href="#" class="imk-cue" data-seek="6:50">00:06:50</a>)  このCubaseにオーディオ録音をします。<br>
(<a href="#" class="imk-cue" data-seek="6:58">00:06:58</a>)  オーディオ録音をするんですが、こうですね。<br>
(<a href="#" class="imk-cue" data-seek="7:02">00:07:02</a>)  そうすると、私の声だけがですね、<br>
(<a href="#" class="imk-cue" data-seek="7:07">00:07:07</a>)  オーディオトラックに追加されます。<br>
(<a href="#" class="imk-cue" data-seek="7:12">00:07:12</a>)  例えば、こんな他のが混じっていてもですね、<br>
(<a href="#" class="imk-cue" data-seek="7:22">00:07:22</a>)  オーディオだけがですね、<br>
(<a href="#" class="imk-cue" data-seek="7:25">00:07:25</a>)  マイク音だけが、オーディオトラックに録音されています。<br>
(<a href="#" class="imk-cue" data-seek="7:47">00:07:47</a>)  はい。いいですね。<br>
(<a href="#" class="imk-cue" data-seek="7:53">00:07:53</a>)  こういった形になります。<br>
(<a href="#" class="imk-cue" data-seek="8:02">00:08:02</a>)  それからそうですね、もう一つ追加しますと、<br>
(<a href="#" class="imk-cue" data-seek="8:07">00:08:07</a>)  音声ミキサーですね、<br>
(<a href="#" class="imk-cue" data-seek="8:09">00:08:09</a>)  ちょっとこれをみましょうか。<br>
(<a href="#" class="imk-cue" data-seek="8:13">00:08:13</a>)  OBSの音声ミキサーのところですけれども、<br>
(<a href="#" class="imk-cue" data-seek="8:18">00:08:18</a>)  マイクはですね、<br>
(<a href="#" class="imk-cue" data-seek="8:21">00:08:21</a>)  モニターオフでトラック1と2へチェックを入れます。<br>
(<a href="#" class="imk-cue" data-seek="8:28">00:08:28</a>)  一番上にある「Mac画面」というものを用意して、モニターオフでトラック1とトラック3をチェックします。<br>
(<a href="#" class="imk-cue" data-seek="8:32">00:08:32</a>) ※iPadを「映像キャプチャデバイス」で表示した時の音声は、「モニターと出力」にしてトラック1とトラック4をチェックします。<br>
(<a href="#" class="imk-cue" data-seek="8:37">00:08:37</a>)  デスクトップ音声、今使ってはないんですけれども、<br>
(<a href="#" class="imk-cue" data-seek="8:41">00:08:41</a>)  トラック1だけチェックを入れておきます。<br>
(<a href="#" class="imk-cue" data-seek="8:44">00:08:44</a>)  こんなような設定にしておきます。<br>
(<a href="#" class="imk-cue" data-seek="8:49">00:08:49</a>)  以上です。<br>
(<a href="#" class="imk-cue" data-seek="8:52">00:08:52</a>)  申し訳ありませんが、Audio MIDI設定の訂正をします。　<br>
(<a href="#" class="imk-cue" data-seek="8:59">00:08:59</a>)  (最初に、Steinberg UR24C Streaming/Musicへスピーカー出力をつけると説明しましたが)　<br>
(<a href="#" class="imk-cue" data-seek="9:14">00:09:14</a>)  よくよく調べてみると、Cubase、YouTube(Web動画)は、DAWとStreaming/Musicともに再生できますが、<br>
(<a href="#" class="imk-cue" data-seek="9:34">00:09:34</a>)  QuickTimePlayer、FinalCutPro、Filmoraについては、DAWの方しか再生できませんでした。<br>
(<a href="#" class="imk-cue" data-seek="9:49">00:09:49</a>)  従って、出力をUR24C DAWへ変更しました。以上です。<br>
</p> </details>
</div><script>
(function(){
  var root=document.querySelector(".dr5emd-sublist");
  var video=document.getElementById("myVideo");
  if(!root || !video) return;
  function parseTs(ts){
    if(!ts) return null;
    var p=ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
    if(p.length===2) return p[0]*60 + p[1];
    if(p.length===3) return p[0]*3600 + p[1]*60 + p[2];
    return null;
  }
  root.addEventListener("click", function(e){
    var a=e.target.closest && e.target.closest("a.imk-cue[data-seek]");
    if(!a || !root.contains(a)) return;
    e.preventDefault();
    var sec = parseTs(a.getAttribute("data-seek"));
    if(sec==null) return;
    try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
  });
  video.addEventListener("timeupdate", function(){
    var listContainer = root.querySelector("details > p");
    if(!listContainer) return;
    var cues = listContainer.querySelectorAll("a.imk-cue");
    if(cues.length === 0) return;
    var cur = video.currentTime;
    var active = null;
    for(var i=0; i<cues.length; i++){
        var t = parseTs(cues[i].getAttribute("data-seek"));
        if(t !== null && cur >= t - 0.5){
            active = cues[i];
        } else if(t > cur){
            break;
        }
    }
    if(active){
        if(active.classList.contains("active-hl")) return;
        var old = listContainer.querySelectorAll(".active-hl");
        for(var k=0; k<old.length; k++) old[k].classList.remove("active-hl");
        active.classList.add("active-hl");
        if(listContainer.offsetParent !== null){
            var containerRect = listContainer.getBoundingClientRect();
            var activeRect = active.getBoundingClientRect();
            var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (active.clientHeight / 2);
            listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
        }
    }
  });
})();
</script>
                </div>

  <script>
  (function(){
    var me = document.currentScript;
    var wrapper = me ? me.closest('.sc-dynamic-embed') : null;

    /* -----------------------------------------------
       1. 動画の保護機能（右クリック禁止・DL防止）
       ----------------------------------------------- */
    function protectVideo() {
      var target = wrapper ? wrapper : document;
      var mediaEls = target.querySelectorAll('video');
      mediaEls.forEach(function(v){
        if(v.dataset.protected === 'true') return;
        v.dataset.protected = 'true';
        v.setAttribute('controlsList', 'nodownload');
        v.oncontextmenu = function() { return false; };
        v.addEventListener('contextmenu', function(e){ e.preventDefault(); return false; }, false);
      });
    }

    /* -----------------------------------------------
       2. 字幕制御＆ハイライト機能（iPhone全画面 完全対応版）
       ----------------------------------------------- */
    function initSubtitles() {
      var target = wrapper ? wrapper : document;
      var video = target.querySelector('video');
      var listContainer = target.querySelector('details > p');
      
      if (!video || !listContainer) return false; 

      if (video.dataset.subInit === 'true') return true; 
      video.dataset.subInit = 'true';

      var oldOverlay = target.querySelector('#subtitleOverlay') || target.querySelector('#scSubtitleOverlay');
      if (oldOverlay) {
          oldOverlay.style.setProperty('display', 'none', 'important');
          oldOverlay.innerHTML = ''; 
      }

      function isSpecialMode() {
        var isFs = !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement);
        var isPiP = !!(document.pictureInPictureElement && document.pictureInPictureElement === video) || (video.webkitPresentationMode === "picture-in-picture");
        var isIOSFs = !!video.webkitDisplayingFullscreen; 
        return isFs || isPiP || isIOSFs;
      }

      try {
        if(video.textTracks && video.textTracks.length > 0){
          for(var i=0; i<video.textTracks.length; i++){
             if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions'){
                 video.textTracks[i].mode = "hidden";
             }
          }
        }
      } catch(e){}

      video.addEventListener("webkitbeginfullscreen", function() {
          try {
              if(video.textTracks && video.textTracks.length > 0) {
                  for(var i=0; i<video.textTracks.length; i++){
                      if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') video.textTracks[i].mode = "showing";
                  }
              }
          } catch(e){}
      });
      video.addEventListener("webkitendfullscreen", function() {
          try {
              if(video.textTracks && video.textTracks.length > 0) {
                  for(var i=0; i<video.textTracks.length; i++){
                      if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') video.textTracks[i].mode = "hidden";
                  }
              }
          } catch(e){}
      });

      var detailsEl = target.querySelector("details");
      if (detailsEl) {
          detailsEl.open = true; 
          var summaryEl = detailsEl.querySelector("summary");
          if (summaryEl) summaryEl.textContent = "字幕(シーン)はここをクリック";
      }

      if (!listContainer.dataset.formatted) {
          var html = listContainer.innerHTML;
          var lines = html.split(/<br\s*\/?>/i);
          var newHtml = "";
          for(var j=0; j<lines.length; j++) {
              if(lines[j].trim() === "") continue;
              newHtml += "<span class='imk-line'>" + lines[j] + "</span><br>";
          }
          listContainer.innerHTML = newHtml;
          listContainer.dataset.formatted = "true";
      }

      function parseTs(ts){
        if(!ts) return null;
        var p = ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
        if(p.length===2) return p[0]*60 + p[1];
        if(p.length===3) return p[0]*3600 + p[1]*60 + p[2];
        return null;
      }

      var rootSublist = target.querySelector(".dr5-sublist") || listContainer.parentElement;
      if (rootSublist) {
        rootSublist.addEventListener("click", function(e){
          var a = e.target.closest && e.target.closest("a.imk-cue[data-seek]");
          if(!a) return;
          e.preventDefault();
          var sec = parseTs(a.getAttribute("data-seek"));
          if(sec==null) return;
          try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
        });
      }

      video.addEventListener("timeupdate", function(){
        var desiredMode = isSpecialMode() ? "showing" : "hidden";
        try {
            if(video.textTracks && video.textTracks.length > 0){
                for(var i=0; i<video.textTracks.length; i++){
                    if((video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') && video.textTracks[i].mode !== desiredMode) {
                        video.textTracks[i].mode = desiredMode;
                    }
                }
            }
        } catch(e){}

        var cues = listContainer.querySelectorAll("a.imk-cue");
        if(cues.length === 0) return;
        var cur = video.currentTime;
        var activeA = null;

        for(var i=0; i<cues.length; i++){
            var t = parseTs(cues[i].getAttribute("data-seek"));
            if(t !== null && cur >= t - 0.5){ activeA = cues[i]; } 
            else if(t > cur){ break; }
        }

        if(activeA){
            var activeLine = activeA.closest(".imk-line");
            if(!activeLine) activeLine = activeA;

            if(activeLine.classList.contains("active-hl")) return;

            var allLines = listContainer.querySelectorAll(".imk-line");
            for(var k=0; k<allLines.length; k++) {
                allLines[k].classList.remove("active-hl");
                allLines[k].removeAttribute("style"); 
            }
            var allLinks = listContainer.querySelectorAll("a");
            for(var m=0; m<allLinks.length; m++) {
                allLinks[m].classList.remove("active-hl");
                allLinks[m].removeAttribute("style"); 
            }

            activeLine.classList.add("active-hl");
            activeLine.style.setProperty("background-color", "#ffff00", "important");
            activeLine.style.setProperty("color", "red", "important");
            activeLine.style.setProperty("font-weight", "normal", "important");
            
            var newLinks = activeLine.querySelectorAll("a");
            for(var n=0; n<newLinks.length; n++) {
                newLinks[n].style.setProperty("color", "red", "important");
                newLinks[n].style.setProperty("text-decoration", "none", "important");
            }

            if(listContainer.offsetParent !== null){
                var containerRect = listContainer.getBoundingClientRect();
                var activeRect = activeLine.getBoundingClientRect();
                var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (activeLine.clientHeight / 2);
                listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
            }
        }
      });

      return true;
    }

    /* -----------------------------------------------
       監視タイマー
       ----------------------------------------------- */
    var checks = 0;
    var checkTimer = setInterval(function(){
      protectVideo(); // ★dynamic2は保護を維持
      var success = initSubtitles();
      checks++;
      if (success || checks > 20) { 
        clearInterval(checkTimer);
      }
    }, 500); 

    /* -----------------------------------------------
       3. 画面遷移時の停止機能
       ----------------------------------------------- */
    if (!window.scStopAndGo) {
      window.scStopAndGo = function(event, link){
        try{
          var mediaEls = document.querySelectorAll('video, audio');
          mediaEls.forEach(function(m){
            try{
              if (!m.paused) m.pause();
              if (document.pictureInPictureElement === m && document.exitPictureInPicture) {
                document.exitPictureInPicture().catch(function(){});
              }
            }catch(e){}
          });
        }finally{
          event.preventDefault();
          setTimeout(function(){
            if (link.target === '_blank') {
              window.open(link.href, '_blank');
            } else {
              window.location.href = link.href;
            }
          }, 50);
        }
        return false;
      };
    }
  })();
  </script>
</div>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">ポイント解説</h3>



<h4 class="wp-block-heading">１　dspMix3.0の導入とそれに伴う音声の設定</h4>



<p>オーディオインターフェースSteinbergUR24Cに使うアプリdspMixが3.0にアップデートされましたので、それに伴う設定の変更について説明します。</p>



<h4 class="wp-block-heading">２　dspMix3.0の設定変更</h4>



<p>dspMix3.0は、従来のものに、MusicとVoiceのチャンネルが追加されました。まずは、DAWを除いた状態で、他の音声、音源が再生されて、そこに、マイク音声が追加される形を作ります。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=34y30Det.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=34y30Det.png" alt=""/></a></figure>



<h4 class="wp-block-heading">３　Audio MIDI設定の変更</h4>



<p>UR24CのdspMix3.0をインストールすると、DAW、Streaming/Music、Voiceの3つの装置が割り当てられます。<strong>BlackHole16chおよび複数出力装置は使用しなくなりました</strong>。スピーカー出力にはDAW、マイク入力にはVoiceを選択します。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=1qW01Nsr.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=1qW01Nsr.png" alt=""/></a></figure>



<h4 class="wp-block-heading">４　DAW(Cubase)の設定変更</h4>



<p>スタジオ設定、オーディオシステム、ASIOドライバーを、UR24C DAWを選びます。これを選ぶことにより<strong>マイク録音が、CubaseのオーディオトラックとOBSの両方へ行うことができます</strong>。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=hXdOaqC0.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=hXdOaqC0.png" alt=""/></a></figure>



<h4 class="wp-block-heading">５　OBSの設定変更</h4>



<p>OBSのPreference、音声、グローバル音声デバイスで、デスクトップ音声を既定、マイク音声をSteinberg UR24C Voiceを選びます。</p>



<p>Macのスクリーンショットを使えば、かなりのことはできるのですが、OBSを使うメリットは、音声が、トラック別に録音できること、iPad、iPhone他外部デバイスの取り込みが自由なこと、パペットなどの扱いがラクなこと、などがあります。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=ZZvRAmMw.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=ZZvRAmMw.png" alt=""/></a></figure>



<h4 class="wp-block-heading">６　再生テスト</h4>



<p>Web上の音楽の再生と、ローカル上(Cubase)の音楽の再生を同時に行なってみます。問題なく再生できます。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=Bm8B0WG9.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=Bm8B0WG9.png" alt=""/></a></figure>



<h4 class="wp-block-heading">７　マイク音をCubaseとOBSへ同時に録音する。</h4>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=Bm8B0WG9.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=Bm8B0WG9.png" alt=""/></a></figure>



<h4 class="wp-block-heading">８　OBSの音声ミキサーの設定</h4>



<p>下の画像には含まれていませんが、iPad iPhoneなどを「映像キャプチャデバイス」で表示した時の音声は、「モニターと出力」を選択して、トラック１とトラック４をチェックします。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=nNsMHxdr.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=nNsMHxdr.png" alt=""/></a></figure>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=s0omPPEw.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=s0omPPEw.png" alt=""/></a></figure>



<p>以上。</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">22832</post-id>	</item>
		<item>
		<title>周辺機器の接続〜「近い」ものは有線。「遠い」ものは無線。それが電器屋の常識ではなかったのか</title>
		<link>https://imakat.com/2024/01/31/19696/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Wed, 31 Jan 2024 07:31:02 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[OBS]]></category>
		<category><![CDATA[USB-C]]></category>
		<category><![CDATA[MX ERGO]]></category>
		<category><![CDATA[拡張ディスプレイ]]></category>
		<category><![CDATA[CamX]]></category>
		<category><![CDATA[Thunderbolt]]></category>
		<category><![CDATA[HDMI]]></category>
		<category><![CDATA[スマホ新法]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=19696</guid>

					<description><![CDATA[25.10.19追記：25年12月施行のスマホ新法で、iPhoneからMacへのWiFiネットワーク経由のミラーリングやAirDropは、使えなくなるリスクが指摘されています。それと比べて、有線ケーブルによる接続は、はる [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>25.10.19追記：<br>25年12月施行のスマホ新法で、iPhoneからMacへのWiFiネットワーク経由のミラーリングやAirDropは、使えなくなるリスクが指摘されています。それと比べて、有線ケーブルによる接続は、はるかに排他性、独占性がなく使用不可になるリスクはほとんどないとされています。</p>



<p>25.6.25追記：<br>M2 Mac miniに、iPadを３つ目のディスプレイとして使う方法、を追記しました。</p>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-default"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>WiFiは、固まったり寸断することがあります。また、今回は家の中にあるMacとiPadの繋げ方の改善なので、直接は関係ないですが、一般にスピードが不安定です。さらに、微弱ではありますが<span class="bold">電磁波の被曝</span>も生じます。</p>



<p>100Mも離れているがゆえ不安定なのは仕方ないとしても、今回MacとiPadはすぐ隣りに至近距離で置いてあるわけです。サブディスプレイとして使おうとしています。すぐ隣にありながら、不安定、繋がらない、繋ぎ方が難しい、それはどこかで聞いた人間関係のようで、よくある話といえばそんなものでしょうか。いえいえ、これは物理の問題。ヘンテコリンなことと感じます。</p>



<p>よく考えてみてください。お月様まで電線を結べますか？</p>



<p>基本的な考え方は、「遠い」は無線、「近い」は有線です。</p>



<p>というか、まずは、<strong>有線接続が基本</strong>です。</p>



<p>さて、よく知られているアップルの魅力として、アップル製品同士はなにも用意しなくても無線でサクッと繋がることにありました。しかし今回大事な発想は、一度アップル製品であることを忘れて、MacとiPadをケーブルで繋げる。ただそれだけのことをやってみます。</p>



<p><strong>2つの実現</strong></p>



<p>それは１つ目は、Macの映像をiPadで映すこと。2つ目は、iPadの映像をMacで映すことです。</p>



<h3 class="wp-block-heading">ポイント解説</h3>



<h4 class="wp-block-heading">１　[1]の方法〜Macの映像を、iPadに表示する。</h4>



<p>第1は、iPad(iPadOS17.3)をMacの拡張ディスプレイにする方法です。（Macをミラーリングすることもできますが、Macの映像と同じものを小さいiPadの画面で見る意味は殆どありません。家の中では。）アップルがおすすめの方法はSideCarです。SideCarで有線接続に切り替えることもできますが、最初にWiFiで無線接続してからその後で有線に切り替えるやり方になります。これがなかなか厄介でして、<strong>SideCarは、Macを再起動した後に、そのまま有線接続が有効になってiPadの画面にMacが表示されるかというと、そうならない</strong>、<br>メニューバーの「画面ミラーリング」から接続する必要があります。ストレス！<br>設定を触っていると、BluetoothをONにしてくれ、WiFiをONにしてくれ、インターネットに接続してくれ、だのと、隣にあるものに対して、なんでそんなに色々必要なのかとイライラ、ストレス！<br><br>やっぱり、「<strong>ケーブルつなげてサクッ</strong>」といきたい。</p>



<p>以下の図をご覧ください。</p>



<p>今回、Macの「画面ミラーリング」は使わず、いきなりケーブルで接続します。</p>



<!--別ページ側の画像図形動画 -->
<a href="https://imakat.com/vm5?movid=909236498" target="_blank">
<!--投稿側の画像図形 -->
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vRtahZg1ZEOUYvPeUB_mSkM9AOoWueXrxvWgVOFVENwRN4bUJ2_Y3ZL4k2EU7iL7veIcvwUHep2NKBi/pub?w=960&amp;h=720">
</a>



<p>なお私はCamXアプリがシンプルでいいと選びましたがCamo Studioもいいと思います。</p>



<p>ただ残念ながら、このCamXアプリを使って、長時間、Macの拡張ディスプレイとして放置しておきますと、つまり常設すると、Macがだんだん重くなってきて、Macを再起動するということが時々あります。従って、この使い方は、一時的にiPadを代用する使い方になろうと感じます。</p>



<p>器具類やアプリなどを購入して時間を費して、あれこれ工夫するより、最近非常に安くなった単機能のモニターを購入して、直接、Macと接続するのもありだと考えます。iPadはiPad本来の使い方で活かす、ということでしょう。</p>



<!--別ページ側の画像図形動画 -->
<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1ql2CZgfVNPG_az-G68NYRmuYaD0-yhgATu8kdQdQ708/edit?usp=sharing">
<!--投稿側の画像図形 -->
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vS12F2EioIAC9NWyEqpNWxQ1En2GkPnM7IjHA933DkuPqX87AeMrmgHQxsimq_p9cLwHwsDzYlMwpqV/pub?w=960&amp;h=720">
<span class="fa fa-external-link external-icon anchor-icon"></span></a>



<h4 class="wp-block-heading">２　[2]の方法〜iPadの映像をMacで表示する。</h4>



<p>第2の方法、iPadをMacへ映すことですが、iPad miniやiPhoneの映像を拡大してみたい、さらにその映像を録画共有したい場合に使うことになります。これも有線接続なら無線接続より簡単です。Thunderboltケーブル(※1)を挿し込むだけです。あとはOBSやQuickTimePlayerからiPadを選択して表示します。</p>



<!—別ページ側の画像図形動画 httpsを挿入—>
<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/12COFLYbMdoVegIwkErI1cCv6sKsna-HfqZA_lJWtRlc/edit?usp=sharing">
<!—投稿側の画像図形 httpsを挿入—>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vRhbfqqRC81v949KKC-t3RPt8OwmBmARa5YqNfX9hnr5hCNyu20R_TUIbrT4MTCv2G_sytXtr9_GMto/pub?w=960&amp;h=720"
>
<span class="fa fa-external-link external-icon anchor-icon"></span></a>



<p><strong>突然、接続解除のストレス</strong></p>



<p>このThunderboltケーブル接続で、第1の拡張ディスプレイも兼用出来ないのか、つまりiPadの映像を→Macで表示、だけでなく逆方向のMacの映像を→iPadで表示、も使えないのか、ということですが、Mac設定の「画面ミラーリング」で「個別のディスプレイとして使用」を選択すれば、Macの映像を→iPadで表示、Macの拡張ディスプレイとして使えます。但し、iPadの映像を→Macで表示、Mac側からiPadの映像をキャプチャリングするアプリ(例えばOBSやQuickTimePlayerなど)を立ち上げると、「画面ミラーリング」の方法では、<strong>突然、接続解除</strong>になってしまいます。OBSの場合ですが、シーンの一つでiPadをキャプチャーするようにしてあって、ただしそのシーンを選択していない状態であっても、あるいはiPadを非表示にしても、接続解除されてしまいます。つまりOBSを何か別の使用目的で立ち上げても、そのOBSの設定のどこかにiPadキャプチャーが登録されていると、それに影響を受けて接続解除されるということですので、ストレスが大きいです。</p>



<p>日常は[1]の方法で使用するようにして、iPadの画面をMacの画面の中で録画したい、その時だけは[2]の接続に変える、そのように使用するしかありません。</p>



<p>※1 <a rel="noopener" target="_blank" href="https://hanpenblog.com/15679">Thunderbolt3と4があります<span class="fa fa-external-link external-icon anchor-icon"></span></a>。</p>



<h4 class="wp-block-heading">３　拡張ディスプレイは日常的に使える道具。</h4>



<p>第１の方法について、詳しく見てみます。<br>下図をご覧ください。拡張ディスプレイ用ケーブルを挿し込む→CamXアプリ(無料)を起動する、ただそれだけで、下図の状態になります。</p>



<p>このままの状態でiPadとしても拡張ディスプレイとしても両方使える点が素晴らしいです。マウスでiPadアプリの操作、Mac間のアプリの移動が行えます。マウスは手元でMac,iPadが切り替えられるタイプが非常に便利です。</p>



<!—別ページ側の画像図形動画 httpsを挿入—>
<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1OmL1deeiSp3mec2ymk27vwTVqHeiC6z682GwFybkAlc/edit?usp=sharing">
<!—投稿側の画像図形 httpsを挿入—>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vR-_F0f7TFZVQvOB-pT0wPxuOaP5yMY2fCjT_6VA4GmDYCjVKosp6q-l_tDoKmrGPqHycpe_ipS591b/pub?w=960&#038;h=720"
>
<span class="fa fa-external-link external-icon anchor-icon"></span></a>



<p>但し、iPadを拡張ディスプレイとして使った時の、解像度は、やはり純正の「画面ミラーリング」を使った方がクリアで見やすいです。</p>



<p>その感じに近づくように調整しましたが、2箇所あります。１つ目は、Mac側のシステム設定→ディスプレイ→拡張ディスプレイで、使用する解像度を1344&#215;1008にすること。２つ目は、iPadのCamX→画像設定でズームを35程度にすることです。</p>



<!—別ページ側の画像図形動画 httpsを挿入—>
<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1-80UChi6tZCUdXFNItC0k13XkjFpGRE9jSX59f9MozM/edit?usp=sharing">
<!—投稿側の画像図形 httpsを挿入—>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vT932BQAwjgIs5XUY9Rph4MBzoTbSPt0CQin0v2l01jv5sYz549EvMtW_zkOIRBCsrrVZKPYBcNvfbe/pub?w=960&#038;h=720"
>
<span class="fa fa-external-link external-icon anchor-icon"></span></a>



<h4 class="wp-block-heading">４　単機能モニターとiPadの両方使うスタイル。</h4>



<h5 class="wp-block-heading">その１</h5>



<p>単機能モニターの価格が安くなっており、16インチでも20,000円以下になっています。こうなってくるとアプリやケーブルに出費して設定に苦労するより、モニターを買ってしまった方が得策と感じます。実際、私の場合、単機能モニターとiPadを両方使うスタイルになっています。以下の方法ですと、iPadは通常は、独立して使用して、iPad,iPhoneの画面をMacに表示したいときは、Mac側でOBSやQuickTimePlayerを立ち上げて行います。</p>



<!—共有からリンクを知っている全員、閲覧者、と変更してリンクをコピー"https〜sharing"の位置にペースト—>
<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1rIClFBbzpbfrEIyKYuvPOdi7TezY1sWZ7IIo-yDtxjI/edit?usp=sharing">
<!—埋め込みコードをペースト—>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vRONd5GMutcPmzrx-Avmc2tSUc1oCu7kRZ--BjU6riez-gjZwvA8yJ6k5T-sgNf0BoJSmty6AtJPGdS/pub?w=960&amp;h=720">
<span class="fa fa-external-link external-icon anchor-icon"></span></a>



<p>さらにこの方法ですと、Windows RemoteでWindowsPCをMacから開いて、Windowsを単機能モニターに表示して操作することも出来ます。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://imakat.com/rd.php?id=F9kKOr6m.jpg" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=F9kKOr6m.jpg" alt="" style="width:398px;height:auto"/></a><figcaption class="wp-element-caption">左にMac、右の単機能モニターへWindowsを表示。ブログの挙動を調べたりExcelを使ったりする。</figcaption></figure>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=zigBS8oe.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=zigBS8oe.png" alt=""/></a><figcaption class="wp-element-caption">Macの拡張モニターに、OBSを表示してその中に、Macの主モニター、iPad、iPhone、パペット（カメラとマイクに反応)を配置した、いわばフル活用パターンです。</figcaption></figure>



<p>さらに、その後、改善したのが以下の状態です。<br></p>



<h6 class="wp-block-heading"><span class="bold-red">↓25.6.25追記</span></h6>



<h5 class="wp-block-heading">その２</h5>



<p>上の2の[2]で、Thunderboltケーブル接続１本で、双方向、つまり「MacをiPadへ映す＆iPadをMacへ映す」を実現できれば嬉しい。と書きましたが、Macの場合、Ethernetをインターネット利用では優先させながら、WiFiネットワークを稼働させることを今更発見しました。　ネットワーク設定の中の、右下をクリックして、「サービスの順序」において、Ethernet類を上の位置、Wi-Fiを下の位置に、配置すれば、両方接続済みの場合でも、インターネット接続はEthernet接続が優先されます。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=zrhJRAbv.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=zrhJRAbv.png" alt=""/></a></figure>



<p>通常、M2 Mac miniは、外部ディスプレイは2台まで可能なのですが、iPadを使うことにより、外部のアプリを使わず、純正の「画面ミラーリング」機能だけで、３台のディスプレイを映すことができるようになりました。ただし欠点としては、<strong>Amazon Video、NHK+(他にもあるかも知れない)は、視聴できないこと</strong>、動画類は他のアプリのキー操作でカクつくこと、などがあります。</p>



<p>時々、「接続が切れました」となりますが、数秒でつながり元の画面に戻ります。</p>



<p>普段は、iPadはiPadモードで使うのがベターです。</p>



<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/170KZmhlnD99NONST_JWjSedCu8BTUDQBhqzOJob1504/edit?usp=sharing" 
>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vTDUTenGSfAnFDdMkISxwymQuR097bX-KOclgxYW9FUXsCO87cdrb6893xC-C1YwdcKjA6uuuQP42EM/pub?w=960&#038;h=720"
></a>



<figure class="wp-block-image size-large is-resized"><a href="https://imakat.com/rd.php?id=kwACJiqr.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=kwACJiqr.png" alt="" style="width:815px;height:auto"/></a></figure>



<h6 class="wp-block-heading"><span class="bold-red">↑25.6.25追記</span></h6>



<h4 class="wp-block-heading">　その他</h4>



<p>下写真は、二種類のケーブルです。</p>



<p>ご参考にどうぞ。</p>



<!—別ページ側の画像図形動画 httpsを挿入—>
<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1O6C1Ls4dYxY54xq9pCXDBI6dYNM878ZX2HcTAo3rqb8/edit?usp=sharing">
<!—投稿側の画像図形 httpsを挿入—>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vQ8sLR1RPglMh-RhOymbuINUhpViOhFn778iGJwZNnOHrkUocpKQGJs9mxZkZAvC0d2IOBZhaU44KAc/pub?w=960&#038;h=720"
>
<span class="fa fa-external-link external-icon anchor-icon"></span></a>



<p>以上</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">19696</post-id>	</item>
		<item>
		<title>Macで「音声認識字幕ちゃん」を使いやすくする。</title>
		<link>https://imakat.com/2023/11/17/18463/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Fri, 17 Nov 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mac mini]]></category>
		<category><![CDATA[STREAM DECK]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[OBS]]></category>
		<category><![CDATA[音声認識字幕ちゃん]]></category>
		<category><![CDATA[Window Resizer]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=18463</guid>

					<description><![CDATA[「音声認識字幕ちゃん」のサイズ調整 最近、ちまたでもスマホの翻訳アプリ、翻訳機器などを目にすることが多くなってきました。しかも同時翻訳までできてしまうのには驚きです。ただ、いざ使おうと思うと、最初はお試しで無料ですが、有 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>



<h5 class="wp-block-heading">「音声認識字幕ちゃん」のサイズ調整</h5>


<div class="sc-dynamic-embed">
  <style>
  /* リンクの見た目を整える */
  .sc-dynamic-embed .sc-link-container { 
      display: flex; 
      gap: 12px; 
      margin-bottom: 10px; 
      flex-wrap: wrap; 
      align-items: center; 
  }
  .sc-dynamic-embed .sc-link { margin-bottom: 0; }
  .sc-dynamic-embed .sc-link a {
    font-size: 15px;
    font-weight: normal;
    text-decoration: underline;
    color: #0073aa;
  }
  .sc-dynamic-embed .sc-link a:hover { text-decoration: none; color: #000; }
  
  /* ★変更：ダウンロードボタンの基本サイズを小さくし、文字の折り返しを防止 */
  .sc-dynamic-embed .dl-btn a {
    font-size: 12px !important;
    color: #d9534f;
    font-weight: bold;
    text-decoration: none;
    background: #fdf0ef;
    padding: 4px 6px;
    border-radius: 4px;
    border: 1px solid #d9534f;
    white-space: nowrap; 
  }
  .sc-dynamic-embed .dl-btn a:hover { background: #d9534f; color: #fff; }

  /* ★追加：スマホ画面（幅500px以下）の時は、さらに全体を縮小して1行に収める */
  @media (max-width: 500px) {
    .sc-dynamic-embed .sc-link-container { gap: 6px; }
    .sc-dynamic-embed .sc-link a { font-size: 13px; }
    .sc-dynamic-embed .dl-btn a { font-size: 11px !important; padding: 3px 5px; }
  }

  /* 行梱包時の基本スタイル */
  .sc-dynamic-embed .imk-line {
      display: inline-block;
      width: 100%;
      border-radius: 2px;
      transition: background-color 0.1s;
  }

  /* 古い枠内字幕ボックスを強制消去 */
  .sc-dynamic-embed #subtitleOverlay,
  .sc-dynamic-embed #scSubtitleOverlay,
  .sc-dynamic-embed .overlay-cue,
  .sc-dynamic-embed .band {
      display: none !important;
      opacity: 0 !important;
      visibility: hidden !important;
      pointer-events: none !important;
  }
  </style>

  <div class="sc-link-container">
    <p class="sc-link">
      <a href="https://imakat.com/ds62/?drid=26" target="_blank"
         onclick="return scStopAndGo(event, this);">
        👉低画質・枠外字幕はこちら
      </a>
    </p>
    <p class="sc-link dl-btn">
      <a href="#" id="imk-dynamic-dl-btn" target="_blank" rel="noopener" download style="display: none;">
        📥 動画をダウンロード
      </a>
    </p>
  </div>

  <style>
            :root{ --dr5emd-max: 1920px; }
            .video-wrap{position:relative;width:100%;margin:0 auto}
            figure.wp-block-video.aligncenter{
              width:100%;
              max-width:min(var(--dr5emd-max, 1920px), 98vw);
              margin:0 auto;
            }
            #subtitleOverlay{
              position:absolute; left:0; right:0; bottom:6%;
              padding:0 2%; text-align:center; pointer-events:none; z-index:2;
            }
            #subtitleOverlay .band{
              display:inline-block; background:rgba(0,0,0,0.35);
              padding:6px 10px; border-radius:8px; max-width:96%;
              margin:0 auto; box-shadow:0 1px 2px rgba(0,0,0,0.15);
            }
            #subtitleOverlay .overlay-cue{
              color:#fff; font-weight:600;
              font-size:clamp(16px, 3.6vw, 32px);
              line-height:1.32; white-space:pre-wrap; margin:2px 0;
              -webkit-text-stroke:.6px rgba(0,0,0,.7);
              text-shadow:-1px -1px 0 rgba(0,0,0,.6), 1px -1px 0 rgba(0,0,0,.6),
                          -1px  1px 0 rgba(0,0,0,.6), 1px  1px 0 rgba(0,0,0,.6);
            }
            @media (max-width:430px){
              #subtitleOverlay .overlay-cue{ font-size:clamp(16px, 4.2vw, 22px); }
            }
            .dr5emd-sublist details > p{
              height:200px; overflow:auto; background-color:#EDF7FF;
              padding:2px 6px; margin:0; box-shadow:3px 3px 4px black;
              position: relative;
            }
            .dr5emd-sublist details > summary{
              padding:2px 6px; width:100%;
              background-color:#ddd; border:none;
              box-shadow:3px 3px 4px black; cursor:pointer; list-style:none;
            }
            /* ▼ 自動スクロール時のハイライト（文字の太さを標準へ変更） */
            .active-hl {
                background-color: #ffff00 !important;
                color: #ff0000 !important;
                font-weight: normal; /* 標準の太さ */
                border-bottom: 2px solid red;
                display: inline-block;
                border-radius: 2px;
            }
            </style><div class="dr5emd-container"><figure class="wp-block-video aligncenter"><div class="video-wrap"><video id="myVideo" controls controlsList="nodownload" poster="https://imakat.com/rd.php?id=SZyJ0Iso.png" playsinline preload="metadata" style="width:100%;height:auto;">  <source src="https://imakat.com/rd.php?id=ffhDUfn3.mp4" type="video/mp4">  <track src="https://imakat.com/rd.php?id=uMEIIFOK.vtt" label="日本語" srclang="ja" kind="subtitles"></video><div id="subtitleOverlay" aria-hidden="true"></div></div><script>
document.addEventListener("DOMContentLoaded", function(){
  var video=document.getElementById("myVideo");
  var trackEl=video?video.querySelector("track[kind='subtitles'], track[kind='captions']"):null;
  var overlay=document.getElementById("subtitleOverlay"); if(!video||!overlay) return;
  video.addEventListener("contextmenu", function(e){ e.preventDefault(); return false; }, false);
  function setNative(mode){
    try{
      if(video.textTracks && video.textTracks.length){
        for(var i=0;i<video.textTracks.length;i++){ video.textTracks[i].mode = mode; }
      }
      if(trackEl && trackEl.track) trackEl.track.mode = mode;
    }catch(e){}
  }
  var isOverlay=true,lastSig="";
  function sig(active){if(!active||active.length===0)return"";var a=[];for(var i=0;i<active.length;i++){var c=active[i];a.push([c.startTime,c.endTime,c.text].join("|"));}return a.join("||");}
  function cueLine(c){var d=document.createElement("div");d.className="overlay-cue";d.setAttribute("translate","yes");if(typeof c.getCueAsHTML==="function")d.appendChild(c.getCueAsHTML());else d.textContent=c.text;return d;}
  function render(){
    if(!isOverlay || !trackEl || !trackEl.track) return;
    var ac=trackEl.track.activeCues,s=sig(ac); if(s===lastSig) return; lastSig=s;
    overlay.innerHTML=""; if(!ac || ac.length===0) return;
    var b=document.createElement("div"); b.className="band"; b.setAttribute("translate","yes");
    Array.from(ac).sort(function(a,b){return a.startTime-b.startTime;}).forEach(function(c){b.appendChild(cueLine(c));});
    overlay.appendChild(b);
  }
  function useOverlay(){isOverlay=true;overlay.style.display="";setNative("hidden");lastSig="";render();}
  function useNative(){isOverlay=false;overlay.style.display="none";setNative("showing");lastSig="";}
  useOverlay();
  if(trackEl){
    if(trackEl.track){ try{ trackEl.track.addEventListener("cuechange",render); }catch(e){} }
    trackEl.addEventListener("load", function(){ try{ if(trackEl.track) trackEl.track.addEventListener("cuechange",render); }catch(e){} render(); });
  }
  video.addEventListener("loadedmetadata",render);
  function handleWebkitMode(){ var m = video.webkitPresentationMode || "inline"; (m==="picture-in-picture"||m==="fullscreen") ? useNative() : useOverlay(); }
  if("webkitPresentationMode" in video){ video.addEventListener("webkitpresentationmodechanged",handleWebkitMode); handleWebkitMode(); }
  if("webkitCurrentPlaybackTargetIsWireless" in video){
    video.addEventListener("webkitcurrentplaybacktargetiswirelesschanged", function(){ video.webkitCurrentPlaybackTargetIsWireless ? useNative() : useOverlay(); });
  }
  if("pictureInPictureEnabled" in document){
    video.addEventListener("enterpictureinpicture",useNative);
    video.addEventListener("leavepictureinpicture",useOverlay);
  }
  document.addEventListener("fullscreenchange", function(){
    var fs=document.fullscreenElement;
    if(!fs) return useOverlay();
    (fs===video || (fs && fs.contains && fs.contains(video))) ? useNative() : useOverlay();
  });
});
</script>
                <figcaption></figcaption></figure><div class="dr5emd-sublist"><details><summary>字幕一覧(クリック)</summary> <p>
(<a href="#" class="imk-cue" data-seek="0:01">00:00:01</a>)  今回は「音声認識字幕ちゃん」のですね。<br>
(<a href="#" class="imk-cue" data-seek="0:10">00:00:10</a>)  サイズを調整する、というテーマでやっていきます。<br>
(<a href="#" class="imk-cue" data-seek="0:15">00:00:15</a>)  「音声認識字幕ちゃん」はですね。<br>
(<a href="#" class="imk-cue" data-seek="0:18">00:00:18</a>)  Google Chromeでしか起動できないのです！<br>
(<a href="#" class="imk-cue" data-seek="0:23">00:00:23</a>)  で、このhttps以下ここにある、<br>
(<a href="#" class="imk-cue" data-seek="0:30">00:00:30</a>)  これを入れて立ち上げるのですが、そうすると下のように、<br>
(<a href="#" class="imk-cue" data-seek="0:38">00:00:38</a>)  ホームページが出てくるのですが、<br>
(<a href="#" class="imk-cue" data-seek="0:41">00:00:41</a>)  この中で、Google Script API-KEYがありますが、<br>
(<a href="#" class="imk-cue" data-seek="0:46">00:00:46</a>)  ここに、API KEYを入れるんですね。<br>
(<a href="#" class="imk-cue" data-seek="0:52">00:00:52</a>)  それはちょっとまた別の場面で、ここのURLからですね、<br>
(<a href="#" class="imk-cue" data-seek="0:58">00:00:58</a>)  設定方法を見て、取得して入力してください。<br>
(<a href="#" class="imk-cue" data-seek="1:05">00:01:05</a>)  それは今回は説明しません。<br>
(<a href="#" class="imk-cue" data-seek="1:13">00:01:13</a>)  それで、まず、<br>
(<a href="#" class="imk-cue" data-seek="1:15">00:01:15</a>)  Google Chromeを、表示するのですけれども、<br>
(<a href="#" class="imk-cue" data-seek="1:20">00:01:20</a>)  Google Chromeから、<br>
(<a href="#" class="imk-cue" data-seek="1:22">00:01:22</a>)  「音声認識字幕ちゃん」を表示するのですけれども、<br>
(<a href="#" class="imk-cue" data-seek="1:27">00:01:27</a>)  それが、OBSの画面上のどの位置に配置するか、<br>
(<a href="#" class="imk-cue" data-seek="1:33">00:01:33</a>)  どの大きさで配置するか、というのは、<br>
(<a href="#" class="imk-cue" data-seek="1:36">00:01:36</a>)  人によって様々だと思いますので、<br>
(<a href="#" class="imk-cue" data-seek="1:42">00:01:42</a>)  それに合わせるために、<br>
(<a href="#" class="imk-cue" data-seek="1:45">00:01:45</a>)  ウィンドウサイズを、<br>
(<a href="#" class="imk-cue" data-seek="1:47">00:01:47</a>)  色々変えれるようにしておく必要があるんですね。<br>
(<a href="#" class="imk-cue" data-seek="1:51">00:01:51</a>)  それでこのプラグインを入れます。<br>
(<a href="#" class="imk-cue" data-seek="1:55">00:01:55</a>)  Window Resizerというものです。<br>
(<a href="#" class="imk-cue" data-seek="2:01">00:02:01</a>)  Chromeウェブストアから拡張機能を選んで、<br>
(<a href="#" class="imk-cue" data-seek="2:07">00:02:07</a>)  その中で検索のところに、<br>
(<a href="#" class="imk-cue" data-seek="2:11">00:02:11</a>)  Window Resizerと入れて、このアプリケションを探して、<br>
(<a href="#" class="imk-cue" data-seek="2:19">00:02:19</a>)  それでダウンロードしてください。<br>
(<a href="#" class="imk-cue" data-seek="2:26">00:02:26</a>)  で、次にWindow Resizerの設定をします。<br>
(<a href="#" class="imk-cue" data-seek="2:31">00:02:31</a>)  すでに既定値として、ご覧のように320以下ですね、<br>
(<a href="#" class="imk-cue" data-seek="2:38">00:02:38</a>)  この1920までが既定値としてあるのですけれども、<br>
(<a href="#" class="imk-cue" data-seek="2:43">00:02:43</a>)  サイズのですね、<br>
(<a href="#" class="imk-cue" data-seek="2:44">00:02:44</a>)  ところがやっぱり私としては、<br>
(<a href="#" class="imk-cue" data-seek="2:48">00:02:48</a>)  OBSの画面の右下のところに、翻訳が出るなら出したいので、<br>
(<a href="#" class="imk-cue" data-seek="2:54">00:02:54</a>)  もうちょっと小さいサイズのものを作りたいです。<br>
(<a href="#" class="imk-cue" data-seek="2:58">00:02:58</a>)  そこで819 x 614というものを作りたいと思うので、<br>
(<a href="#" class="imk-cue" data-seek="3:04">00:03:04</a>)  自分で作ります。<br>
(<a href="#" class="imk-cue" data-seek="3:07">00:03:07</a>)  このpresetsのところの、+のところを押して、<br>
(<a href="#" class="imk-cue" data-seek="3:12">00:03:12</a>)  そうすると別の画面に移行して設定ができます。<br>
(<a href="#" class="imk-cue" data-seek="3:16">00:03:16</a>)  で、それの設定が済みますと、<br>
(<a href="#" class="imk-cue" data-seek="3:19">00:03:19</a>)  このpresetsの一番上段のところに、<br>
(<a href="#" class="imk-cue" data-seek="3:23">00:03:23</a>)  今設定した新しいものが出てきます。<br>
(<a href="#" class="imk-cue" data-seek="3:34">00:03:34</a>)  Window Resizer設定のもう一つです。<br>
(<a href="#" class="imk-cue" data-seek="3:39">00:03:39</a>)  それは、hotkeysでpresetを設定します。<br>
(<a href="#" class="imk-cue" data-seek="3:46">00:03:46</a>)  presetの上から、<br>
(<a href="#" class="imk-cue" data-seek="3:49">00:03:49</a>)  presetが1,2,3,4,5...と順番が付いてますけども、<br>
(<a href="#" class="imk-cue" data-seek="3:54">00:03:54</a>)  これが先程のこの順番と対応してます。<br>
(<a href="#" class="imk-cue" data-seek="4:00">00:04:00</a>)  従って、<br>
(<a href="#" class="imk-cue" data-seek="4:01">00:04:01</a>)  今私が作った819 x 614は、<br>
(<a href="#" class="imk-cue" data-seek="4:07">00:04:07</a>)  この下の、Resize to preset 1 に対応しています。<br>
(<a href="#" class="imk-cue" data-seek="4:13">00:04:13</a>)  従って私はここに、登録しました。次に。<br>
(<a href="#" class="imk-cue" data-seek="4:25">00:04:25</a>)  もう一つ準備することがあります。<br>
(<a href="#" class="imk-cue" data-seek="4:29">00:04:29</a>)  Google Chromeで、<br>
(<a href="#" class="imk-cue" data-seek="4:31">00:04:31</a>)  「音声認識字幕ちゃん」を起動させるための、<br>
(<a href="#" class="imk-cue" data-seek="4:35">00:04:35</a>)  Appleスクリプトが必要になることです。<br>
(<a href="#" class="imk-cue" data-seek="4:40">00:04:40</a>)  それは既定ブラウザをChromeにしていない場合も多いためです。<br>
(<a href="#" class="imk-cue" data-seek="4:51">00:04:51</a>)  スクリプトは簡単です。<br>
(<a href="#" class="imk-cue" data-seek="4:54">00:04:54</a>)  tell application "Google Chrome"<br>
(<a href="#" class="imk-cue" data-seek="5:00">00:05:00</a>)  activate open location <br>
(<a href="#" class="imk-cue" data-seek="5:05">00:05:05</a>)  「音声認識字幕ちゃん」のURLを入れます。<br>
(<a href="#" class="imk-cue" data-seek="5:11">00:05:11</a>)  そして、end tell です。<br>
(<a href="#" class="imk-cue" data-seek="5:19">00:05:19</a>)  その設定したものを、Stream Deckへ登録します。<br>
(<a href="#" class="imk-cue" data-seek="5:26">00:05:26</a>)  Stream Deckで、マルチアクションという形で登録します。<br>
(<a href="#" class="imk-cue" data-seek="5:30">00:05:30</a>)  一つ目は、Chromeで、<br>
(<a href="#" class="imk-cue" data-seek="5:33">00:05:33</a>)  「音声認識字幕ちゃん」を開くAppleスクリプトです。<br>
(<a href="#" class="imk-cue" data-seek="5:40">00:05:40</a>)  二つ目は開いたChromeのサイズ合わせをします。<br>
(<a href="#" class="imk-cue" data-seek="5:48">00:05:48</a>)  先ほど設定したホットキーです。<br>
(<a href="#" class="imk-cue" data-seek="5:56">00:05:56</a>)  以上で設定は終わりです。<br>
(<a href="#" class="imk-cue" data-seek="6:00">00:06:00</a>)  で、Stream Deckからそのマルチアクションを起動します。<br>
(<a href="#" class="imk-cue" data-seek="6:05">00:06:05</a>)  そうすると下のようにですね、Chromeが立ち上がります。<br>
(<a href="#" class="imk-cue" data-seek="6:12">00:06:12</a>)  最初に立ち上げた時は、<br>
(<a href="#" class="imk-cue" data-seek="6:14">00:06:14</a>)  マイクの使用がまだ許可されてないと思いますので、<br>
(<a href="#" class="imk-cue" data-seek="6:18">00:06:18</a>)  それを許可します。<br>
(<a href="#" class="imk-cue" data-seek="6:21">00:06:21</a>)  そうすると以下のように表示されます。<br>
(<a href="#" class="imk-cue" data-seek="6:24">00:06:24</a>)  おはようございます<br>
(<a href="#" class="imk-cue" data-seek="6:26">00:06:26</a>)  Good morning、早上好。<br>
(<a href="#" class="imk-cue" data-seek="6:30">00:06:30</a>)  既にですね。第一翻訳語として英語、第二翻訳語として中国語を設定してあります。<br>
(<a href="#" class="imk-cue" data-seek="6:38">00:06:38</a>)  なのでこういうふうに出てきます。以上で準備が終わりまして、<br>
(<a href="#" class="imk-cue" data-seek="6:49">00:06:49</a>)  次のステップはこれをOBSへ取り込む、<br>
(<a href="#" class="imk-cue" data-seek="6:54">00:06:54</a>)  そういう流れになります。<br>
</p> </details>
<style>
details { font: 16px "Open Sans", Calibri, sans-serif; width: 100%; }
details > summary { padding: 2px 6px; width: 100%; background-color: #ddd; border: none; box-shadow: 3px 3px 4px black; cursor: pointer; list-style: none; }
details > p { font: 14px "Open Sans", Calibri, sans-serif; height:150px; overflow: scroll; background-color: #EDF7FF; padding: 2px 6px; margin: 0; box-shadow: 3px 3px 4px black; }
</style>
</div><script>
(function(){
  var root=document.querySelector(".dr5emd-sublist");
  var video=document.getElementById("myVideo");
  if(!root || !video) return;
  function parseTs(ts){
    if(!ts) return null;
    var p=ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
    if(p.length===2) return p[0]*60 + p[1];
    if(p.length===3) return p[0]*3600 + p[1]*60 + p[2];
    return null;
  }
  root.addEventListener("click", function(e){
    var a=e.target.closest && e.target.closest("a.imk-cue[data-seek]");
    if(!a || !root.contains(a)) return;
    e.preventDefault();
    var sec = parseTs(a.getAttribute("data-seek"));
    if(sec==null) return;
    try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
  });
  video.addEventListener("timeupdate", function(){
    var listContainer = root.querySelector("details > p");
    if(!listContainer) return;
    var cues = listContainer.querySelectorAll("a.imk-cue");
    if(cues.length === 0) return;
    var cur = video.currentTime;
    var active = null;
    for(var i=0; i<cues.length; i++){
        var t = parseTs(cues[i].getAttribute("data-seek"));
        if(t !== null && cur >= t - 0.5){
            active = cues[i];
        } else if(t > cur){
            break;
        }
    }
    if(active){
        if(active.classList.contains("active-hl")) return;
        var old = listContainer.querySelectorAll(".active-hl");
        for(var k=0; k<old.length; k++) old[k].classList.remove("active-hl");
        active.classList.add("active-hl");
        if(listContainer.offsetParent !== null){
            var containerRect = listContainer.getBoundingClientRect();
            var activeRect = active.getBoundingClientRect();
            var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (active.clientHeight / 2);
            listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
        }
    }
  });
})();
</script>
                </div>

  <script>
  (function(){
    var me = document.currentScript;
    var wrapper = me ? me.closest('.sc-dynamic-embed') : null;

    /* -----------------------------------------------
       1. ダウンロードボタンの自動セットアップ機能
       ----------------------------------------------- */
    function setupDownloadButton() {
      var target = wrapper ? wrapper : document;
      var video = target.querySelector('video');
      var dlBtn = target.querySelector('#imk-dynamic-dl-btn');

      if (video && dlBtn && dlBtn.style.display === 'none') {
        var src = video.currentSrc || video.src;
        if (!src) {
          var source = video.querySelector('source');
          if (source) src = source.src;
        }
        if (src) {
          dlBtn.href = src;
          dlBtn.style.display = 'inline-block';
        }
      }
    }

    /* -----------------------------------------------
       2. 字幕制御＆ハイライト機能（iPhone全画面 完全対応版）
       ----------------------------------------------- */
    function initSubtitles() {
      var target = wrapper ? wrapper : document;
      var video = target.querySelector('video');
      var listContainer = target.querySelector('details > p');
      
      if (!video || !listContainer) return false; 

      if (video.dataset.subInit === 'true') return true; 
      video.dataset.subInit = 'true';

      var oldOverlay = target.querySelector('#subtitleOverlay') || target.querySelector('#scSubtitleOverlay');
      if (oldOverlay) {
          oldOverlay.style.setProperty('display', 'none', 'important');
          oldOverlay.innerHTML = ''; 
      }

      function isSpecialMode() {
        var isFs = !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement);
        var isPiP = !!(document.pictureInPictureElement && document.pictureInPictureElement === video) || (video.webkitPresentationMode === "picture-in-picture");
        var isIOSFs = !!video.webkitDisplayingFullscreen; 
        return isFs || isPiP || isIOSFs;
      }

      try {
        if(video.textTracks && video.textTracks.length > 0){
          for(var i=0; i<video.textTracks.length; i++){
             if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions'){
                 video.textTracks[i].mode = "hidden";
             }
          }
        }
      } catch(e){}

      video.addEventListener("webkitbeginfullscreen", function() {
          try {
              if(video.textTracks && video.textTracks.length > 0) {
                  for(var i=0; i<video.textTracks.length; i++){
                      if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') video.textTracks[i].mode = "showing";
                  }
              }
          } catch(e){}
      });
      video.addEventListener("webkitendfullscreen", function() {
          try {
              if(video.textTracks && video.textTracks.length > 0) {
                  for(var i=0; i<video.textTracks.length; i++){
                      if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') video.textTracks[i].mode = "hidden";
                  }
              }
          } catch(e){}
      });

      var detailsEl = target.querySelector("details");
      if (detailsEl) {
          detailsEl.open = true; 
          var summaryEl = detailsEl.querySelector("summary");
          if (summaryEl) summaryEl.textContent = "字幕(シーン)はここをクリック";
      }

      if (!listContainer.dataset.formatted) {
          var html = listContainer.innerHTML;
          var lines = html.split(/<br\s*\/?>/i);
          var newHtml = "";
          for(var j=0; j<lines.length; j++) {
              if(lines[j].trim() === "") continue;
              newHtml += "<span class='imk-line'>" + lines[j] + "</span><br>";
          }
          listContainer.innerHTML = newHtml;
          listContainer.dataset.formatted = "true";
      }

      function parseTs(ts){
        if(!ts) return null;
        var p = ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
        if(p.length===2) return p[0]*60 + p[1];
        if(p.length===3) return p[0]*3600 + p[1]*60 + p[2];
        return null;
      }

      var rootSublist = target.querySelector(".dr5-sublist") || listContainer.parentElement;
      if (rootSublist) {
        rootSublist.addEventListener("click", function(e){
          var a = e.target.closest && e.target.closest("a.imk-cue[data-seek]");
          if(!a) return;
          e.preventDefault();
          var sec = parseTs(a.getAttribute("data-seek"));
          if(sec==null) return;
          try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
        });
      }

      video.addEventListener("timeupdate", function(){
        var desiredMode = isSpecialMode() ? "showing" : "hidden";
        try {
            if(video.textTracks && video.textTracks.length > 0){
                for(var i=0; i<video.textTracks.length; i++){
                    if((video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') && video.textTracks[i].mode !== desiredMode) {
                        video.textTracks[i].mode = desiredMode;
                    }
                }
            }
        } catch(e){}

        var cues = listContainer.querySelectorAll("a.imk-cue");
        if(cues.length === 0) return;
        var cur = video.currentTime;
        var activeA = null;

        for(var i=0; i<cues.length; i++){
            var t = parseTs(cues[i].getAttribute("data-seek"));
            if(t !== null && cur >= t - 0.5){ activeA = cues[i]; } 
            else if(t > cur){ break; }
        }

        if(activeA){
            var activeLine = activeA.closest(".imk-line");
            if(!activeLine) activeLine = activeA;

            if(activeLine.classList.contains("active-hl")) return;

            var allLines = listContainer.querySelectorAll(".imk-line");
            for(var k=0; k<allLines.length; k++) {
                allLines[k].classList.remove("active-hl");
                allLines[k].removeAttribute("style"); 
            }
            var allLinks = listContainer.querySelectorAll("a");
            for(var m=0; m<allLinks.length; m++) {
                allLinks[m].classList.remove("active-hl");
                allLinks[m].removeAttribute("style"); 
            }

            activeLine.classList.add("active-hl");
            activeLine.style.setProperty("background-color", "#ffff00", "important");
            activeLine.style.setProperty("color", "red", "important");
            activeLine.style.setProperty("font-weight", "normal", "important");
            
            var newLinks = activeLine.querySelectorAll("a");
            for(var n=0; n<newLinks.length; n++) {
                newLinks[n].style.setProperty("color", "red", "important");
                newLinks[n].style.setProperty("text-decoration", "none", "important");
            }

            if(listContainer.offsetParent !== null){
                var containerRect = listContainer.getBoundingClientRect();
                var activeRect = activeLine.getBoundingClientRect();
                var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (activeLine.clientHeight / 2);
                listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
            }
        }
      });

      return true;
    }

    /* -----------------------------------------------
       監視タイマー（URL抜き出し＆ボタン表示を継続的に実行）
       ----------------------------------------------- */
    var checks = 0;
    var checkTimer = setInterval(function(){
      setupDownloadButton();
      var success = initSubtitles();
      checks++;
      if (success || checks > 20) { 
        clearInterval(checkTimer);
      }
    }, 500); 

    /* -----------------------------------------------
       3. 画面遷移時の停止機能
       ----------------------------------------------- */
    if (!window.scStopAndGo) {
      window.scStopAndGo = function(event, link){
        try{
          var mediaEls = document.querySelectorAll('video, audio');
          mediaEls.forEach(function(m){
            try{
              if (!m.paused) m.pause();
              if (document.pictureInPictureElement === m && document.exitPictureInPicture) {
                document.exitPictureInPicture().catch(function(){});
              }
            }catch(e){}
          });
        }finally{
          event.preventDefault();
          setTimeout(function(){
            if (link.target === '_blank') {
              window.open(link.href, '_blank');
            } else {
              window.location.href = link.href;
            }
          }, 50);
        }
        return false;
      };
    }
  })();
  </script>
</div>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-dots"/>



<p>最近、ちまたでもスマホの翻訳アプリ、翻訳機器などを目にすることが多くなってきました。しかも同時翻訳までできてしまうのには驚きです。ただ、いざ使おうと思うと、最初はお試しで無料ですが、有料に誘われます。しかもこの翻訳系のサービスは、サブスクが殆どで、毎月料金が発生する形になります。しかもその提供会社はたいていは海外の会社でUSドルベースが多く、円支払いでは毎月3000~5000円などと高額になり、趣味の域を超えます。</p>



<p>今回紹介する「音声認識字幕ちゃん」は、大学の教員をされている西村良太さんが個人で開発され一般に公開されている、<strong>「Webベースの、文字起こし＋同時翻訳アプリ」です。大変使いやすくしかも無料</strong>です。西村さんには感謝申し上げます。</p>



<p>このサイトで提供されている起動用アプリですが、Windows用のbatファイルは直接に動作するので使いやすいですが、Macはそのままクリックしても動かずシェルスクリプトでアプリ化して動かすようにしました。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=6Tp6Gvsb.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=6Tp6Gvsb.png" alt=""/></a><figcaption class="wp-element-caption">MacのAutomatorを起動→アプリケーションを選択→シェルスクリプトを実行を選択→「音声認識字幕ちゃん」からダウンロードしたmac用起動ファイルjimakuChan_nonStop.commandをテキストエディタで開く→最初の#!/bin/shの部分を除いて、Automatorへペースト→xxxxxx.appを作成。</figcaption></figure>



<p>Macは一手間増える感じもありますが、異なる設定条件の複数の字幕ちゃんを起動できるのは素晴らしいことです。</p>



<p>但し、OBSに組み込んで使う時などは、都度、翻訳なしにしたり、言語を切り替えたりすることもありそうで、そうした自由度は、<strong>Webベースの中で、設定を変更できる方が、都合がいい</strong>と思い、今回は、Webをそのまま使うような流れを考えてみました。</p>



<p>但し、日本語の認識、及び、翻訳のレベルは、それほど高いとは言えず、語学を勉強された方からすれば、不満でしょう。標準語でゆっくり話す必要があります。またネットワークの状況で認識の感度が振れます。補助的な用途としてであれば、使い物になるでしょう。</p>



<h3 class="wp-block-heading">ポイント解説</h3>



<p>ビデオを補足します。</p>



<h4 class="wp-block-heading">１　「音声認識字幕ちゃん」はGoogle Chromeで起動する。</h4>



<p>同時翻訳を行う場合は、Google Script API-KEYが必要です。その取得については、</p>




<a rel="noopener" target="_blank" href="http://www.sayonari.com/trans_asr/index_asr.html" title="&#38899;&#22768;&#35469;&#35672;&#23383;&#24149;&#12385;&#12419;&#12435;&#12539;&#12481;&#12515;&#12483;&#12488;&#32763;&#35379;&#12385;&#12419;&#12435;&#65288;&#35199;&#26449;&#33391;&#22826;&#65289;" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/http%3A%2F%2Fwww.sayonari.com%2Ftrans_asr%2Findex_asr.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#38899;&#22768;&#35469;&#35672;&#23383;&#24149;&#12385;&#12419;&#12435;&#12539;&#12481;&#12515;&#12483;&#12488;&#32763;&#35379;&#12385;&#12419;&#12435;&#65288;&#35199;&#26449;&#33391;&#22826;&#65289;</div><div class="blogcard-snippet external-blogcard-snippet">認識ちゃん・翻訳ちゃん（西村良太）</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=http://www.sayonari.com/trans_asr/index_asr.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.sayonari.com</div></div></div></div></a>



<p>の説明に従ってください。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=wta9OmaN.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=wta9OmaN.png" alt=""/></a></figure>



<p></p>



<h4 class="wp-block-heading">２　Google Chromeの起動時のウインドウサイズを固定できるようにする。</h4>



<p>「音声認識字幕ちゃん」の緑色の字幕欄を、OBSでウインドウキャプチャーして、読み込むことを想定していますが、もともとブラウザは、自由にフニャフニャとウインドウサイズを動かすように出来ているため、それを固定させるのが起動用アプリのわけですが、設定変更の自由度が欲しいのとMacの場合の手間の多さから、ブラウザの中の緑色の字幕欄のサイズを固定させて、ブラウザの中で、フォントを変更するようにしたいわけです。</p>



<p>そのために,ウィンドウサイズを自由に追加登録して、それをホットキーで選択できるプラグイン、Window Resizerを使います。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=ym4aFu3U.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=ym4aFu3U.png" alt=""/></a></figure>



<p></p>



<h4 class="wp-block-heading">３　「音声認識字幕ちゃん」を起動させるためのAppleスクリプトを作る。</h4>



<p>私の場合は、既定ブラウザはSafariにしています。確かに、Safariでは、「音声認識字幕ちゃん」の文字起こし翻訳が起動しません。「音声認識字幕ちゃん」のURLはChromeと紐付けする必要があります。</p>



<p>Appleスクリプトは簡単です。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=kmoY8RQO.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=kmoY8RQO.png" alt=""/></a></figure>



<p></p>



<p></p>



<h4 class="wp-block-heading">4　Stream Deckへマルチアクションとして登録する。</h4>



<p>二つのアクションを登録します。一つ目は、Chromeで「音声認識字幕ちゃん」を開く、Appleスクリプトです。二つ目は、そのChromeのサイズを合わせるアクションです。私はStream Deckを使いますが、他にもホットキー、ショートカットを登録できるアプリがありますので、活用ください。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=BUi2Uokj.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=BUi2Uokj.png" alt=""/></a></figure>



<h4 class="wp-block-heading">５　Stream Deckからマルチアクションを起動する。</h4>



<p>Webベースで起動すると、後から簡単に変更ができるので便利です。翻訳言語の変更削除、フォントの変更などがラクです。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=eTAfWvX7.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=eTAfWvX7.png" alt=""/></a></figure>



<p></p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=oiKYNIrO.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=oiKYNIrO.png" alt=""/></a></figure>



<h4 class="wp-block-heading">６　まとめ</h4>



<p>器材記録</p>



<p>音声認識字幕ちゃん<br>Google Chrome<br>Window Resizer ( Chromeプラグイン)<br>Mac スクリプトエディタ<br>Stream Deck<br><br>Adobe Character Animator(スターター)<br>Final Cut Pro<br>Vrew(無料)<br>フリーボード<br>Mac mini M2<br>BGM: オリジナル音楽</p>



<p>以上です。</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18463</post-id>	</item>
		<item>
		<title>Mac OBSの日時表示の珍現象</title>
		<link>https://imakat.com/2023/09/21/18109/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Thu, 21 Sep 2023 07:47:05 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[vimeo]]></category>
		<category><![CDATA[スティーブ・ジョブズ]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[OBS]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=18109</guid>

					<description><![CDATA[上のビデオをご覧ください。 何ぞやムー的、オカルト的な雰囲気を醸し出していますが、それほどでもない、気楽な内容です。 今回は、ちょっと変わった話題、珍現象を紹介します。 Macで、OBSという動画の配信録画アプリを、ぼち [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>



<div style="position:relative;">
<iframe src="https://player.vimeo.com/video/866635260?texttrack=ja&amp;title=0&amp;&#10;byline=0&amp;&#10;muted=0&amp;&#10;pip=1&amp;&#10;portrait=0&amp;&#10;autopause=0&amp;" style="position:absolute;top:0;
left:0;
width:100%;
height:100%;
" frameborder="0" allow="autoplay;
fullscreen" allowfullscreen="">
</iframe>
</div>
<script src="https://player.vimeo.com/api/player.js">
</script>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-dots"/>



<p>上のビデオをご覧ください。</p>



<p>何ぞやムー的、オカルト的な雰囲気を醸し出していますが、それほどでもない、気楽な内容です。</p>



<p>今回は、ちょっと変わった話題、珍現象を紹介します。</p>



<p>Macで、OBSという動画の配信録画アプリを、ぼちぼちと使っています。録画録音の目的で使うつもりです。OBSのスクリーンの左側にiPadの画面、右下にiPhoneの画面をミラーリングしています。iPad、iPhoneとMacの接続は、安定させるために、無線ではなくUSBケーブルで行っています。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=blJOpG0m.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=blJOpG0m.png" alt=""/></a><figcaption class="wp-element-caption">Macの画面：OBSアプリの中に、iPad、iPhone、Webカメラ、メディアソースがあり、デスクトップ音声に、音楽制作アプリ、他音楽再生アプリがある。</figcaption></figure>



<p>動画を目にして、カンの良い方ですと、すぐに気づかれたかも知れませんが、iPad、iPhoneの日時表示が、既に数分経っているのに、9:41のまま動いていない。変だなと。</p>



<p>「1月9日火曜日9:41」となっていますが、現日付は全然違うのですね。この動画を撮影しているのは、9月21日木曜日です。</p>



<p>OBSに表示された日時と、iPad本体、iPhone本体に表示された日時が違うのか、確認したら、本体側の日時も「1月9日火曜日9:41」で一致していました。</p>



<p>ただし、この日付時刻の表示部分は、私が動画作成するときに特に弊害にはならないので、ほっといて問題ないとは思います。</p>



<p>ただ、来年2024年の1月9日は火曜日。何か気になるな。</p>



<p>そこでアップル社に、問い合わせをしました。</p>



<p>最初、聞いたことのない現象だとコメントされた後、すぐに、</p>



<p>「2007年の1月9日火曜日９:41は、<strong><span class="marker">スティーブ・ジョブズが初代iPhoneを発表した記念すべき日時</span></strong>です。」と説明されました。OBS側でデバイスから得た情報を表示しているということで、それ以上のことは分からないとのことでした。（<a rel="noopener" target="_blank" href="https://iphone-mania.jp/news-271399/" data-type="link" data-id="https://iphone-mania.jp/news-271399/">初代iPhone発表を語る記事<span class="fa fa-external-link external-icon anchor-icon"></span></a>）</p>



<p>アップル社が掌握しているようなハッキングやウイルスとは違うようですので、アップル社らしい遊び心だと、気持ちが愉快になりました。</p>



<p>iPad,iPhoneのUSBケーブルを外すと、すぐに、正しい日付時刻表示に戻りますので、外した後、iPad,iPhoneはふだん通り問題なく使用できます。</p>



<p>そもそもは、MacのOBSにおける複数デバイスの扱い、複数音声トラックの設定についてのブログを書こうとしていましたが、面白いものを発見してしまい、寄り道の記事となりました。</p>



<p>あと、いずれ書きたいと思いますが、私は、MacかWindowsのどちらかを使うのではなく、MacもWindowsも使うです。制作関係はMac、事務処理はWindowsですね。また、まだまだWindowsでしか使えない、Windowsの方が快適なサービスもあります。</p>



<p>以上です。</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18109</post-id>	</item>
	</channel>
</rss>
