【💊 Python的解憂錦囊】soundfile Not allowed for existing files (e

更新於 發佈於 閱讀時間約 4 分鐘

我們在處理音檔時常常會使用到 [soundfile](https://pypi.org/project/soundfile/) 這套工具, 當我們試圖讀取檔案時卻發生了這樣的錯誤訊息…

TypeError: Not allowed for existing files (except 'RAW'): samplerate, channels, format, subtype, endian


用於讀取和寫入音頻文件。它提供了一種簡單而靈活的方式來處理各種音頻格式的數據,例如 WAV、FLAC、AIFF、OGG 等等。


關於 soundfile

  • 讀取和寫入音頻文件:支持多種常見音頻格式的讀取和寫入,包括但不限於 WAV、FLAC、AIFF、OGG 等。
  • 與 NumPy 整合:可以方便地將音頻數據加載到 NumPy 陣列中,這使得對音頻數據進行分析和處理變得更加容易和靈活。
  • 支持不同採樣率和位深度:可以處理不同採樣率和位深度的音頻文件。
  • 跨平台支持soundfile 跨平台運行,在 Windows、MacOS 和 Linux 等操作系統上都能夠使用。

使用 soundfile 可以讓使用者輕鬆地處理音頻文件,從而進行聲音處理、信號處理、音樂分析等各種應用。


讀取檔案時很正常 😁

簡單的讀取音檔我們可以這樣做。

data, samplerate = sf.read('existing_file.wav')


這樣的讀取方式沒問題, soundfile 會根據我們的副檔名進行相關的格式轉換, 但凡事總有一些例外狀況。


當我們讀取來自網路傳輸的資料時, 卻… 😟

處理音訊時, 通常我們不會一次的連接就傳送所有的資料, 這樣對於效率來說太沒效率了, 尤其是大檔案, 我們通常會搭配websocket + asyncio來接收傳送的檔案並處理, 因此假設我們的伺服端皆收到檔案資料並試圖解碼時…

message = await socket.recv()
if message == 'Done':
return None, None

with io.BytesIO(message) as file:
message, _ = sf.read(
file=file,
dtype='float32',
format='WAV',
)

這時候就發生了以下狀況:

TypeError: Not allowed for existing files (except 'RAW'): samplerate, channels, format, subtype, endian


究竟是為什麼呢? 讓我們來好好探索一番 🕵️

首先我們根據線索查到原始碼區段, 🔍 請參考這裡

raw-image


原來是當我們的來源不是RAW時, 不允許隨意去更改 samplerate, channels, format, subtype, endian 這些屬性。

如何解決?

那麼如此一來事情就簡單了。

  1. 格式為 RAW, 自行填入取樣率、頻道、格式…等資訊。
message, _ = sf.read(
file=file,
dtype='float32',
format='RAW',
subtype='PCM_16',
samplerate='16000',
channels=1,
endian='FILE',
)
  1. 直接讀取, 不更改取樣率、頻道、格式…等資訊。
message, _ = sf.read(
file=file,
dtype='float32'
)

結語

音訊處理果然又是一個坑,相較於單純的文字處理, 需要具備更多底層的知識, 雖然困難, 但掌握起來後成就感會非常的大, 因此我們應該勇於學習, 讓自己的實力更加深厚, 共勉之。

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
129會員
284內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 影音也是如此, 即時! 即時! 即時! 已經是目前使用者體驗的必要元素了, 在這邊我們要分享的主題是如何在python程式語言的情境下使用ffmpeg來將音檔串流的轉換格式, 為什麼會有這樣的需求呢? 因為我們處理音檔時可能會需要統一輸出的格式, 當然背後也
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 影音也是如此, 即時! 即時! 即時! 已經是目前使用者體驗的必要元素了, 在這邊我們要分享的主題是如何在python程式語言的情境下使用ffmpeg來將音檔串流的轉換格式, 為什麼會有這樣的需求呢? 因為我們處理音檔時可能會需要統一輸出的格式, 當然背後也
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
torchaudio 是 PyTorch 的官方音訊處理庫,提供了許多用於音訊數據讀取、轉換和處理的工具和功能。它旨在簡化音訊數據的加載、預處理和後續處理過程,同時與 PyTorch 緊密整合, 包括我們常常用於資料科學處理的Tensor資料。 這個篇章主要在分享我們如何使用標準的I/O進行讀
Thumbnail
torchaudio 是 PyTorch 的官方音訊處理庫,提供了許多用於音訊數據讀取、轉換和處理的工具和功能。它旨在簡化音訊數據的加載、預處理和後續處理過程,同時與 PyTorch 緊密整合, 包括我們常常用於資料科學處理的Tensor資料。 這個篇章主要在分享我們如何使用標準的I/O進行讀
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
Thumbnail
解決 torchaudio 問題,RuntimeError: No audio I/O backend is available
Thumbnail
解決 torchaudio 問題,RuntimeError: No audio I/O backend is available
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News