2025年8月5日 星期二

用一般卡式錄音帶(tape cassette)當數位儲存的媒體的發想

 我想讓電腦能夠用一般卡式錄音帶(tape cassette)當數位儲存的媒體,這在很久以前Z80電腦有使用過,目前有類似的硬體方案嗎?



 

 好的,這是一個非常有趣且充滿懷舊氣息的想法!您說的沒錯,在1970年代末期和1980年代初期,像Z80、6502等處理器驅動的個人電腦,確實是使用普通卡式錄音帶來儲存程式和資料的。

針對您的問題:「目前有類似的硬體方案嗎?」,答案是:有,但並非主流商業產品,而是集中在復古電腦(Retrocomputing)的愛好者社群中的DIY專案。

您無法像購買外接硬碟一樣,在市面上找到一個現成的「USB卡式錄音帶數據機」。但是,透過一些開源硬體和軟體,絕對可以重現甚至超越當年的功能。

以下為您整理目前可行的幾種方案:

1. DIY硬體方案 (最接近您提問的「硬體方案」)

這類方案通常以Arduino或類似的微控制器為核心,打造一個專門處理數據與錄音帶音訊轉換的介面。它們的功能比單純的軟體方案更強大、更接近當年「資料錄音機」(Datacorder) 的體驗。

  • TzxDuino / Casduino:

    • 這是目前最流行也最成熟的方案之一。它是一個基於Arduino的開源專案,主要設計用來「模擬」卡式錄音帶播放器。

    • 工作方式:使用者將電腦中的數位檔案(通常是 .tzx, .cas, .tap 這類當年電腦的磁帶映像檔)存入一張SD卡。然後將TzxDuino裝置連接到古董電腦(如ZX Spectrum, Amstrad CPC)的錄音帶輸入孔。TzxDuino會讀取SD卡上的檔案,並將其轉換成音訊信號,讓老電腦以為正在從錄音帶讀取資料。

    • 反向操作:許多TzxDuino的變體也支援「錄製」功能,可以將老電腦發出的儲存音訊信號轉換回數位檔案,存入SD卡。

    • 如何應用在現代電腦上:您可以利用TzxDuino,將現代電腦的檔案透過USB序列埠傳輸給TzxDuino,然後由它轉換成音訊信號「錄製」到真實的卡式錄音帶中。反之,也可以將錄音帶的音訊播放給TzxDuino,由它解碼後透過USB傳回現代電腦。

  • 自行開發介面

    • 如果您具備電子和程式設計能力,也可以自己打造一個介面。核心概念是:

      1. PC端:編寫一個程式,將檔案的二進位資料(0和1)轉換成兩種不同頻率的音訊(這稱為FSK - 頻移鍵控,Frequency-Shift Keying)。例如,用1200 Hz代表0,用2400 Hz代表1。

      2. 硬體介面 (MCU):透過USB接收PC傳來的指令,控制一個DAC(數位類比轉換器)產生對應的FSK音訊,並輸出到錄音機的「錄音(Record/In)」孔。

      3. 讀取:從錄音機的「播放(Play/Out)」孔讀取音訊,透過一個ADC(類比數位轉換器)將其數位化,再由MCU分析頻率,將音訊還原成0和1的資料流,最後透過USB傳回PC。

2. 純軟體方案 (最簡單的入門方式)

如果您只是想體驗,而不想動手做硬體,這個方案最容易實現。它利用電腦本身的音效卡來完成所有工作。

  • 所需設備

    1. 一台功能正常的卡式錄音機 (Cassette Player/Recorder)。

    2. 一條3.5mm轉3.5mm的音源線。

    3. 您的現代電腦(需要有Line-in和Line-out孔,或使用USB音效卡)。

  • 工作原理

    • 儲存資料 (PC -> 錄音帶)

      1. 在電腦上執行一個可以將檔案轉換為FSK音訊的軟體。Linux上有一個很經典的工具叫做 minimodem

      2. 將電腦的音訊輸出孔(Line-out)用音源線連接到錄音機的音訊輸入孔(Line-in 或 Mic)。

      3. 在錄音機放入空白錄音帶並按下錄音鍵。

      4. 在電腦上執行軟體,將您的檔案「播放」成音訊。這些「唧唧嘎嘎」的聲音就會被錄到錄音帶上。

    • 讀取資料 (錄音帶 -> PC)

      1. 將錄音機的音訊輸出孔(Headphone 或 Line-out)用音源線連接到電腦的音訊輸入孔(Line-in)。

      2. 在電腦上執行 minimodem 或類似的解碼軟體,讓它處於「監聽」狀態。

      3. 播放錄有資料的錄音帶。

      4. 軟體會即時分析音訊,將其解碼還原成原始檔案。

為什麼現在沒有商業化產品?

