最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)下,加相應(yīng)的decode(頭文件)就可以轉(zhuǎn)換

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

聲道數(shù)channels

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

采樣位數(shù)bits

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

采樣頻率sample_rate

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

由于人耳的分辨率很有限,太高的頻率并不能分辨出來。在16位聲卡中有22KHz、44KHz等幾級,其中,22KHz相當(dāng)于普通FM廣播的音質(zhì),44KHz已相當(dāng)于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遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情

    這篇文章主要介紹了Python遍歷目錄下文件、讀取、千萬條數(shù)據(jù)合并詳情,對文件夾和文件進行屬性判斷,首先對文件夾進行遍歷,看文件夾里有什么樣的文件,讀取出文件夾中的所有文件,下面文章將詳細(xì)介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • keras:model.compile損失函數(shù)的用法

    keras:model.compile損失函數(shù)的用法

    這篇文章主要介紹了keras:model.compile損失函數(shù)的用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python tkinter實現(xiàn)鼠標(biāo)懸停提示

    python tkinter實現(xiàn)鼠標(biāo)懸停提示

    這篇文章主要為大家詳細(xì)介紹了python如何使用tkinter控件實現(xiàn)鼠標(biāo)懸停提示以及提示文本動態(tài)展示,文中的示例代碼講解詳細(xì),有需要的可以參考下
    2024-11-11
  • Python scipy的二維圖像卷積運算與圖像模糊處理操作示例

    Python scipy的二維圖像卷積運算與圖像模糊處理操作示例

    這篇文章主要介紹了Python scipy的二維圖像卷積運算與圖像模糊處理操作,涉及Python數(shù)學(xué)運算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • python讀取excel數(shù)據(jù)繪制簡單曲線圖的完整步驟記錄

    python讀取excel數(shù)據(jù)繪制簡單曲線圖的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于python讀取excel數(shù)據(jù)繪制簡單曲線圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python yield的使用詳解

    Python yield的使用詳解

    您可能聽說過,帶有 yield 的函數(shù)在 Python 中被稱之為、generator(生成器),何謂 generator ?我們先拋開 generator,以一個常見的編程題目來展示 yield 的概念
    2021-10-10
  • Python 實現(xiàn)文件讀寫、坐標(biāo)尋址、查找替換功能

    Python 實現(xiàn)文件讀寫、坐標(biāo)尋址、查找替換功能

    這篇文章主要介紹了Python 實現(xiàn)文件讀寫、坐標(biāo)尋址、查找替換功能,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-09-09
  • 如何使用?profile?進行python代碼性能分析

    如何使用?profile?進行python代碼性能分析

    對代碼優(yōu)化的前提是需要了解性能瓶頸在什么地方,程序運行的主要時間是消耗在哪里,對于比較復(fù)雜的代碼可以借助一些工具來定位,python?內(nèi)置了豐富的性能分析工具,本文介紹如何使用profile進行python代碼性能分析,感興趣的朋友一起看看吧
    2024-12-12
  • Python實現(xiàn)統(tǒng)計代碼行的方法分析

    Python實現(xiàn)統(tǒng)計代碼行的方法分析

    這篇文章主要介紹了Python實現(xiàn)統(tǒng)計代碼行的方法,結(jié)合實例形式分析了Python針對代碼行數(shù)的計算實現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-07-07
  • 深入淺析Python中join 和 split詳解(推薦)

    深入淺析Python中join 和 split詳解(推薦)

    這篇文章主要介紹了Python中join 和 split詳解的相關(guān)資料,本文還通過一個示例給大家介紹python join 和 split方法 的使用,需要的朋友可以參考下
    2016-06-06

最新評論

留坝县| 禹城市| 黔西| 清苑县| 密云县| 重庆市| 临沧市| 株洲县| 离岛区| 长垣县| 德保县| 谢通门县| 遂宁市| 陇西县| 南陵县| 六枝特区| 陵川县| 德兴市| 十堰市| 昭通市| 玛曲县| 九龙县| 平南县| 修武县| 景德镇市| 永寿县| 奉节县| 资阳市| 鄢陵县| 江都市| 安塞县| 新郑市| 北京市| 宾阳县| 保定市| 汨罗市| 车险| 荃湾区| 通河县| 康马县| 勃利县|