顯示具有 Windows 標籤的文章。 顯示所有文章
顯示具有 Windows 標籤的文章。 顯示所有文章

2024年12月17日 星期二

Intel 顯卡自訂解析度

2024年12月17日 星期二

打從用自己的薪水去中華商場扛回的第一部 80386 DX 20 開始,就一路這樣不知道花了多少新臺幣追新的規格。最近一次買新的電腦應該十幾年前的事了。家裡淨是一些別人汰換下來的桌機跟筆電,原本都用得好好的,最近是狀況一堆。說實話,自從工作上不用維護別人的電腦以後,硬體、作業系統方面的新知接觸的也少了,刀劍不磨,果然會變鈍。不過電腦跟人一樣,相處久了,就會多熟悉一點,甚至連底都可以摸清了。小孩兩年多前閒置的筆電,一直有大大小的狀況,不能開機,原來是因為 CMOS 沒電了;進 Windows 10 很不穩定,動不動就當機,連 dead blue 都看不到,應該是 NVIDIA NVS 5200M 顯示卡在作怪,索性將它停用了 [圖1]。

[圖1] NVIDIA NVS 5200M 停用

NVIDIA 顯卡停用後,剩下的 Intel 顯卡,解析度只剩下三種可以選了 [圖2]

[圖2] Intel 內顯的解析度清單

我想用 OBS 直接錄 720P 的教學影片,就變成還要重新編碼,Intel 顯卡可以自訂解析度,工具在哪裡?底下是實作的記錄。

先把 Intel 顯卡自訂解析度的工具程式找出來,如果已經安裝好,可以在 Windows\System32 的資料夾中,用「custom」的關鍵字來找:

[圖3] CustomModeApp.exe

如 [圖3] 自訂解析度的工具檔名為「CustomModeApp.exe」。找到以後,就可以開啟它,應該會出現如 [圖4] 的警告對話框:

[圖4] 自訂解析度工具使用前的警訊

當然要按「是」的按鈕才能繼續。

進入「Intel HD Graphics 控制台 / 顯示器自訂解析度」後,就如 [圖5] 依序輸入相關的設定值:

[圖5] 自訂解析度

輸入完,只要按了畫面右下角的加號 (+) 鈕,並按完「是」,就新增完一筆。

[圖6] 確認新增自訂的解析度

Windows 顯示器的設定裡,顯示器解析度清單也多了一個選項了:


那到底會不會發生如一執行自訂工具警語中的那些負面的影響呢?哈!我也是第一次這樣玩,所以不負任何擔保責任哦!

[註] 後來發現也可以利用Windows 顯示器的設定裡的「進階顯示器設定」,找「顯示器 1 的顯示卡內容」,開啟後,在「介面卡」的分頁中,按「列出所有模式」來找想用的。


解決Windows Update 錯誤代碼 0x80242fff

之前 Windows 10 在進行更新的過程中,不明原因當機過,重新開機後 Windows Update 總是出現 0x80242fff 的錯誤代碼,連帶影響新的更新。看起來應該是有檔案不完整,干擾了更新旳流程。只好手動改名,讓 Windows Update 讀取不到錯誤的檔案。

關鍵就在將以下兩個資料夾改名稱:

  • Windows\SoftwareDistribution
  • Windows\System32\catroot2

首先以系統管理員開啟一個「命令提示字元」的視窗,然後輸入以下的指令:

net stop wuauserv
net stop cryptSvc
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv
net start cryptSvc

註: 網路上看有人建議還要停止另外兩個服務,我安裝的 Windows 10 家用版則不需要:
  • net stop bits
  • net stop msiserver
如果有順利執行完,再重新讓 Windows Update 檢查更新,應該就可以恢復功能了。


2024年12月13日 星期五

ASUS 舊筆電的觸控板不正常

2024年12月13日 星期五

最近老桌機頻頻當機,原因一直找不出來,換新機的動機並不強烈,大不了改用從別人那邊接收來的舊筆電,插電、接螢幕當桌機用。花了幾天玩了兩次的 macOS Catalina Patcher,終於將自己的 MBP 2010 middle 由 OS X 10.13 升級到  OS X 10.15.7 (改天再整理一下筆記)。不過,殘念,Chrome / Edge 不但都停止支援,不能再更新,居然連跑 HTML5 FUN 的遊戲都會卡卡的,裝了 Windows 10 好很多,但是驅動程式也是個問題,還是拿出接收自朋友的筆電安裝 Windows 比較直接。

之前去外面講課都會帶 ASUS X533M,幾個月前突然不能開機了,試了好久,就將它丟到一旁。昨天本來要拆它的 8GB 記憶體(DDR3L 12800)替換 ASUS X401A 的 4GB 記憶體(DDR3 12800),換好後不能開機;只好拆另一部也罷工的 Dell 筆電中,16GB 的其中一片來試。這才發現,原來 X533M 的那片記憶體壞了,難怪無法開機。將好的兩片 8GB 記憶體分別安裝到兩部 ASUS 的舊筆電中,哈!都又活過來了!

因為之前的 SSD 都拿去玩 macOS Catalina Patcher 了,裝回 ASUS 筆電只好都重新安裝 Windows 10。這幾天一直在重灌系統,累積了不少經驗值,本篇先記錄一下有關 ASUS 舊筆電觸控板不正常的問題。

在安裝完 Windows 10 ,並更新過系統以後,兩部 ASUS 舊筆電的觸控板都只有滑鼠左鍵的功能,「手勢」的部份都沒反應,即使在硬體清單中已有「ASUS Touchpad」,且看似驅動程式安裝正確了,觸控板的功能仍未正常動作。

試了半天,解決的方法其實很簡單,如果硬體清單中已有「ASUS Touchpad」,將它移除:

[圖1] 解除 ASUS Touchpad 

做完 [圖1] 的動作,重新開機以後,Windows 10 將 ASUS Touchpad 自動裝回來以後,Touchpad 就可以正常使用手勢來控制了。

另外,像搭配 fn 鍵控制的功能,則需要在線上更新中,勾選選用的驅動程式,才會正常運作。本以為這兩部舊筆電只能支援到 Windows 7/8 ,沒想到還能跑 Windows 10,8GB 的記憶體,加上 SSD ,應該還可以撐一下。是說,Windows 10 也快要停更了,最後應該還是像我目前桌機用的 Windows 7 一樣的下場,一個個軟體都不支援;整天忙著玩耍,不努力賺錢,就要省著點花用,屆時有需要換再說吧!