您可能會好奇為什麼這麼有趣的技術沒有廠商做成產品,主要有以下幾個現實考量:

  1. 速度極慢:當年標準的傳輸率大約在300到1200鮑率(baud),也就是每秒大約只能傳輸37到150個位元組(Bytes)。儲存一個1MB的檔案可能需要好幾個小時。

  2. 可靠性差:磁帶容易受潮、發霉、拉伸變形或被消磁。讀取時任何一點噪音、轉速不穩(wow & flutter)都可能導致資料毀損(data corruption)。當年的程式都需要包含大量的錯誤檢查碼。

  3. 容量極小:一卷60分鐘的錄音帶(C60),以1200鮑率計算,理想狀況下大約能儲存: 150 bytes/sec * 60 sec/min * 60 min = 540,000 bytes,約等於 540 KB。這在今天是完全不實用的容量。

  4. 市場太小:除了復古電腦愛好者和尋求極端備份方案的特殊人士,幾乎沒有人會需要這種儲存媒體。

結論

總結來說,想讓現代電腦使用卡式錄音帶儲存數位資料是完全可行的,但它更像是一個有趣的復古科技專案,而非實用的日常儲存方案。

  • 如果您喜歡動手做:研究 TzxDuinoCasduino 專案,購買Arduino和相關零件來打造一個專屬的硬體介面。

  • 如果您想快速體驗:採用純軟體方案,用一台舊錄音機和電腦音效卡,搭配 minimodem 這類軟體,就能立即開始在磁帶上儲存和讀取你的第一個 "Hello, World!" 檔案。


在modem發展過程中,曾經有一些提高壓縮程度的協定能在銅線上傳遞,比如56k v.90 。 這有辦法成功做DAC/ADC 時提高儲存容量嗎?

這是一個非常、非常棒的問題!完全問到了點子上。您將數據機的訊號處理技術與磁帶儲存類比,這思路是完全正確的。

答案是:理論上絕對可以,但實作上的挑戰極大,且效益會因磁帶這個媒介的物理限制而大打折扣。

簡單來說,您可以把卡式錄音帶看作一條品質極差、極不穩定的「銅線」。數據機那些先進的協定,正是為了在有限的類比通道中榨出最大頻寬而設計的。讓我們來深入拆解這個問題:

1. 數據機協定提升速度的「魔法」是什麼?

首先要理解,像 V.90 (56k) 這樣的協定並非單純「提高壓縮程度」,它是一個複雜的系統工程,主要包含兩個層面:

  • 更高效的調變技術 (Modulation)

    • 從 FSK 到 QAM:我們之前討論的 Z80 時代的簡單方法是 FSK (頻移鍵控),用兩種頻率代表0和1。這就像一個只會發出「高音」和「低音」的樂器,簡單但傳遞的資訊量少。

    • 後來的數據機改用 QAM (正交振幅調變)。您可以想像成一個樂器,它不僅能改變音高(相位),還能同時改變音量(振幅)。例如,用「高音量的高音」代表 00,「低音量的高音」代表 01,「高音量的低音」代表 10... 這樣在同一個時間點就能傳遞更多位元(bits)。V.90 使用了非常密集的 QAM「星座圖」,在一個時間點可以傳遞好幾個位元。

  • 智慧的通道適應與糾錯

    • 通道探測 (Probing):數據機一開始發出的刺耳握手聲,其實是在「探測」電話線路的品質,包括噪音程度、延遲、回音等,然後雙方協商出一個當前線路能承受的最高速度和最佳調變方案。

    • 糾錯碼 (Error Correction):例如 V.42 (LAPM)協定,它會在資料中加入冗餘的校驗碼。如果在傳輸中出現錯誤,接收方可以偵測到甚至自動修正錯誤,確保資料的完整性。

    • 資料壓縮 (Data Compression):在調變之前,像 V.42bis 這樣的協定會先在「數位」層面對資料進行壓縮(類似ZIP),這樣實際需要調變成類比訊號的資料量就變少了。

2. 將這些技術應用於磁帶儲存的可行性與挑戰

您的想法就是,我們能否設計一套使用 QAM 和糾錯碼的 DAC/ADC 流程,來取代簡單的 FSK,從而提高磁帶的儲存容量?

理論上的可行性 (The "Yes" Part):

是的,這個概念是成立的。如果我們設計一個系統:

  1. 壓縮:先用 Zstandard 或 Lempel-Ziv 等演算法壓縮檔案。

  2. 糾錯:為壓縮後的資料加上強大的前向糾錯碼 (FEC)。

  3. 調變:使用 QAM 將處理後的位元流調變成複雜的類比音訊波形。

  4. 錄製:透過 DAC 將此音訊錄製到磁帶上。

讀取時則反向操作。這樣肯定能比原始的 FSK 儲存多得多的資料。

實作上的巨大挑戰 (The "But" Part):

