---
# System prepended metadata

title: Python Speech Recognition Tutorial
tags: [ASR, freeCodeCamp.org, AI]

---

# 課程介紹與講師

* 課程主題：在 Python 中實作語音辨識，透過五個專案學習
* 講師：Patrick（軟體工程師）與 Lisa（資料科學家），皆為 AssemblyAI 開發者倡導者
* AssemblyAI：提供語音轉文字 API，課程使用其服務進行專案開發

# 課程五個專案

* 專案一：錄製音訊，從麥克風擷取聲音並儲存為 WAV 檔
* 專案二：使用 AssemblyAI API 對錄音檔執行語音辨識
* 專案三：分析 YouTube 上的 iPhone 評論情緒
* 專案四：摘要線上 Podcast 並建立網頁展示結果
* 專案五：結合語音辨識與 OpenAI API 製作問答應用

# 音訊格式基礎
![image](https://hackmd.io/_uploads/rJnpErMlbe.png)

![image](https://hackmd.io/_uploads/BySbrBfgWe.png)

* 常見格式：MP3（有損壓縮）、FLAC（無損壓縮）、WAV（未壓縮）
* WAV 優點：音質最佳、結構簡單、Python 內建 wave 模組可直接操作

# 音訊訊號參數
![image](https://hackmd.io/_uploads/Skn7BHGebe.png)

* channels：聲道數（1 為 mono，2 為 stereo）
* sample width：每個樣本的位元組數
* frame rate（sample rate）：每秒取樣次數，CD 標準為 44.1 kHz
* number of frames：整段音訊的總取樣數
* 每個 frame 的值為二進位格式，可轉為整數

# 讀取與寫入 WAV 檔
![image](https://hackmd.io/_uploads/HJzFrBfeWg.png)

* 使用 wave.open() 開啟檔案（讀取模式為 'rb'）
* 可取得參數：nchannels、sampwidth、framerate、nframes
* 讀取音訊內容用 readframes()，結果為 bytes 物件
* 重新寫入檔案時設定相同參數，使用 writeframes() 寫入資料

# 視覺化音訊波形
![image](https://hackmd.io/_uploads/BJY-PSzlbl.png)

* 使用 matplotlib 與 numpy 繪圖
* 將 bytes 轉為 numpy array，dtype 設為 int16
* 使用 linspace 生成時間軸，橫軸為時間、縱軸為音訊取樣值
* 可清楚看到聲音波形隨時間變化

# 麥克風錄音實作
![image](https://hackmd.io/_uploads/H1nkDSMxWe.png)
![image](https://hackmd.io/_uploads/SJN0PHfx-l.png)

* 使用 PyAudio 錄音，支援多平台（Linux、Windows、macOS）
* 重要參數：frames_per_buffer、format（int16）、channels、rate（如 16000 Hz）
* 透過 stream.read() 擷取音訊資料，儲存在 frames list 中
* 錄音完成後停止、關閉 stream 並終止 PyAudio
* 使用 wave 模組將 frames 寫入 WAV 檔

# 載入與操作 MP3 檔
![image](https://hackmd.io/_uploads/HJ0ADHMxWx.png)

* 使用 pydub 模組（需先安裝 ffmpeg）
* AudioSegment 物件可讀取 MP3 或 WAV
* 可調整音量（+6 dB）、重複片段、加入淡入淡出效果
* 匯出音檔時使用 export() 並指定格式
* 可再讀取匯出後的檔案驗證處理結果

# 第一部分內容總覽

* 認識音訊格式與關鍵參數
* 學會使用 wave 模組載入、儲存、複製音訊
* 能使用 matplotlib 繪製波形圖
* 實作麥克風錄音與輸出 WAV 檔
* 能使用 pydub 處理與輸出 MP3 音訊
* 為後續語音辨識與 API 專案建立基礎

---

# 專案目標與流程
![image](https://hackmd.io/_uploads/By7vuSMebl.png)

* 將本地音訊檔上傳至 AssemblyAI，取得轉寫文字
* 四步驟：上傳檔案 → 發起轉寫 → 輪詢狀態 → 寫入文字檔
* 範例音檔：「hi i'm patrick this is a test123」，轉寫結果一致

# 主要依賴
![image](https://hackmd.io/_uploads/Hyk_dHMe-e.png)

* AssemblyAI API（取得並使用 API Key）
* Python `requests`（HTTP 通訊）
* Python 標準庫：`sys`（讀取命令列參數）、`time`（輪詢間隔）

# API 金鑰與設定

* 到 assemblyai.com 建立帳號並複製 API Key
* 建立設定檔存放 API Key
* 以 HTTP Header `Authorization: <API Key>` 驗證

# 端點與 HTTP 方法

* 上傳端點：`/v2/upload`，使用 `POST`
* 轉寫端點：`/v2/transcript`，使用 `POST`
* 輪詢端點：`/v2/transcript/{id}`，使用 `GET`
* 上傳採分塊讀取，建議每塊 5MB

# 命令列參數

* 以 `sys.argv[1]` 取得音訊檔名
* 由終端執行：`python main.py <檔名>`

# 上傳流程
![image](https://hackmd.io/_uploads/SyN-YrzxZg.png)
![image](https://hackmd.io/_uploads/Sy4MtHfebx.png)

* 以讀檔產生器分塊讀取音訊
* `POST /upload` 附帶 Header 與檔案資料
* 取得回傳的 `upload_url` 作為後續轉寫的 `audio_url`

# 發起轉寫
![image](https://hackmd.io/_uploads/B1ErFrzeZe.png)
![messageImage_1762969929415](https://hackmd.io/_uploads/rJDuFrGlWx.jpg)


* `POST /transcript` 請求 JSON 內含 `audio_url`
* 立即回傳轉寫工作 `id`，非同步處理

# 輪詢結果

![messageImage_1762970176598](https://hackmd.io/_uploads/S1XUcrGx-g.jpg)

* 以 `GET /transcript/{id}` 查詢狀態
* 觀察 `status` 欄位：`processing`、`completed`、`error`
* 使用 `while True` 迴圈輪詢，未完成時 `time.sleep(30)` 再查詢

# 儲存轉寫
![image](https://hackmd.io/_uploads/Byf59rGgWe.png)

* 轉寫完成後從回應 `text` 取出全文
* 以原檔名加上 `.txt` 存檔
* 失敗時輸出錯誤內容以便除錯

# 函式化與重構

* `upload(file_name) → audio_url`
* `transcribe(audio_url) → job_id`
* `poll(transcript_id) → response_json`
* `get_transcription_result(audio_url) → (data, error)`
* `save_transcript(file_name, audio_url)` 將結果寫檔
* 將 API 溝通函式移至 `api_communication.py`，主程式僅負責流程調用

# 錯誤處理與訊息

* 狀態為 `error` 時回傳錯誤資訊
* 執行過程打印必要提示（如等待 30 秒）

# 補充資料

* 回應包含逐字詞的開始與結束時間（毫秒）與信心分數
* 可用於更進階功能（非本教學重點）

# 實測與結果

* 短音檔成功轉寫為「hi i'm patrick this is a test123」
* 較長的一分鐘音檔可正常轉寫但需較久時間
* 最終會生成同名 `.txt` 檔，內容為完整轉寫文字

---
# 專案目標
![image](https://hackmd.io/_uploads/ry3SBtMxZl.png)

* 對 YouTube 影片做情緒分析，逐句產生文字與情緒標籤（positive、negative、neutral）
* 不下載整部影片，直接取得可存取的音訊 URL 後送至轉寫與情緒分析
* 輸出轉寫結果與情緒結果為檔案，供後續統計與展示

# 主要套件與服務
![image](https://hackmd.io/_uploads/B1XDSFfx-e.png)

* youtube-dl：擷取 YouTube 影片資訊或媒體連結
* AssemblyAI：語音轉文字與情緒分析 API
* json：輸出與讀取結果檔
* 既有專案結構：api 機制（密鑰與 helper）、youtube_extractor、main

# YouTube 資訊與音訊 URL 取得
![image](https://hackmd.io/_uploads/rJ2nStzebe.png)
![messageImage_1762985427419](https://hackmd.io/_uploads/HJLkLFMxZx.jpg)

* 使用 YoutubeDL.extract_info(url, download=False) 取得影片或播放清單資訊
* 若為播放清單，選取 entries[0] 作為單一影片
* 從 result["formats"] 遍歷，篩選 ext == "m4a" 的純音訊格式並取其 url
* 取得之音訊 URL 為第三方托管位址，非 youtube.com

# 與 AssemblyAI 串接流程
![image](https://hackmd.io/_uploads/rJUe8FMlbl.png)
![image](https://hackmd.io/_uploads/rkcZ8KMxWx.png)

* 以音訊 URL 呼叫轉寫 API，並在 JSON 請求中加入 sentiment_analysis=True
* 轉寫完成後，取得 transcript 與 sentiment 分析結果
* 儲存 transcript 檔與 sentiments 檔，檔名以影片標題整理（去空白、以底線取代空格），存入 data/ 目錄

# 檔案與命名約定

* 轉寫檔：以影片標題為名存於 data/，純文字或 JSON 皆可
* 情緒檔：同名加上 _sentiments.json，縮排便於閱讀
* 影片標題經 strip 與空白替換，避免檔名不合法

# Sentiment 結果資料結構（重點欄位）

* text：句子內容
* start、end：時間戳（秒或毫秒）
* sentiment：positive、neutral、negative
* confidence：分類信心度

# 基礎統計與評估

* 讀取 sentiments JSON，依 sentiment 分類收集句子
* 計算 positive、negative、neutral 各自數量
* 計算正向比率 = positives / (positives + negatives)
* 用於快速評估評論傾向與整體情緒概況

# 關鍵實作細節

* youtube-dl 僅抽取資訊不下載媒體（download=False）以節省時間與流量
* 轉寫與情緒分析為非同步雲端工作，須輪詢或封裝等待邏輯（由既有 api helper 處理）
* build 管線中建議將 API 金鑰與環境參數以 Secrets 管理（此專案已在 api helper 中使用）

# 產出與應用場景

* 產出逐句情緒與文字對應，適合評論摘要、品牌聲量監控、內容品質評估
* 可延伸至前端 Web App 視覺化呈現，支援搜尋、篩選、統計圖表

---

# 專案目標與成品
![image](https://hackmd.io/_uploads/BJGVIYGgZl.png)

* 建立「Podcast 章節摘要」應用與網頁介面，來源音訊由 Listen Notes 取得，使用 AssemblyAI 產生自動章節與摘要，介面顯示封面、Podcast 與集數標題、章節清單與摘要

# 架構與依賴
![image](https://hackmd.io/_uploads/BkaS8Yfl-l.png)

* `api_communication.py` 負責 API 呼叫與工具函式
* `main.py` 負責流程控制與 Streamlit 介面
* 使用 `requests`、`json`、`streamlit`、`time`
* 需要 AssemblyAI API Key 與 Listen Notes API Key

# API 與端點


* AssemblyAI 轉寫：`/v2/transcript`
* AssemblyAI 查詢：`/v2/transcript/{id}`
* Listen Notes 集數：`/v2/episodes/{episode_id}`
* 認證 Header：AssemblyAI 使用 `Authorization`，Listen Notes 使用 `X-ListenAPI-Key`

# 取消上傳與資料取得改動

* 不使用 `/upload` 與分塊上傳，直接以遠端 `audio_url`
* 透過 `episode_id` 從 Listen Notes 取得 `audio`、`image`、`podcast.title`、`title`

# 後端流程

* 以 `episode_id` 取得 `audio_url` 與顯示資訊
* 呼叫 AssemblyAI 建立轉寫任務並設定 `auto_chapters: true`
* 每 60 秒輪詢 `transcript_id` 直到完成或錯誤
* 完成後寫入 `episode_id_chapters.json`

# 主要函式職責

* `get_episode_audio_url(episode_id)` 回傳 `audio_url`、`episode_thumbnail`、`podcast_title`、`episode_title`
* `transcribe(audio_url, auto_chapters=True)` 回傳 `job_id`
* `poll(transcript_id)` 回傳結果 JSON
* `get_transcription_result(audio_url, auto_chapters=True)` 回傳 `(data, error)`
* `save_transcript(episode_id)` 串接前述流程並存檔

# 儲存格式

* JSON 欄位含 `chapters`（每章節含 `start`、`end`、`gist`、`headline`、`summary`）、`episode_thumbnail`、`episode_title`、`podcast_title`

# Streamlit 介面

* `st.title("Podcast Summaries")` 顯示標題
* 側欄 `st.sidebar.text_input` 輸入 `episode_id`
* 側欄 `st.sidebar.button("Get Podcast Summary", on_click=save_transcript, args=(episode_id,))`
* 讀取 `episode_id_chapters.json` 後以 `st.header` 顯示 `{podcast_title} - {episode_title}` 並用 `st.image` 顯示縮圖
* 迭代 `chapters` 以 `st.expander` 顯示每章節的 `gist` 與 `summary`

# 時間格式處理

* 將毫秒 `start` 轉為 `HH:MM:SS` 或 `MM:SS`，有小時則顯示 `H:M:S`，無小時顯示 `M:S`

# 行為與等待設定

* 輪詢間隔 60 秒以適應較長音訊
* 僅在按鈕被點擊後觸發下載與顯示流程

# 錯誤與狀態

* 狀態為 `error` 時回傳錯誤訊息供介面顯示
* 執行過程僅輸出必要提示訊息


---
# 專案目標
![image](https://hackmd.io/_uploads/HkqxPKMl-e.png)
![image](https://hackmd.io/_uploads/B1JMDYMgWe.png)
![image](https://hackmd.io/_uploads/ryMmPKMlZx.png)
![image](https://hackmd.io/_uploads/Sk_X_Ffl-l.png)

* 在 Python 實作即時語音辨識
* 串接 OpenAI API 建立語音對話助理
* 使用 WebSockets 與 asyncio 實作雙向即時通訊

# 使用技術

* PyAudio：麥克風錄音
* websockets：WebSocket 客戶端
* asyncio：非同步事件迴圈
* AssemblyAI 實時 ASR（需升級帳號）
* OpenAI API：文字問答
* base64、json：音訊編碼與資料序列化

# 專案結構

* `api_secrets`：存放 AssemblyAI 與 OpenAI 金鑰
* `main.py`：錄音、WebSocket 傳輸、接收轉寫、呼叫聊天回覆
* `openai_helper.py`：封裝發問與回覆取得

# 即時語音辨識流程

* 以 PyAudio 開啟麥克風串流（如 16kHz、int16、mono）
* 連線 AssemblyAI WebSocket（URL 需帶 sample_rate 參數）
* 非同步同時執行「送音訊」與「收轉寫」

# WebSocket 連線重點

* 連線時附加授權標頭（Authorization）
* 設定 `ping_timeout` 與 `ping_interval`
* 連線後短暫 `asyncio.sleep(0.1)` 等待就緒

# 發送音訊邏輯

* 循環讀取 `frames_per_buffer` 的音訊塊
* 設 `exception_on_overflow=False` 避免溢位中斷
* 將音訊以 base64 編碼，包成 `{"audio_data": ...}` 的 JSON 傳送
* 傳送迴圈間以 `asyncio.sleep(...)` 節流

# 接收轉寫邏輯

* 持續接收 JSON，解析 `text` 與 `message_type`
* 僅在 `message_type == "final_transcript"` 時使用完整句子
* 於終端顯示「使用者：轉寫文字」

# 與 OpenAI 串接

* 在 helper 中設定 API key，實作發問函式
* 將最終轉寫文字作為 `prompt` 傳給 OpenAI
* 取得回覆文字並於終端顯示「機器人：回答」

# 執行流程

* `asyncio.run(send_receive())` 啟動
* `asyncio.gather(send(), receive())` 併行處理
* 使用者開口說話→ ASR 回傳文字→ 傳給 OpenAI→ 回覆顯示

# 錯誤處理重點

* 捕捉 `websockets.exceptions.ConnectionClosedError` 並終止迴圈
* 修正常見錯誤：`await asyncio.gather(...)` 不可遺漏
* base64、JSON 轉換失敗時應中斷當次資料並繼續循環

# 參數設定重點
![messageImage_1762986089897](https://hackmd.io/_uploads/Sk5uOKzxbl.jpg)


* `rate=16000`、`format=int16`、`channels=1` 與 WebSocket `sample_rate` 一致
* `frames_per_buffer` 影響延遲與穩定度
* OpenAI `max_tokens` 控制回覆長度

# 成品行為

* 啟動程式後可直接對麥克風發問
* 於終端即時顯示辨識文字與聊天機器人回覆
* 支援連續對話與多輪問答


---


# Terminology
* 語音辨識（Speech Recognition）：將人類語音轉換成文字的技術。
* 組合式人工智慧（Assembly AI）：提供語音轉文字 API 的深度學習公司。
* 應用程式介面（API, Application Programming Interface）：讓應用程式之間可互相溝通的介面。
* 音訊資料（Audio Data）：以數位方式儲存的聲音訊號。
* 麥克風輸入（Microphone Input）：從麥克風擷取的即時聲音資料。
* 波形音訊格式（WAV, Waveform Audio File Format）：未壓縮的音訊檔案格式。
* MP3 格式（MP3, MPEG Audio Layer III）：常見的有損壓縮音訊格式。
* FLAC 格式（FLAC, Free Lossless Audio Codec）：無損壓縮音訊格式。
* 音訊取樣率（Sample Rate）：每秒取樣的次數，單位為赫茲（Hz）。
* 取樣寬度（Sample Width）：每個取樣點的位元組數，決定音質精度。
* 聲道數（Channels）：音訊的獨立輸出通道數，如單聲道或立體聲。
* 音訊框架（Frame）：音訊中包含取樣資料的最小單位。
* 位元深度（Bit Depth）：描述每個取樣的位元數，影響音訊解析度。
* 音訊時長（Audio Duration）：整個音訊檔案的時間長度。
* 二進位資料（Binary Data）：以位元組形式儲存的音訊原始資料。
* Numpy 陣列（Numpy Array）：Python 中用於處理數值與矩陣運算的結構。
* Matplotlib 圖表（Matplotlib Plot）：Python 的繪圖套件，用於視覺化音訊訊號。
* 波形圖（Waveform Plot）：顯示音訊隨時間變化的振幅曲線圖。
* PortAudio 函式庫（PortAudio Library）：跨平台的音訊 I/O 函式庫。
* PyAudio 模組（PyAudio Module）：Python 對 PortAudio 的封裝，用於錄音與播放。
* 緩衝框架（Frames per Buffer）：每次錄音或播放處理的音訊資料塊大小。
* 資料流（Stream）：連續傳送或接收音訊資料的通道。
* 輸入裝置（Input Device）：如麥克風，用於擷取音訊訊號的硬體。
* 錄音物件（Recording Object）：用來建立與管理錄音設定的 Python 物件。
* 結束錄音（Stop Stream）：停止正在進行的錄音或播放流程。
* 終止 PortAudio（Terminate PortAudio）：釋放音訊資源並關閉連線。
* 聲波取樣（Sound Sampling）：將聲音連續波形轉換為離散數值的過程。
* 音訊轉換（Audio Conversion）：不同格式間的轉換，例如 wav 轉 mp3。
* FFmpeg 工具（FFmpeg Tool）：跨平台的多媒體轉換與處理工具。
* Pydub 函式庫（Pydub Library）：簡化音訊讀取、編輯與輸出的 Python 套件。
* 音訊段（Audio Segment）：Pydub 中表示音訊的基本物件。
* 音量調整（Volume Adjustment）：對音訊音量進行分貝增減的操作。
* 淡入（Fade In）：音訊在播放開始時逐漸增強音量的效果。
* 淡出（Fade Out）：音訊結尾時逐漸減弱音量的效果。
* 重複播放（Audio Looping）：將音訊片段重複多次以延長長度。
* 音訊匯出（Audio Export）：將處理後的音訊儲存為新檔案。
* 音訊合併（Audio Merging）：將多個音訊片段組合為單一音訊。
* 聲音波形（Sound Waveform）：表示聲音振幅隨時間變化的圖像。
* 聲音取樣頻率（Sampling Frequency）：單位時間內取樣的次數。
* 音訊振幅（Amplitude）：音訊波形的強度或音量大小。
* 聲音時間軸（Time Axis）：在波形圖上代表時間的橫軸。
* 聲音資料緩衝區（Audio Buffer）：暫存音訊資料的記憶體區塊。
* 位元組串流（Byte Stream）：以位元組形式連續傳送的音訊資料。
* 錄音秒數（Recording Duration）：設定錄音要進行的時間長度。
* 音訊封包（Audio Packet）：音訊傳輸中包含聲音資料的資料單位。
* 語音資料集（Speech Dataset）：用於訓練或測試語音模型的音訊資料集合。
* 聲音可視化（Audio Visualization）：將音訊訊號以圖形方式呈現。
* 語音文字轉換（Speech-to-Text, STT）：將語音內容轉為文字的技術。
* 自然語言處理（Natural Language Processing, NLP）：讓電腦理解與分析文字的技術。
* 情感分析（Sentiment Analysis）：分析語音或文字情緒傾向的演算法。
* 播客摘要（Podcast Summarization）：將長篇音訊內容自動生成簡短摘要。
* 問答應用（Q&A Application）：能根據語音輸入回覆使用者問題的應用程式。
* 語音辨識（Speech Recognition）：將人類語音內容轉為可處理的資料或文字
* 自動語音辨識（Automatic Speech Recognition）：以演算法自動將語音轉成文字的技術
* 語音轉文字（Speech-to-Text）：把音訊訊號解碼成可讀文字的過程
* 音訊取樣率（Sample Rate）：每秒擷取的樣本數決定可表達的頻率上限
* 位元深度（Bit Depth）：每個樣本的解析度影響動態範圍與雜訊底
* 單聲道（Mono）：單一聲道音訊更利於語音模型處理
* 立體聲（Stereo）：雙聲道音訊需先混成單聲道以簡化辨識
* 音訊編碼（Audio Codec）：壓縮或封裝音訊資料的演算法與格式
* 容器格式（Container Format）：封裝音訊與中繼資料的檔案外層格式
* WAV 格式（WAV）：無壓縮脈衝編碼音訊適合高品質轉錄
* MP3 格式（MP3）：有損壓縮格式體積小但可能影響辨識細節
* 上傳端點（Upload Endpoint）：接收本地檔案上傳至服務的 API 路徑
* 轉錄端點（Transcription Endpoint）：建立語音轉文字作業的 API 路徑
* API 權杖（API Token）：用於服務端驗證請求者身份的機密字串
* REST 介面（REST API）：以 HTTP 動詞與資源導向設計的網路服務
* HTTP 標頭（HTTP Headers）：在請求與回應中傳遞授權與格式等中繼資訊
* JSON 載荷（JSON Payload）：以 JSON 結構承載參數與結果的訊息內容
* POST 請求（POST Request）：向伺服器提交資料或建立資源的操作
* GET 請求（GET Request）：向伺服器讀取資源或查詢狀態的操作
* 分塊上傳（Chunked Upload）：將大檔案切成固定大小片段逐步上傳
* 讀取串流（Stream Reading）：邊讀邊傳避免一次載入整個檔案至記憶體
* 輪詢（Polling）：定期查詢作業狀態直至完成或失敗
* 非同步任務（Asynchronous Job）：在背景執行需一段時間才完成的處理
* 回應狀態碼（HTTP Status Code）：以數字表示請求結果與錯誤類型
* 作業識別碼（Job ID）：用於查詢特定轉錄作業狀態的唯一代號
* Webhook 回呼（Webhook Callback）：作業完成時主動通知客戶端的回傳 URL
* 速率限制（Rate Limiting）：限制單位時間內可發出的 API 請求數
* 指數退避（Exponential Backoff）：重試時逐步拉長等待以降低壅塞
* 超時設定（Timeout）：請求在逾時前等待回應的最長時間
* 重試機制（Retry Logic）：在暫時性錯誤發生時自動重新嘗試請求
* 例外處理（Exception Handling）：攔截並處理執行期間的錯誤狀況
* 語者分離（Speaker Diarization）：將轉錄文字依不同說話者標註區分
* 語言偵測（Language Detection）：自動判斷音訊所使用的語言
* 時間戳（Timestamps）：標註每個字或詞在音訊中的起訖時間
* 逐字稿（Transcript）：完成轉錄後的文字內容總表
* 信心分數（Confidence Score）：模型對輸出文字正確性的機率估計
* 關鍵詞加權（Keyword Boosting）：對特定詞彙提高辨識優先度
* 標點還原（Punctuation Restoration）：自動為轉錄文字加入標點符號
* 大小寫正規化（Truecasing）：為轉錄結果恢復正確大小寫
* 語音活動偵測（Voice Activity Detection, VAD）：偵測語音片段以過濾靜音
* 噪音抑制（Noise Suppression）：降低背景雜訊以提升辨識品質
* 自訂詞彙（Custom Vocabulary）：加入專有名詞以改善辨識率
* 延遲（Latency）：從送出請求到收到結果所花的時間
* 音訊分段（Audio Chunk）：上傳或處理時分割的固定大小音訊片段
* 檔案輸入輸出（File I/O）：讀寫本地檔案系統的操作
* 命令列參數（Command-line Arguments, CLI）：從終端機傳入的程式參數
* 環境變數（Environment Variables）：以系統變數存放密鑰與設定
* 設定檔（Configuration File）：集中保存 API 金鑰與參數的檔案
* 絕對路徑（Absolute Path）：自根目錄起的完整檔案位置標示
* 文字檔輸出（Text File Output）：將轉錄結果寫入 .txt 檔以供後續使用
* 情感分析（Sentiment Analysis）：分析文字或語音內容情緒傾向（正面、負面或中性）的技術。
* YouTube DL 套件（YouTube-DL Package）：可用於下載 YouTube 影片或提取影音資訊的 Python 工具。
* 音訊網址（Audio URL）：影片中音訊檔的直接連結，用於後續語音辨識或情感分析。
* JSON 格式（JSON Format）：以鍵值對形式儲存結構化資料的輕量化資料格式。
* 字典（Dictionary）：Python 中以鍵值組織資料的結構，用於儲存 YouTube DL 回傳結果。
* 播放清單（Playlist）：包含多個影片項目的 YouTube 集合型內容。
* M4A 格式（M4A Format）：一種常用的 MPEG-4 音訊格式，支援高音質壓縮。
* Assembly AI 語音轉文字（Assembly AI Speech-to-Text）：將語音內容轉換成文字的雲端 API。
* Assembly AI 情感分析（Assembly AI Sentiment Analysis）：針對轉錄文字判斷句子情緒的功能。
* 轉錄（Transcription）：將語音資料轉換為文字紀錄的過程。
* 音訊智慧（Audio Intelligence）：Assembly AI 提供的進階音訊分析功能集合。
* 自動摘要（Auto Summarization）：從長篇內容自動提取重點的技術。
* 主題偵測（Topic Detection）：分析語音內容以辨識主題類別的功能。
* 自動章節（Auto Chapters）：自動分割語音或影片內容為主題段落的功能。
* API 端點（API Endpoint）：API 伺服器上用於接收請求的特定路徑。
* JSON 請求體（JSON Payload）：在 HTTP POST 請求中傳送的 JSON 格式資料。
* 情感分類結果（Sentiment Classification Results）：每句轉錄文字的情緒判定輸出。
* 信心分數（Confidence Score）：模型對情感預測準確性的信心水準。
* 正面情緒（Positive Sentiment）：顯示積極或滿意情感的語句。
* 負面情緒（Negative Sentiment）：顯示批評或不滿情感的語句。
* 中性情緒（Neutral Sentiment）：不表現明顯情感傾向的語句。
* YouTube 影片資訊（YouTube Video Info）：由 YouTube DL 取得的影片資料，如標題、格式與 URL。
* 格式清單（Formats List）：影片不同解析度或音訊格式的描述集合。
* 上下文管理器（Context Manager）：Python 語法結構，用於安全開啟與關閉資源。
* API 憑證（API Credentials）：授權應用程式使用 API 的金鑰或認證。
* 標題正規化（Title Normalization）：去除空白與特殊符號以建立安全檔名的過程。
* 檔案輸出（File Output）：將分析結果寫入本機或資料夾的動作。
* JSON 輸出檔（JSON Output File）：包含每句文字與情感標籤的分析結果檔案。
* 檔案縮排（JSON Indent）：在 JSON 輸出中設定排版層級以便閱讀。
* Sentiment Analysis Key：Assembly AI 回傳 JSON 結果中的「sentiment_analysis_results」欄位。
* URL 參數（URL Parameter）：在 API 呼叫中用於指定目標或行為的參數。
* 音訊轉錄端點（Transcribe Endpoint）：Assembly AI 用於提交音訊檔進行文字轉換的 API 路徑。
* HTTP 請求（HTTP Request）：與 API 溝通以傳遞或接收資料的標準通訊格式。
* 資料處理流程（Data Pipeline）：從下載、轉錄到分析的自動化資料處理步驟。
* 正負面比率（Positive Ratio）：正面句子數量與總情感句子數量的比值。
* 自動化分析（Automated Analysis）：不需人工干預的情感與內容分析流程。
* Python 模組化（Python Modularization）：將功能拆分為多個檔案（如 API.py、main.py）的結構化方法。
* 檔案目錄（Data Folder）：用於儲存結果輸出與中間資料的專案資料夾。
* 主程式檢查（Main Check）：`if __name__ == "__main__":` 判斷程式進入點的標準寫法。
* 例外處理（Error Handling）：防止下載、轉錄或分析過程中斷的錯誤控制。
* YouTube 影片標題（YouTube Video Title）：自動作為輸出檔名與分析識別用的標籤。
* 影片評論分析（Video Review Analysis）：針對產品或主題評論影片的情緒總結。
* API 功能標誌（Feature Flag）：用布林值開關決定是否啟用特定 API 功能。
* JSON Dump：Python 將資料結構輸出為 JSON 格式文字的函式。
* 自動語音情感分析（Automated Speech Sentiment Analysis）：將語音內容自動化轉錄與情感分類的流程。
* 播客摘要（Podcast Summarization）：將整段節目濃縮為重點與結論
* 章節化（Auto Chapters）：自動切分音訊為主題段落並產出標題
* 節目集 ID（Episode ID）：標識單一播客集數的唯一代碼
* 收聽筆記 API（Listen Notes API）：查詢播客節目與音訊連結的服務介面
* 音訊網址（Audio URL）：可直接串流或下載之節目音訊位置
* 轉錄（Transcription）：將音訊內容轉成文字的處理流程
* 摘要生成（Text Summarization）：將長文壓縮為較短且保留關鍵資訊的文本
* 關鍵句抽取（Extractive Summarization）：挑選原文句子組成摘要的方法
* 精煉生成（Abstractive Summarization）：以新句子概括原文語意的方法
* 主題偵測（Topic Detection）：辨識段落主題以輔助章節切分
* 章節摘要（Chapter Summary）：對每個章節的簡要說明
* 章節標題（Chapter Headline）：概括章節主旨的短語
* 起訖時間戳（Start/End Timestamps）：章節在音訊中開始與結束的毫秒位置
* 語音辨識 API（Speech Recognition API）：提供語音轉文字雲端服務的介面
* AssemblyAI：提供轉錄、章節化與摘要等語音 AI 功能的雲端平台
* 請求標頭（Request Headers）：HTTP 請求中攜帶授權與格式的中繼資訊
* API 金鑰（API Key）：授權第三方服務存取的機密字串
* 速率限制（Rate Limit）：單位時間可發送請求數的上限
* 分頁參數（Pagination）：分批取得大型查詢結果的協定
* JSON 結構（JSON Schema）：定義資料欄位與型別的結構描述
* POST 方法（HTTP POST）：用於建立資源或傳送資料的請求動詞
* GET 方法（HTTP GET）：用於讀取資源或查詢狀態的請求動詞
* 回應狀態碼（HTTP Status Code）：以數字表示請求結果的標準
* 重試機制（Retry Logic）：失敗時依策略再次呼叫 API 的流程
* 指數退避（Exponential Backoff）：逐次增加重試等待時間的策略
* 超時控制（Timeout）：請求等待回應的最長時限設定
* 端點（Endpoint）：服務對外提供的特定功能 URL
* 音訊串流（Audio Streaming）：連線即時傳送音訊資料的方式
* 語音活動偵測（VAD）：偵測語音區段以忽略靜音或噪音
* 噪音抑制（Noise Suppression）：降低背景噪音提升轉錄品質
* 語言偵測（Language Detection）：自動判斷音訊語言類別
* 自訂詞彙（Custom Vocabulary）：加入專有名詞提升辨識準確率
* 置信度分數（Confidence Score）：模型對輸出正確性的機率評估
* 內容過濾（Content Filtering）：偵測並標示露骨或敏感內容
* 斷詞與標點（Tokenization & Punctuation）：復原標點與正確分詞
* 文字正規化（Text Normalization）：統一大小寫、數字與符號格式
* 關鍵詞加權（Keyword Boosting）：對重要詞彙提高辨識與摘要權重
* 章節粒度（Chapter Granularity）：章節切分的細緻程度設定
* 主旨萃取（Key Point Extraction）：擷取章節或節目的核心要點
* 摘要長度控制（Summary Length Control）：限制輸出字數或句數
* 前端框架（Frontend Framework）：建構使用者介面的程式庫或工具
* Streamlit：以 Python 快速建立互動式網頁介面的框架
* 側邊欄（Sidebar）：放置表單輸入與操作按鈕的側邊 UI 區域
* 展開面板（Expander）：可收合內容區塊以節省版面
* 圖片元件（Image Widget）：在頁面上顯示節目縮圖的 UI 元件
* 命令列參數（CLI Arguments）：從終端機傳入腳本的參數值
* 設定檔管理（Config Management）：集中保存金鑰與環境設定
* 環境變數（Environment Variables）：以系統層級保存機密與參數
* 序列化與反序列化（Serialization/Deserialization）：物件與 JSON 之間的轉換
* 日誌記錄（Logging）：於執行期間記錄事件與錯誤以便除錯
* 例外處理（Exception Handling）：攔截與處理執行錯誤確保程式穩定
* 即時語音辨識（Real-Time Speech Recognition）：在使用者說話時即時轉換語音為文字的技術。
* 組合式人工智慧即時 API（Assembly AI Real-Time API）：透過 WebSocket 提供即時語音辨識服務的 API。
* WebSocket：用於在客戶端與伺服器之間建立雙向持續連線的通訊協定。
* AsyncIO：Python 的非同步 I/O 標準庫，用於同時執行多個協程以提高效能。
* 協程（Coroutine）：可暫停與恢復執行的輕量級非同步函數。
* PiAudio：用於錄製與播放音訊的 Python 函式庫，封裝 PortAudio。
* PortAudio：跨平台音訊輸入輸出的底層函式庫。
* Base64 編碼（Base64 Encoding）：將二進位音訊資料轉換為文字格式以便於傳輸。
* JSON 格式（JSON Format）：以鍵值結構傳輸資料的標準格式。
* WebSocket URL：指定即時 API 的連線端點與參數（如取樣率）。
* 音訊取樣率（Sample Rate）：每秒擷取的音訊樣本數，影響音質與延遲。
* 非同步上下文管理器（Async Context Manager）：在非同步程式中安全開啟與關閉連線的控制結構。
* Ping Interval：WebSocket 保持連線的心跳時間間隔。
* Ping Timeout：當伺服器未回應時自動中斷的等待時間。
* 授權標頭（Authorization Header）：傳送 API 金鑰以驗證請求的 HTTP 標頭。
* 聲音串流（Audio Stream）：從麥克風連續讀取音訊資料的資料流。
* Overflow（緩衝區溢出）：當音訊處理速度低於輸入速度時導致的資料丟失情況。
* Base64 編碼後傳輸（Base64 Transmission）：API 要求以文字形式傳送音訊資料時使用的編碼方式。
* 音訊 JSON 封包（Audio JSON Packet）：包含音訊資料的 JSON 格式訊息，鍵名通常為 "audio_data"。
* 結束碼（Exit Code）：表示連線中止原因或錯誤狀態的代碼。
* 結果接收函式（Receive Function）：負責接收並解析 API 回傳轉錄結果的非同步函式。
* 最終轉錄（Final Transcript）：API 確認完整句子的最終辨識結果。
* 臨時轉錄（Partial Transcript）：在說話過程中即時更新的暫時辨識文字。
* 提示文字（Prompt）：用於傳遞給語言模型的輸入句子。
* 虛擬助理（Virtual Assistant）：能即時聽懂語音並生成回答的互動系統。
* OpenAI API：提供 GPT-3 等模型的自然語言生成與理解能力的雲端介面。
* GPT-3 模型（Generative Pre-trained Transformer 3）：OpenAI 的自然語言生成模型。
* 問答引擎（Q&A Engine）：根據使用者輸入回覆文字答案的模型模式。
* API 金鑰（API Key）：授權應用程式呼叫雲端 API 的密鑰。
* OpenAI Python 套件（OpenAI Python Package）：操作 OpenAI API 的官方 Python 函式庫。
* 完成端點（Completion Endpoint）：OpenAI API 用於生成文字的主要端點。
* Max Tokens：控制模型回覆長度的參數，限制生成文字的字數。
* 響應字典（Response Dictionary）：API 回傳的 JSON 資料結構，在 Python 中為字典。
* Choices 鍵（Choices Key）：包含一個或多個模型回覆選項的 JSON 鍵。
* Text 鍵（Text Key）：模型生成文字內容的實際欄位。
* 啟動主程式（Main Execution Block）：`if __name__ == "__main__":` 判斷 Python 執行起點的語句。
* 問答助手函式（Ask Computer Function）：封裝向 GPT-3 傳送提示並回傳答案的自定義函式。
* 結合模組（Module Integration）：將語音辨識、WebSocket、與 GPT-3 功能整合的過程。
* 聲控聊天機器人（Voice-Activated Chatbot）：能即時聽取語音、辨識文字並生成回覆的應用。
* 事件循環（Event Loop）：AsyncIO 負責排程與執行協程的核心機制。
* 例外捕捉（Exception Handling）：防止連線錯誤或中斷導致程式崩潰的機制。
* 音訊封包頻率（Audio Packet Rate）：決定每秒傳送幾次音訊資料的速率。
* 即時互動（Real-Time Interaction）：系統與使用者在毫秒級內回應的操作模式。
* 語音驅動介面（Voice Interface）：使用語音作為主要互動方式的應用介面。
* 非同步執行（Asynchronous Execution）：允許多個任務同時進行而不阻塞主程式的設計。
* 虛擬助理回覆（Assistant Response）：由語言模型生成並回傳給使用者的回答內容。
* 程式模組化（Program Modularization）：將錄音、傳輸與對話邏輯分離以提高可維護性。