2024年8月3日 星期六

以搖桿輔助 oTranscribe 製作 ICRT 字幕

2024年8月3日 星期六

最近一直在找適合練英文的材料,本來是下載 VOA Learning English 的音檔,再用 OpenAI Whisper 製作字幕檔;這幾天轉移陣地,將目標鎖定在 ICRT。ICRT 一樣也有音檔跟文字稿,但是可以依照不同程度,選用不同的單元。看一下 ICRT Pocast 的部份清單:

問了家中的小孩,原來國中吃午餐時,學校會播放 ICRT News Bites 的內容。那同學們有沒有在聽呢?答案是什麼,大家應該猜得出來吧!

ICRT 的音檔跟文稿看來是放在 SoundOn 中,利用訂閱的連結,就可以抓取文字內容與音檔的連結了。本來我只取了音檔,讓 OpenAI Whisper 進行語音辨識,製作 SRT 格式的字幕檔案。七月份節目八個 News Bites 的內容都辨識完,並且一個個邊聽、邊修正以後,有幾個發現:

  • OpenAI Whisper 真有「幻聽」的情形,有時會「胡說八道」,尤其是一大段英文,再來一段中文時;另外,雖然選擇的語言是英文,講中文時,它還是會辨識出中文,並輸出中文,如果出現簡體字,那就設定 prompt 為「以下是英文或繁體中文的句字」,可以大幅減少簡體字出現;英文、中文混用時,模型選用 large v3 比較不會有錯誤。
  • 如果有文稿跟音檔,使用 oTranscribe 手動加上時間截記,花的時間並不會比錯誤連連時的 OpenAI Whisper + 校正要多多少。

一樣是用 OpenAI Whisper 進行語音轉文字,校正自己影片的字幕檔,比校正 ICRT 的字幕檔要容易多了。哈!主要是 ICRT 的內容我並沒有完全掌握,要判斷得花更多時間。

玩了一天以後,我決定改用 ICRT 的音檔跟文稿,在 oTranscribe 中,邊聽,邊加上時間截記,以人工的方式來完成字幕檔。這樣一來,「輔具」就很重要了!

[圖1] 使用搖桿當 oTranscribe 的輔具

寫了一個小工具,可以由 ICRT 在 SoundOn 的訂閱資料檔中,解析出每一則文的以下欄位:

  • title : 標題。
  • pubDate : 發布時間。
  • link  : 該則在 SoundOn 的頁面網址。
  • enclosure : MP3 音檔的網址。
  • summary : 節目內容的文稿。

[圖2] 解析 ICRT RSS 的內容

將前述的內容複製到 oTranscribe ,並載入聲音檔以後,可以準備進行最花時間的聽打部份了。

oTranscribe 中,由於音檔的逐字稿已經有了,需要處理的就是逐句加上「時間戳記」。oTranscribe 使用 Esc 鍵來播放或暫停播放影音,使用 Ctrl + J 來插入「時間戳記」。本來我是很老實地照它預設的按鍵在操作,但是兩隻手實在忙到不可開交。拿出了簡報筆,但它的功能鍵似乎無法被 oTranscribe 接受。突然靈光一閃,「搖桿」!我之前買給學生玩的四支搖桿晾在一旁很久了,如果加上 JoyToKeyhttps://joytokey.net/en/ ) ,一定可以直接使用 oTranscribe 的預設按鍵來控制了。於是將搖桿的 [1] 按鈕對應到鍵盤的 Esc 鍵,[3] 按鈕對應到鍵盤的 Ctrl + J。哈!試了一下,果然效率大大地提升了。

[圖3] oTranscribe 匯出 SRT 字幕檔

為了更「神速」,乾脆幫 oTranscribe 加上「自動跳到下一句」的功能。如果在 oTranscribe 的網址後面加上 ?auto=1 ,有了 auto 的參數,當我們插入時間戳記後,游標會自動移到下一段的開頭。

後來請小孩來幫忙按搖桿,我負責控制「時間戳記」的插入點。哈!其實這工具我一隻手負責一項也能完成的。請她來幫忙是帶有心機的。昨天「玩」了一天的聽音校對文字,發現了一件事,因為要「專心」聽,校對完,內容也記得了,所以今天刻意請小孩來按搖桿,按完一篇,她也看完一篇了。哈!我這種小心機,也滿不錯的!

[圖4] 使用 HTML5 FUN Audio Player 來練英文

現在製作的字幕檔都會在最後面加上原文的網址及音檔的網址,一來好溯源,再來是使用 HTML5 FUN Audio Player 來載入字幕檔時,如果字幕檔有網址,而且網址中帶有影音的附檔名(ex. .mp3、.mp4 ......),就會自動載入該影音,可以少掉一個載入影音的步驟。哈!能偷懶,當然就偷懶囉!有沒有貼心 ^_^

後記:使用 Chrome 擴充功能來製作字幕

2024年10月起,如果是使用 Chrome 瀏覽器的話,現在可以安裝底下兩個 Chrome 的擴充功能:

然後開啟 ICRT 的網站、 ICRT 的 Pocast ,或是 VOA Learning English 的網站,就能直接邊聽音檔,邊加入時間戳記,並匯出字幕檔;如果有搖桿,也可以直接在瀏覽器中使用,不用再安裝別的工具了。

相關連結


2024年7月10日 星期三

以 MSYS2 在 Windows 構建 Translate Shell 的環境

2024年7月10日 星期三

上個月底幫小孩抓了英文套書的所有音檔,為了方便檢索,利用 OpenAI Whisper 轉好了字幕檔,接著又想弄個雙言的字幕檔,連聽、讀的小工具都寫好了;哈!像滾雪球一樣,愈玩愈大。

在尋找能批次翻譯的工具時,發現了這個 Translate Shell

看中它的原因有兩個,它可以選用 Google 或是 Bing 來進行翻譯,還能將文字轉合成語音(TTS)後的檔案直接儲存。Google TTS 儲存成 MP3 之前玩過,Bing TTS 轉存以前玩過較複雜的,但 Translate Shell 的看起來較簡單。但是的但是,試過才發現 Translate Shell 中的 Bing TTS 抓取程序已經不能用了。不過!研究過以後,我已經知道目前 Bing TTS 的擷取程序了,而且也以 Python 跟 JavaScript 實作過,要轉為 Traslate Shell 的 gawk 語法,也不是難事。