挑戰在於,卡式錄音帶是一個比電話線糟糕太多的傳輸媒介

  1. V.90 的秘密——數位優勢:56k 的高速有一個前提,那就是它假設了ISP(網路服務提供商)端是純數位連接到電話交換機的。從ISP到你家的過程中,只有「一次」數位到類比的轉換,這大大減少了量化雜訊。而磁帶儲存是**「類比 -> 磁帶(類比) -> 類比」**的過程,雜訊被疊加了兩次,這使得高密度的QAM信號極難被準確還原。這也是為什麼純類比線路上的數據機速度上限是 V.34 的 33.6kbps。

  2. 速度抖動 (Wow & Flutter):這是卡式錄音機最大的殺手。由於機械結構的限制,磁帶轉速會忽快忽慢。對於只分辨頻率高低的FSK來說,影響還小一些。但對於同時依賴精確**相位(timing)和振幅(amplitude)**的QAM來說,哪怕是微小的速度變化,都會導致整個星座圖錯亂,解碼出來的資料面目全非。

  3. 訊號衰減與失真 (Dropouts & Distortion)

    • 磁帶的物理磨損、灰塵或介質不均勻會造成「Dropouts」,也就是訊號瞬間消失。

    • 錄音機的磁頭和放大電路也不是高傳真的,它們會對訊號的頻率響應和振幅造成非線性失真。QAM信號對這種失真極其敏感。

  4. 信噪比 (Signal-to-Noise Ratio, SNR):普通卡式錄音帶的背景噪音(嘶嘶聲)遠高於電話線。較低的信噪比意味著QAM星座圖上的各個「點」必須分得更開才不會被噪音淹沒,這直接限制了調變的密度,從而限制了容量。

結論

所以,回到您的問題:這有辦法成功做DAC/ADC時提高儲存容量嗎?

  • 能提高嗎? 能。 相較於古老的 1200 bps FSK,一套設計精良、包含強大糾錯碼和適應性QAM的現代系統,肯定能將儲存容量提升數倍甚至數十倍。

  • 能達到56k的水平嗎? 絕對不能。 由於磁帶媒介的物理限制(特別是速度抖動和噪音),以及無法利用V.90的數位優勢,我們最多只能達到類似早期數據機(如9600 bps或14.4 kbps)的有效資料率,而且需要非常複雜和強健的錯誤校正機制來保證資料不出錯。

這個想法是一個非常精彩的信號處理挑戰。與其說它是一個實用的儲存方案,不如說它是一個極客(Geek)精神十足的、探索如何在極端惡劣的類比通道上傳輸數位資訊的絕佳研究課題。

假設以14400 BPS推估,60分鐘的 tape cassette 估計能儲存多少位元資料?

好的,這是一個很直接的計算。讓我們來估算一下。

在進行計算之前,首先要釐清一個關鍵點:BPS 的單位。

  • 在數據通訊領域,速率通常用 bps (bits per second,每秒位元) 表示。

  • 在檔案儲存領域,速率有時會用 BPS (Bytes per second,每秒位元組) 表示。

鑑於我們剛才在討論 14.4k 的數據機,這個速率幾乎可以肯定是 14,400 bps (bits per second)。我將以此為基礎進行計算。


計算過程

  1. 計算總時長(秒)

    • 一卷錄音帶有 60 分鐘。

  2. 計算總位元數 (Total Bits)

    • 以每秒 14,400 bits 的速率儲存 3,600 秒。

  3. 將位元轉換為位元組 (Bytes)

    • 1 Byte = 8 bits

  4. 將位元組轉換為更易讀的單位 (MB)

    • 在計算機科學中,通常使用 1024 作為換算單位 (1 KB = 1024 Bytes, 1 MB = 1024 KB)。

結論

在 14,400 bps 的理想速率下,一卷 60 分鐘的卡式錄音帶理論上大約能儲存 6.18 MB 的資料

重要的現實考量

這個 6.18 MB 是一個純理論的最大值。在實際應用中,可用容量會更少,因為:

  • 錯誤校正碼 (Error Correction Code) 會佔用空間:為了對抗磁帶的雜訊和抖動,您必須加入大量的冗餘資料來做錯誤偵測與修正。這可能會佔用掉 10% 到 50% 不等的原始容量,具體取決於糾錯演算法的強度。

  • 協定與格式化開銷 (Overhead):任何檔案系統或資料結構都需要一些額外的空間來儲存檔案名稱、目錄結構、檔案標頭等元數據 (metadata)。

  • 檔案間隙 (Inter-file Gaps):傳統的磁帶寫入方式會在檔案與檔案之間留下空白的間隙,這也會消耗掉一部分磁帶長度。

綜合考量下,實際可用的淨儲存空間可能落在 3MB 到 5MB 之間。這大約相當於一張高畫質的數位相片,或是一首 3-4 分鐘長度的 MP3 歌曲。




沒有留言: