欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)wav和pcm的轉(zhuǎn)換方式

 更新時間:2023年05月06日 14:11:41   作者:Jellyfish733  
這篇文章主要介紹了Python實現(xiàn)wav和pcm的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

wav和pcm的轉(zhuǎn)換(Python版本)

wav和pcm是語音信號處理中最常見的文件格式,時常會遇到需要兩種文件格式的相互轉(zhuǎn)換。

wav存儲的一般是解碼后為[-1, 1]的float數(shù)據(jù),文件頭有44個字節(jié)記錄文件的采樣率、長度等等信息。

pcm存儲的是int型整數(shù),不含任何采樣率相關(guān)信息。雖然原理比較簡單,但是整理后更便于利用。

wav轉(zhuǎn)pcm

原理:將文件頭去掉,數(shù)據(jù)轉(zhuǎn)成int型即可。

import numpy as np
def wav2pcm(wavfile, pcmfile, data_type=np.int16):
? ? f = open(wavfile, "rb")
? ? f.seek(0)
? ? f.read(44)
? ? data = np.fromfile(f, dtype= data_type)
? ? data.tofile(pcmfile)?

pcm轉(zhuǎn)wav

原理:利用wave庫,添加通道信息、采樣位數(shù)、采樣率等信息作為文件頭,pcm數(shù)據(jù)直接寫入即可。

import wave
def pcm2wav(pcm_file, wav_file, channels=1, bits=16, sample_rate=16000):
? ? pcmf = open(pcm_file, 'rb')
? ? pcmdata = pcmf.read()
? ? pcmf.close()
? ? if bits % 8 != 0:
? ? ? ? raise ValueError("bits % 8 must == 0. now bits:" + str(bits))
? ? wavfile = wave.open(wav_file, 'wb')
? ? wavfile.setnchannels(channels)
? ? wavfile.setsampwidth(bits // 8)
? ? wavfile.setframerate(sample_rate)
? ? wavfile.writeframes(pcmdata)
? ? wavfile.close()

PCM和WAV音頻格式的區(qū)別及python自動轉(zhuǎn)換

WAV和PCM的簡單介紹

  • PCM

pcm:pulse code modulation,脈沖編碼調(diào)制。將聲音等模擬信號變成符號化的脈沖列,予以記錄。是由[0]、[1]等符號構(gòu)成的數(shù)字信號,未經(jīng)過任何編碼和壓縮處理。pcm是沒有壓縮的編碼方式。

  • WAV

wav:wav是一種無損音頻文件格式,wav都有一個文件頭,文件頭包括音頻流的【編碼參數(shù)】,而對音頻流的編碼沒有硬性規(guī)定,符合ACM規(guī)范的編碼都行,所以wav格式通常只要在其他編碼(pcm、MP3)下,加相應的decode(頭文件)就可以轉(zhuǎn)換

關(guān)于音頻的基礎(chǔ)知識

聲道數(shù)channels

聲道數(shù)即聲音通道的數(shù)目。比如單聲道就是左右聲道播放是同一個聲音,立體聲可以使左右聲道分工,使聽起來有空間效果。

采樣位數(shù)bits

也可以稱為采樣值或取樣值,或叫采樣精度、位深度,就是將采樣樣本幅度量化。例如8bits就是把縱坐標分成2的8次方,即256份??梢院饬柯曇舨▌幼兓囊粋€參數(shù)(聲卡的分辨率)

采樣頻率sample_rate

取樣頻率,每秒取得聲音樣本的次數(shù)。頻率越高,聲音的質(zhì)量也就越好,還原也就越真實。

由于人耳的分辨率很有限,太高的頻率并不能分辨出來。在16位聲卡中有22KHz、44KHz等幾級,其中,22KHz相當于普通FM廣播的音質(zhì),44KHz已相當于CD音質(zhì)了,目前的常用采樣頻率都不超過48KHz

pcm文件所占容量:儲存量=(采樣頻率*采樣位數(shù)*聲道*時間)/ 8 | (8為單位,字節(jié)數(shù))

互相轉(zhuǎn)換代碼

import wave
import numpy as np
# pcm轉(zhuǎn)wav格式,單聲道,采樣精度,采樣率
def pcm2wav(pcm_file, wav_file, channels=1, bits=16, sample_rate=16000):
    with open(pcm_file,'rb') as f:
        pcmdata = f.read()
    if bits % 8 != 0:
        raise ValueError("bits % 8 must == 0. now bits:"+str(bits))
    wavfile = wave.open(wav_file,'wb')
    wavfile.setnchannels(channels)
    wavfile.setsampwidth(bits // 8)
    wavfile.setframerate(sample_rate)
    wavfile.writeframes(pcmdata)
    wavfile.close()
# wav轉(zhuǎn)pcm格式
def wav2pcm(wav_file, pcm_file, data_type=np.int16):
    with open(wav_file,'rb') as f:
        f.seek(0)
        f.read(44)
        data = np.fromfile(f,dtype=data_type)
        data.tofile(pcm_file)
#wav_file,pcm_file分別是兩種格式文件的讀取(存儲)路徑

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python-OpenCV消除圖像中孤立的小區(qū)域操作

    使用Python-OpenCV消除圖像中孤立的小區(qū)域操作

    這篇文章主要介紹了使用Python-OpenCV消除圖像中孤立的小區(qū)域操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python爬取APP下載鏈接的實現(xiàn)方法

    Python爬取APP下載鏈接的實現(xiàn)方法

    這篇文章主要實現(xiàn)的是批量下載安卓APP。顯然用手點是不科學的。于是嘗試用Python寫了一個半自動化的腳本。所謂半自動化,就是把下載鏈接批量抓取下來,然后一起貼到迅雷里進行下載,這樣可以快速批量下載。有需要的朋友們可以一起看看吧。
    2016-09-09
  • python中os.remove()用法及注意事項

    python中os.remove()用法及注意事項

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python中os.remove()用法及注意事項,有需要的朋友們可以跟著學習下。
    2021-01-01
  • python django中8000端口被占用的解決

    python django中8000端口被占用的解決

    今天小編就為大家分享一篇python django中8000端口被占用的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)

    20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn)

    這篇文章主要介紹了20行Python代碼實現(xiàn)一款永久免費PDF編輯工具的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • pycharm 實現(xiàn)本地寫代碼,服務器運行的操作

    pycharm 實現(xiàn)本地寫代碼,服務器運行的操作

    這篇文章主要介紹了pycharm 實現(xiàn)本地寫代碼,服務器運行的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python繪制分布折線圖的示例

    python繪制分布折線圖的示例

    這篇文章主要介紹了python繪制分布折線圖的示例代碼,幫助大家更好的利用python繪制圖像,感興趣的朋友可以了解下
    2020-09-09
  • python 爬取影視網(wǎng)站下載鏈接

    python 爬取影視網(wǎng)站下載鏈接

    一個簡單的爬取影視網(wǎng)站下載鏈接的爬蟲,非常適合新手學習,感興趣的朋友可以參考下
    2021-05-05
  • Matplotlib實現(xiàn)各種條形圖繪制

    Matplotlib實現(xiàn)各種條形圖繪制

    這篇文章主要介紹了Matplotlib實現(xiàn)各種條形圖繪制,文章通過利用 plt.bar 方法實現(xiàn)各種條形圖繪制,內(nèi)容詳細具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • 如何利用python之wxpy模塊玩轉(zhuǎn)微信

    如何利用python之wxpy模塊玩轉(zhuǎn)微信

    這篇文章主要介紹了利用python之wxpy模塊玩轉(zhuǎn)微信,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論