針對 Bing TTS 的程序修正過以後的版本放在這裡:

Translate Shell 滿特別的地方是它使用 GNU Bash 的環境,執行 GNU Awk 的指令來完成翻譯或是抓取 TTS 合成語音。這兩樣如果是在 Unix like 中,要安裝及使用,實在太容易了。但是在我的 Windows 7 中,雖然有 bash ,也有 gawk,但試了好幾天,總是看得到誤錯訊息,而看不見翻譯結果。本來已經放棄 Windows,改到 Mac OS X 、 Linux Mint 跟 Google Colab 中去測試我修改好的 Translate Shell 了。重新再找 Windows 7 的解決方案時,看到了一個對我來說很新鮮的東西 「MYSYS2」 :

它可以在 Windows 建構一個誇平臺的開放環境,不但有我需要玩 Translate Shell 的環境,安裝完,佔的磁碟空間也不大。那有沒有支援 Windows 7 呢?幸好!舊版的是可以安裝的。詳細說明在官網中:

支援 Windows 7 的最後版本在這裡下載:

安裝完,測試了一下,在 MSYS2 中可以正常執行 Translate Shell ,這樣子我修改程式就不用在不同系統中切來切去了。

在 Windows 中想編譯 Translate Shell 可以下這樣的指令:

gawk -f build.awk build -target=bash -type=release

成功的話,可以在 build 目錄中找到 trans 這個檔案。

在 MSYS2 中執行 Translate Shell

Translate Shell 以這樣的指令可以製作中文字串的合成語音:

trans -e bing -b -speak -no-translate -no-play -download-audio-as tts.mp3 zh-TW:en "我現在要來測試一下語音合成的功能,將語音儲存為MP3檔案"

參數記錄一下:

  • -e bing : 使用 Bing 來進行翻譯或合成語音(不指定時,使用 Google)。
  • -b : 使用精簡模式,顯示較少的結果。
  • -speak : 說出合成原文的語音;如果想要播放的是翻譯的語音,就用 -p 的參數。
  • -no-translate : 只合成語音,不翻譯。
  • -no-play : 不播放語音。
  • -download-audio-as : 將語音儲存為指定的檔名(本例是儲存為 tts.mp3)。
  • zh-TW:en 原文為繁體中文,翻譯為英文(雖然本例不進行翻譯)。
後續再來分享 HTML5 支援多語字幕的 MP3 聽讀小工具,及以 Python 批次呼叫翻譯、下載合成語音的小工具。

相關連結


2023年3月23日 星期四

在 Chrome 中使用 New Bing Chat

2023年3月23日 星期四

 想要使用微軟的 New Bing Chat 一定要用 Edge 嗎?哈!可是我的老電腦是 Windows 7 ,根本無法安裝 Edge 啊!

沒關係,只要讓 Chrome 或是 Firefox ...... 「宣稱」自己是 Edge 就可以使用 New Bing Chat 了。 

以 Chrome 來說,最簡單也最安全的方式是安裝 Goolge 自家的擴充功能「User-Agent Switcher for Chrome」,在「chrome 線上應用程式商店」中的網址如下:

這個擴充功能可以讓我們自訂在哪一個網站時,要「宣稱」使用的是哪一種瀏覽器(其實就是送資料給該網站前,先更改了「User-Agent」)。

安裝擴充功能

先在 Chrome 中打開前述的網址,然後參考 [圖1] 及 [圖2] 來安裝擴充功能「User-Agent Switcher for Chrome」:

[圖1] 按「加到 Chrome」鈕

[圖2] 按「新增擴充功能」


設定擴充功能

安裝好「User-Agent Switcher for Chrome」,因為它內建的資料中,並沒有 Edge 瀏覽器的,所以我們必須自己新增 Edge 瀏覽器的相關資料;而且我們也只想應用在 New Bing 網站而已,所以也要告訴擴充功能,什麼時候才要啟用。

因為 New Bing Chat 目前只會檢查我們送出的「User-Agent」是不是 Edge 的,所以我們設定的目標就是:

  • 只有在 New Bing 的網站時才「宣稱」是 Edge,New Bing 的網址是:
    • www.bing.com
  • Edge 的 User-Agent 假設是:
    • Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1474.0

設定好目標以後,我們就可以來進行擴充功能的設定了。

先開啟「User-Agent Switcher for Chrome」的「選項」:

[圖3] 在擴充功能中按「詳細資料」

[圖4] 在「擴充功能選項」按開啟選項的圖示

進入「User-Agent Switcher for Chrome」的設定畫面後,先在「Custom User-Agents」的 Custom User-Agent List 下方新增 Edge 的資料,填入以下資料:

  • New User-agent name : 
    • Edge
  • New User-Agent String :
    • Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1474.0
  • Group :
    • Edge
  • Append? :
    • 選取「Replace」
  • Indicator Flag : 
    • Edge

輸入完畢,類似 [圖5],就按「Add」鈕:

[圖5] 在「Custom User-Agent List 」新增 Edge 的資料

最後,要指定在 www.bing.com 時,「宣稱」是 Edge。按一下左側選單中的「Permanent Spoof List」,然後先在「Domain」的欄位中,輸入 bing 的網域名稱「 www.bing.com」;接著在「User-Agent String」清單中選取前一步驟新增好的「Edge」;都好了就如 [圖6] 按 [Add] 鈕:

[圖6] 在 「Permanent Spoof List」設定套用的網域

新增完,在「Permanent Spoof List」的清單中,應該會像 [圖7] 多一筆出來:

[圖7] 「Permanent Spoof List」多了一筆資料

開始在 Chrome 中使用 New Bing Chat

如果前面「User-Agent Switcher for Chrome」的安裝與設定都完成了,只要在 Chrome 中開啟 New Bing Chat,就能像 Edge 一樣使用了。

[圖8] 在 Chrome 中使用 New Bing Chat

在 Firefox 使用 New Bing Chat

在 Chrome 中可以,在 Firefox 也可以嗎?

如果在 Firefox 中,可以這樣:

  • 在網址列中輸入以下內容,並按 Enter 鍵:
    •  about:config
  • 看到一個警告的訊息,按:
    • 「我承諾我會小心」
  • 在搜尋欄中輸入這項設定:
    •  general.useragent.override
  • 應該看到一個名為 general.useragent.override 的設定項目。
    • 按一下「字串」,再按一下「加號」,即可輸入 Edge 的 User-Agent 字串。

經過這樣的設定,也是一樣可以使用 New Bing Chat,只是,試過後才發現一個大問題,在 New Bing Chat 的畫面中,無法捲動畫面,這樣子,前面的對話就看不到了。

所以記得要在 about:config 中順便找到這項目:

  • layout.css.overflow-overlay.enabled

預設值是「false」,按一下最右側的「切換圖示」,就可以變成「true」。

網過前述的兩項設定,就可以在 Friefox 中使用 New Bing Chat。

後記

  • 2023.04.18 白天在 Chrome 中使用「User-Agent Switcher for Chrome」還用過 Bing Chat 的,到半夜突然發現不能用了,監看傳輸的 header,確認「User-Agent Switcher for Chrome」是有工作的,但就是不能用。查了一下,網路上使用其它 Extension 的人也是在哀號,看來是 Bing 不知道動了什麼手腳。不過 Friefox 那招倒是還有用。
    試了一下,在 Chrome 中,這招有效:
    1. 按 Ctrl + Shift + I 叫出「開發人員工具」,也可以按 Chrome 右上方的三個點點,然後按「更多工具」中的「開發人員工具」。
    2. 在「開發人員工具」的右上角按三個點點,然後按「Run command」,其實也可以用 Ctrl + Shift + P 直接叫出。
    3. 在「Run > 」的輸入區中輸入「network conditions」,看到下方清單有「Show Network conditions Drawer」,按一下。
    4. 找到「User agent」,將「Use browser default」的勾勾取消。
    5. 在下方清單中選「Microsoft Edge」中的想設定的。
    6. 先不要關閉「開發人員工具」,打開 Bing Chat,確認已經可以和 Bing Chat 對話以後,才可以關閉「開發人員工具」,不然「Use browser default」的勾勾又會被打勾,就無法使用 Bing Chat。
  • 要是覺得麻煩,可以試這個擴充功能,不過,這個就不是 Google 自家的,風險自負:


2022年7月21日 星期四

DIY : 簡易混音器

2022年7月21日 星期四

2021 年時,想用手機錄畫面,才發現 Android 錄畫面時,錄不到輸出的聲音,查了半天資料,找到了關鍵字「audio loopback」,然後參考了這篇「Audio Loopback Dongle」:

它主要是將原本要輸出給耳機的聲音,導回給麥克風;而在錄畫面時,麥克風的聲音是可以同步錄下的,這樣一來,就能把原本錄不到的聲音,用跳板的方式,同步錄下來了。

參考「Audio Loopback Dongle」的電路圖,稍微修了一下,另外加上 TRRS 母座,可以插耳麥接聽輸出的聲及說話。這個簡易混音器,試了一下,搭配 Kimcy929a 的 Screen Recorder :

就可以解決我 Android 手機無法同時錄影跟錄音的問題 (如果 Android 的版本較新,這個問題應該已經解決,不過,我的手機只能到 Android 9)。

後來看到有人在討論 Google Meet 除了用「分頁模式」,遠端學生無法聽到老師聲音的問題;前面的簡易混音器再度登場,它可以將電腦本來要輸出給喇叭的音源和麥克風混音以後,再由麥克風的途徑輸入給電腦,這樣子,無論 Google Meet 使用任何模式分享畫面,遠端都可以同時聽到電腦的輸出的聲音及麥克風的聲音。

不過,在使用後,才發現,如果沒有音量調整實體鈕來控制電腦輸出聲音的大小,有時會蓋掉麥克風的人聲,所以後來又幫簡易混音器加上了一個電位器,這樣使用時更方便。[圖1] 是修改過後的電路圖:

[圖1] 簡易混音器電路圖

[圖2] [圖3] 的混音器是利用舊電話拆下來的電位器(R3: 50kΩ)、舊平板拆下來的 TRRS 母座(J2) 及一個全新的 TRRS 端子(J1)所組成的。

[圖2] 簡易混音器
[圖3] 簡易混音器

使用時,左側的 J2 可以插上耳麥監聽及說話;右側的 J1 則插到手機或是平板的耳麥插座,如果是接桌機,則可以用一母(TRRS)轉二公(TRS)的轉接線 [圖4],將 J1 分為耳機插頭跟麥克風插頭,再插到電腦的耳機與麥克風插孔中。

[圖4] TRRS 轉 TRS x 2 的轉接線

看到這邊,哇!可以應用在手機或平板,是不是就可以解決 Google Meet 在 iPad 上無法分享聲音的問題?

iPad 與 Google Meet 分享聲音

關於 Google Meet 在 iPad 分享聲音的問題,可以看一下我錄的測試影片:

影片中使用的簡易混音器是 [圖5] 這個:

[圖5] 可斷開麥克風功的簡易混音器

測試影片中的 iPad 有成功在 Google Meet 中分享聲音給遠端,主要是有特別去將「耳機」的音量及「電話」的音量調小,前者用虛擬調整鈕調整,後者用 iPad 的實體按鈕調整。

不過,只要使用麥克風講話,或是遠端的人有發言,分享的聲音就可能因為回授的關係而變小或是消失,所以需要將 [圖1] 右側中的 J1 插掉後重插(有可能因為這樣而讓 Google Meet 斷線)。如果音量調整得不好,或是大家都很多話,會很不穩定。

所以結論是,使用 Google Meet 分享聲音,還是筆電或是桌機比較穩定而容易些。

立體麥克風

前面 [圖2] 和 [圖5] 的混音器,設計時,因為考慮可以直接插手機或是平板,所以都是針對 TRRS 的端子設計,也就是麥克風都是單聲道而已,所以只用一個電位器來調整音量。

個人常用的麥克風是以前 AIWA 隨身聽附的立體電容式麥克風,為了讓它保持立體聲,所以我利用光碟機拆下來的控制板 [圖6] :

[圖6] 光碟機的控制板

改裝成 [圖7] 的混音器:

[圖7] 光碟機控板改裝的簡易混音器

我將接到電腦喇叭和麥克風的外接線改了一下,加裝了 2.54 的母座,這樣就可以直接插在三根 2.54 的針腳上,喇叭的音量可以用雙聲道的電位器來調整大小聲,然後再串接到麥克風的左、右聲道,這樣子,就可以維持麥克風的立體聲。


2022年6月4日 星期六

ffplay : 播放目錄中的所有影音檔

2022年6月4日 星期六

 ffplay 是 FFmpeg 套件中的一個影音播放器,沒有複雜的功能,哈!我喜歡它的精簡,不過似乎沒有支援播放清單的功能。沒關係,有人跟我有一樣的需求,找到這個討論串:

裡面看到了幾個 ffplay 的參數:

  • -autoexit : 播放完自動結束程式
  • -nodisp : 不顯示播放器

再加上 ffmpeg 也有的參數,「-hide_banner」或「-v quiet」,可以不顯示播放器的詳細資訊,畫面就更乾淨了。

所以用 ffplay 來播放 mp3 ,如果只播放一次就結束,指令可以這樣:

ffmpeg -hide_banner -autoexeit -nodisp XXX.mp3

想讓畫面更精簡就:

ffmpeg  -v quiet -autoexeit -nodisp XXX.mp3

需要更多選項,可以參考官網文件:

播放清單呢?

假設要播放的 mp3 都放在一個資料夾中了,在 Windows 中,就可以先切換到該資料夾中,結 FOR /F 的指令,像這樣:

FOR  /F %f IN ('dir /b') DO ffplay -autoexit -nodisp -v quiet "%f"

上面用「dir /b」來取得該目前目錄的所有檔案清單,然後一個個檔名指定給 %f。

「DO」後面就是 ffplay 的指令了,只是檔名的參數用「 %f」。

其它非 Windows 的系統的話,也是有相對應的 shell 指令可以用的。

哈!滿有意思的。


ffplay : Windows 中無法播放 mp3

FFmpeg 中,除了 ffmpeg 以外,還有 ffprobe 和 ffplay 兩個很好用的工具,之前遇過在 Windows 中使用 ffplay 來播放影片時,看得到畫面,卻沒有聲音。因為還有 VLC Player 可以用,所以也就沒管它;這兩天想直接在程式中,下指令來呼叫 ffplay 播放 mp3,當然還是不能用。

不過,這回有認真看錯誤訊息了,大概長這樣:

SDL_OpenAudio (1 channels, 22050 Hz):  WASAPI can't initialize audio client: CoInitialize

查了一下:

只要在 Windows 中設定一下環境變數「SDL_AUDIODRIVER」,讓播放器知道要用哪一個聲音的驅動程式即可解決。例如在執行 ffplay 之前,執行這一行:

set SDL_AUDIODRIVER=directsound

如果常用,就在 Windows 的系統中設定環境變數,這樣就可以一勞永逸了。


2022年5月31日 星期二

批次檔的 FOR /F 與帶有空格的檔名

2022年5月31日 星期二

 在 Windows 的批次檔中使用 FOR /F 可以讀取文字檔,然後一行行拿來處理。最近常拿它來結合 ffmpeg 處理英文的語音 mp3 檔案。不過今天遇到一個情形,「book」、「book bag」這兩行讀入後,被 FOR /F 同樣解讀為「book」了。這個狀況在別的單字也會出現,也就是,遇到空白就被截斷。

看一下 FOR 的語法說明中有這個:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

關於引號中的 options 有一個選項「delims」是和前述的問題相關的:

delims=xxx      - 指定分隔符號集。這會取代預設的空格與定位字元的分隔符號集。

當我們使用 FOR /F 讀入一個文字檔時,讀入一行以後,預設會以空格或定位字元來當分隔符號,將這一行拆成多個欄位。所以前面提到的「book bag」,就因為空格,被拆成兩個,只取了前面的「book」。

為了解決這個問題,當然就是自己設定「delims」的選項,不要讓它使用空格來當分隔的符號。

例如:

FOR /F  "delims=" %%w IN (list.txt) DO (
    ..........
)

上面的指令會一行行讀取 list.txt ,然後將該行,整行的資料指定給 %%w 這個變數。

最關鍵就在指令裡的這個:

"delims="

哈!等號後面沒有東西了!它的意思就是不使用分隔任何分隔符號來拆解字串,所以我們就能取得整行字串囉!


2022年5月17日 星期二

批次下載 FreeTTS mp3

2022年5月17日 星期二

朋友推薦可以將 TTS 語音下載為 mp3 檔案,而且授權很開放的網站 FreeTTS:

雖然沒有中文的,但是用來下載英文的語音也不錯。進入網站後,在輸入區輸入想讓它合成語音的文字,並選取想用的聲音,最後再按 [Convert to Mp3] 的按鈕,即可播放聲音,或是下載 MP3 檔案。

研究了 FreeTTS 下載的流程,大概可以分為三個部份:

  1. 填表單取得文字與設定內容。
  2. 由語音合成主機合成語音,並回傳一個帶有 MP3 檔案相關資料的 JSON 格式設定檔。
  3. 由 JSON 檔中解析出 MP3 檔案的 id ,並組合成聲音檔的網址,供播放或是下載。

FreeTTS 合成完語音檔以後,會回傳的 JSON 檔內容大概長這樣:

{"msg":"True","id":"7ef38234-5965-4b5a-9c98-45e7a39b87c5.mp3","counts":5055}

關鍵在 "id" ,它就是存放在主機上的 MP3 檔檔名。

所以想下載 FreeTTS 的 MP3 檔案必須下載兩次檔案,還要能解析第一次下載回來 JSON 檔中的 id,供第二次下載真正的 MP3 檔案。

查了一下,我常用來下載檔案的 wget 或是 curl 可以解析網頁中的連結,似乎沒有解析 JSON 檔案,並重組網址的功能。通常「卡關」了,總能得看新的東西;找方法的過程中,看到了一個叫「jq」的小工具:

它不但小巧,而且也跨平臺;和 wget / curl 搭配,各司其職,還滿好用的。

jq 的功能不少,不過我只要能由 JSON 中找出 id 的值(MP3的檔名),並在前面加上主機的網址即可。如果由 stdin 讀入資料,就是底下的語法:

jq -r "\"https://freetts.com/audio/\"+.id" 

找 JSON 中的 id 用了「.id」;使用了 -r 的參數,將字串頭尾的引號去掉,並利用加號來合成檔案的下載網址。要注意的是,在引號中使用引號,得加上反斜線。

wget 中則使用了以下的參數:

  • -nv : 不顯示訊息,主要是用在第一次抓到的 JSON 檔內容要直接輸出到 stdout,所以不容許有其它文字。
  • -c : 遇到錯誤仍繼續
  • -O : 指定輸出到哪裡,第一次用「-O - 」讓它輸出到 stdout,輸出結果(JSON檔)給 jq;第二次輸出到指定檔名的檔案。
  • -i : 指定由哪裡取得網址,應用在第二次,用「-i - 」,由 stdin 取得 jq 重組後的 mp3 下載網址。

例如我想下載「just a test」的 TTS MP3 檔案,如果 wget 和 jq 都放在路徑中了,就用這一行指令:

wget -nv -c -O - "https://freetts.com/Home/PlayAudio?Language=en-US&Voice=Joey_Male&id=Joey&type=1&TextMessage=this is a test" | jq -r "\"https://freetts.com/audio/\"+.id" | wget -i - -O "this is a test.mp3"

利用這個方法,再結合批次檔的指令,就可以進行批次下載語音檔囉!

底下是我在 Windows 7 的實驗的批次檔內容:

@ECHO OFF
SetLocal EnableExtensions EnableDelayedExpansion

REM wget 程式的路徑設定
set wgetPath=wget

REM jq 程式的路徑設定
set jqPath=jq-win64

REM FreeTTS 聲音參數
set ttsLanguage=en-US
set ttsVoice=Joey_Male
set ttsId=Joey

REM 單字的欄位分隔符號
set seperator=##

REM 檢查是否有參數, 沒有就提示並結束
if %1test==test goto error
if %2test==test goto error

REM 抓第2個參數為 mp3 輸出資料夾
set outputFolderName=%2

REM 建新的資料夾以存放處理好的檔案
mkdir %outputFolderName%

set wgetWait=--wait 3 --random-wait

REM 計數器,用來判斷是否要暫停久一點
set /a x=0

REM 抓取第1個參數的文字檔,一行行套到網址及輸出的檔名中
FOR /F "delims=%seperator%" %%w IN (%1) DO (
  if not %%wtest==test  (    %wgetPath% -nv -c %wgetWait% -O - "https://freetts.com/Home/PlayAudio?Language=%ttsLanguage%&Voice=%ttsVoice%&id=%ttsId%&type=1&TextMessage=%%w" | %jqPath% -r "\"https://freetts.com/audio/\"+.id" | %wgetPath% %wgetWait% -i - -O "%outputFolderName%\%%w.mp3"
REM 暫停一下下再抓下一個檔案, 每5次就要特別再停10秒
if !x! lss 5 (
  rem set /a r=%random% %%4+1
  set /a r=(!random! * 4 / 32768^) + 1
  set /a x=!x!+1
) else (
  set /a x=0
  set /a r=10
)
REM echo !x!
timeout /t !r!
  )
)
@echo ON
@echo.
@echo check %outputFolderName%
@echo.
@echo OFF
goto end 

:error
@echo ON
@echo.
@echo 語法:
@echo.
@echo %0 英文單字清單檔 MP3儲存資料夾名稱
@echo.

:end


使用的方法,將 wget、jq和批次檔 (假設檔名為 free_tts_mp3_dl.bat) 放在一起,或是可自動搜尋的路徑中;把要下載的英文,一行一個的格式存入純文字檔(ex. list.txt),然後執行:

free_tts_mp3_dl.bat list.txt mp3

如果成功,MP3 檔案應該會儲存到名稱為 mp3 的資料夾中。

因為 FreeTTS 有防「濫用」的機置,所以批次檔中,故意使用亂數決定程序暫停的秒數,而且每五次再多延長暫停的時間。目前的程序運作算還不錯。

在本篇筆記記錄前,其實在 Google Colab 中已經先用 Python 寫了支小工具,可以進行批次下載了,他日再寫記錄囉!

相關連結


2022年4月25日 星期一

FFmpeg : 在聲音檔前面加一小段靜音

2022年4月25日 星期一

 如果想要幫 mp3 音檔的前面,加上一段靜音,怎麼處理。用 FFmpeg 是一定可以的。底下這個討論串中,有好幾種方法:

我選擇使用

adelay filter

例如想將 in.mp3 的最前面加上 250微秒的靜音,就用:

ffmpeg -i in.mp3 -af "adelay=250|250" output.mp3

詳細的用法可以參考 FFmpeg 網站的使用手冊:

在 Windows 中,如何將整個目錄中的 mp3 檔案批次加上靜音呢?

在批次檔中,我們可以利用 FOR 來取得指定路徑中的所有檔名。FOR 怎麼用,可以參考這個討論串:

再套上前面 ffmpeg 的語法,就可以完成囉!寫了個批次檔,記錄如下:

@ECHO OFF
REM ffmpeg 的路徑設定
set ffmpegPath=ffmpeg

REM 在前面加幾微秒的靜音
set silenceMilliSeconds=250

if %1test==test goto error

REM 抓第一個參數為 mp3 資料夾
set sourceFolderName=%1

REM 輸出的資料夾名稱
set outputFolderName=%1\new

REM 建新的資料夾以存放處理好的檔案
mkdir %outputFolderName%

setlocal enabledelayedexpansion
for %%f in (%sourceFolderName%\*.mp3) do (
  rem echo %%f 
  rem echo %outputFolderName%\%%~nf%%~xf
  %ffmpegPath% -i %%f -af "adelay=%silenceMilliSeconds%|%silenceMilliSeconds%" %outputFolderName%\%%~nf%%~xf
)
@echo ON
@echo.
@echo check %outputFolderName%
@echo.
goto end 

:error
@echo ON
@echo.
@echo %0 MP3_folder_name
@echo.

:end

假設上面的指令稿儲存到 convert.bat 中,而 mp3 的檔案都放在 source 資料夾中了,只要執行這樣的指令:

convert.bat source

加好靜音片段的新檔案,都會儲存到 source\new 中。

批次檔中的指令,關鍵在如何取出所有 mp3 檔名:

for %%f in (%sourceFolderName%\*.mp3)  do (

幾個重點如下:

  • 「in」後面接的是指定的路徑,取得的檔名會放到 %%f
  • %%~nf 是取出主檔名
  • %%~xf 是取出副檔名

有了這些,其它就是不同字串間的組合了。


2022年4月19日 星期二

rsync : 複製所有檔案但跳過有問題的

2022年4月19日 星期二

搶救快掛掉硬碟的資料,如果使用 Windows 的檔案總管,或是 Mac OS X 上的 Finder,遇到壞掉的檔案,可能就被中斷。有沒有可以自動跳過損壞檔案,繼續複製其它好的檔案,能盡量將資料救出的方法?

在 Mac OS X 的「終端機」中,如果以 cp、rsync,甚至 dd ,應該可以辦到。

假設要把 /path/to/source/ 中的所有檔案,複製到 /path/to/distination/ 裡。底下是用 rsync 的指令:

rsync -auv --ignore-errors /path/to/source/ /path/to/destination/

rsync 的常用參數筆記一下:

  • -a, --archive : archive mode;相當於 -rlptgoD ,會將底下的所有資料夾及檔案都複製,也會保留檔案的時間、擁有者、權限......等。
  • -u, --update : 如果 /path/to/distination 的檔案比較新,就跳過,不複製。
  • -v, --verbose : 顯示備份過程中的訊息。
  • --delete : 如果在  /path/to/distination 現有的檔案,是 /path/to/source 中不存在的,就刪除。
  • --ignore-errors :  即使在複製的過程中有 I/O error ,還是進行刪除。


2022年3月30日 星期三

youtube-dl : 由 stdin 讀入網址

2022年3月30日 星期三

用 Python 寫了解析影片網址的小工具,網址要怎麼傳給 youtube-dl 呢?

youtube-dl 有個參數 -a 或 --batch-file ,它可以用來指定讀取一個網址清單的檔案;清單檔案裡面,一行一個網址;讀取後,youtube-dl 會批次下載那些網址的影片。

而 stdin / stdout 就像檔案一樣的操作,Python 以 print 將網址輸出,而 youtube-dl 就可以利用下面的語法來由 stdin 讀入

youtube-dl  -a - 

最後面那「-」減號就是 stdin。

所以假設我的 Python 程式叫 parase.py,解析的網頁是 https://a.b.c.d/xxx.html ,要執行的指令就像這樣:

python parse.py https://a.b.c.d/xxx.html | youtube-dl -a -

其實也就好玩,玩一下,不然,應該是整個都用 Python 來寫就好,一支程式就能搞定,還能有更多的變化。


2022年3月22日 星期二

C# : 「專案不知道如何執行設定檔」的訊息

2022年3月22日 星期二

 上一次寫 C# 程式應該是為了簡化 Wiimote 電子白板連線程序而開始的,那支 WiimoteAutoConnect 的程式,已經是好久以前的事了。同事開始玩 C# 就卡關,哈!我費了一番工夫安裝好 Visual StudioCommunity 2022,寫了個 「HelloCSharp」,一樣是卡在這個「專案不知道如何執行設定檔」:

除錯時的錯誤訊息

不過,如果去開了專案資料夾中,已編譯好的執行檔是可以正常執行的。可見程式是沒問題的。

找到這篇討論串:

看來有不少人遇到類似的情形。裡面有人建議開啟 Visual Studio 2022 的安裝程式,然後選「修復」的選項,哈!時間花了,試了,結果還是一樣。

在討論串中 #7 的 MisterNad 有提到:


"Development tools for .NET" - was never installed.. Because I deselected F# language support.


打開我電腦中的 VS 2022 安裝程式後,按「修改」:

VS 2022 安裝程式

「工作負載」中的「.NET 桌面開發」和討論串裡 MisterNad 遇到的狀況一樣吔!少勾了「.NET 的開發工具」

勾選「.NET 的開發工具」

將「.NET 的開發工具」勾選,經過漫長的補安裝後。再重新啟動 VS 2022 測試我的「HelloCSharp」,不會再出現「專案不知道如何執行設定檔」的錯誤訊息了。


相關文章




2021年8月11日 星期三

VNC : 行動載具變手寫板

2021年8月11日 星期三

手機和平板有觸控螢幕,所以如果用行動戴具來遙控電腦,它們就變成了無線手寫板了。那如何遙控電腦呢?現在的遙控方案五花八門,運作的方式不外乎是在電腦上安裝軟體,並由此軟體來提供本機的網路服務供載具連線;或是連到外部主機所提供的遠端服務,由遠端來進行電腦和載具的配對連線。本篇所採用的 VNC 方案是前者,網路連線不用透過外部的主機,電腦上安裝 VNC 服務的程式(VNC server),而戴具上安裝 VNC 客戶端(VNC viewer)。

關於 VNC 的使用,印象中有整理過筆記,查了一下,2012 年4月有一篇,不過,哈哈哈!居然還是草稿,整理一半就丟著了,裡面有些東西己經進化到都不一樣了。只好重頭來過!

前面提到,我們打算以行動載具來遙控電腦,所以我們要在電腦上安裝可提供 VNC 服務的軟體(VNC server),在行動載具上安裝 VNC 客戶端(VNC viewer)。

VNC 的軟體有不少,但本篇採用的軟體,選用的條件是必須符合免費而且功能較完整的:

電腦端:

行動載具:


VNC Viewer For Android


其中 VNC Viewer for Android 是一個開源的軟體,專案的網址如下:

詳細的功能說明可以參考它的 wiki :

而 Mocha VNC Lite 因為是免費版,所以有五分鐘的限制,計時終了會自動斷線,必須重新連線才能繼續使用,如果覺得不錯,其實可以花 台幣180 元左右升級成付費版,就不用一直重新連線。它其實 iOS 跟 Android 兩種系統都有。不過,如果載具是 Android,比較建議用開源又免費的 VNC Viewer for Android 就好。

在載具上的操作,本篇是介紹 VNC Viewer for Android ,它可以在舊載具的 Android 4.x 版上順利的安裝與運行。

VNC Viewer for Android 提供很多種模式供使用者運用,底下簡單摘要幾項重點。

讓功能選單出現

VNC Viewer for Android 連線成功以後,功能選單應該會現在畫面下方,如果是隱藏狀態,可以長按載具的「選單」鈕。

顏色模式

VNC Viewer for Android 預設使用的顏色模式是色階較小的,如果畫面傳輸的情形良好,可以提高色階,哈!我是直接拉到最高了!設定的方法如下:

  • 叫出功能選單。
  • 按功能選單上的「更多」。
  • 點選「顏色模式」。
  • 點選想套用的模式,最高是「24-bit color(4 bpp)」。


按功能表上的「更多」
點選「顏色模式」
點選「24-bit color(4 bpp)」

選定後,功能表會自動關閉。

輸入模式

VNC Viewer for Android 中,關於滑鼠的操作(輸入),可針對不同需求進行切換。

如果是想縮放、捲動電腦畫面可視的範圍,或是想執行滑鼠右鍵的功能時,建議在「輸入模式」選單中,點選最上面兩項中的「支持縮放的觸摸屏」或「觸摸屏」。

按選單上的「輸入模式」中的最上面兩項中的一項

設定為前兩項的其中一個以後:

  • 放大或縮小畫面:以兩指開合的手勢來控制。
  • 顯示放大、縮小、輸入文字的工具:以單指點一下畫面即可以叫出工具來使用。
  • 滑鼠按一下右鍵:以單指原地快點兩下,可以模擬按一下滑鼠右鍵的功能。
  • 滑鼠按一下左鍵:以單指快點一下,可以模擬按一下滑鼠左鍵的功能

點一下畫面後,下方有縮放及文字輸入的工具的圖示

如果是想塗塗、寫寫或是拖曳的動作,「輸入模式」就必須切換為「指標指針控制模式」或是「觸摸屏鼠標;D-Pad..」其中一個模式。

需要拖曳、塗鴨時的輸入模式

模擬滑鼠的滾輪

電腦的滑鼠滾輪可以用來捲動捲軸,在 VNC Viewer for Android 中,我們可以使用音量調鈕來代替,按音量調大聲、調小聲的實體按鈕,就可以遙控電腦的捲軸。


示範影片

底下的影片中,可以看到 VNC Viewer For Android 「輸入模式」如何切換:


在 Android 上和 iOS 上,哪一個塗塗寫寫流暢?哈!只能說 iOS 大勝!不過,或許是我自己的 Android 手機和平板太舊、太差的關係,使用經驗才會輸 iPad 上的。

關於 VNC Viewer For Android 的其它功能,可以參考 wiki 中的詳細說明


2021年5月15日 星期六

Android : 手機變電腦的 Webcam : IP Camera Adapter

2021年5月15日 星期六

關於把 Android 手機當電腦的 Webcam ,在「雄 : Android : 手機變電腦的 Webcam : OBS」這篇中,使用的是跨平臺的 OBS 抓取 IP Webcam 傳來的 Android 手機鏡頭畫面,然後變成虛擬相機。如果電腦使用的是 Windows,則多了一個選擇,可以使用本篇所要介紹的 IP Camera Adapter ,搭配 Android 上 IP Webcam 或 DroidCam 來建立虛擬相機,並應用在 Zoom、Google Meet ...... 等需要 Webcam 的地方。

Google Meet & Chrome 攝影機設定

2021年5月14日 星期五

Android : 手機變電腦的 Webcam : OBS

2021年5月14日 星期五
之前因為講課需要使用實物投影機,而電腦沒有外接的 Webcam 可用,又把  Android 手機 + IP Webcam 的方案拿出來用。如果搭配 Android adb 工具程式,甚至只要連接 USB 線,可以應用在沒有無線網路可用的環境中。那 Android 手機的鏡頭可以變成電腦的 Webcam,讓 Zoom、Google Meet......使用嗎?試了許久,利用所謂的 Virtual Camera ,的確是可以讓電腦的其它軟體當它一般的 webcam 來用。本篇先來玩玩 OBS 的虛擬相機 (Virtual Camera)。

Google Meet & Chrome 攝影機設定


2020年10月2日 星期五

Chrome : 捨快取資料取得最新網頁

2020年10月2日 星期五

 放在網站的程式明明已經更新了,「重新整理」 按了很多次了,網頁就還是舊的,讓人快懷疑自己是不是程式出了什麼問題。在 Chrome 中可以試試底下其中一種組合按鍵:


Ctrl + F5


Shift + F5


Ctrl + Shift + R


Google Chrome 的說明文件中:


有關 Windows and Linux 的 Webpage shortcuts 提到 Reload the current page, ignoring cached content ,按了上面的組合按鍵,應該可以忽略快取中的舊網頁,而重新載入網路上最新的版本。

在 Wikipedia 中也有各種瀏覽器如何 Bypass your cache :


哈!如果是使用行動載具,沒有按鍵可以按,應該比較麻煩一點了。




2020年8月12日 星期三

Brother 印表機墨水量偵測鬥法

2020年8月12日 星期三

 家裡有一臺 Brother DCP-J105 彩色噴墨印表機,洋紅和黃色墨水不足的訊息已經出現很久了,因為平常只有印灰階的文件,所以也不在意經常跳出來的警告訊息。這一次是跳出黑色墨水沒了,只好拆開當初買印表機時順便買的黑色墨水來安裝,沒想到把黑色墨水安裝完以後,它就一直卡在另兩色沒墨水的,需要更換的訊息。不更換的話,就完全不能進行列印工作。

而且將墨水匣拆下來,稍微傾斜,可以看到墨水匣中其實是還有一些墨水的,就這樣不繼續工作,真是浪費又不環保!


平常幾乎用不到彩色列印,於是開始研究機器是如何偵測墨水量的。將墨水匣轉動九十度以後,可以看到透明的墨水觀測口中有一片黑色的塑膠

如果轉動墨水匣,黑色塑膠是會轉動的。從顏色及動作來看,猜想墨水量的感測應該就是利用這個「浮標」去遮斷紅外線的光感應器。

要證明是不是如自己猜想的那樣很簡單,拿出黑色的電工膠帶,剪一小片,貼在透明的「感應窗」,再把墨水匣裝回印表機,就可以知道假設對不對了。


把兩個顏色的墨水匣都貼好黑色膠帶,結果出來了:

哈哈哈~通通滿格,又可以繼續列印囉!

不過這一招是否會造成進墨口堵塞?

哈~反正我是不打算印彩色的文件了,如果有人想試這個方法來和印表機鬥法,可能還是要考慮到會造成的風險。


 
雄::gsyan © 2009. Design by Pocket