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

python使用pyaudio錄音和格式轉(zhuǎn)化方式

 更新時(shí)間:2023年05月06日 16:30:25   作者:沐嵐浩  
這篇文章主要介紹了python使用pyaudio錄音和格式轉(zhuǎn)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用pyaudio錄音和格式轉(zhuǎn)化

環(huán)境

pip3 install pyaudio
pip3 install wave
pip3 install numpy?
  • linux 21.04
  • python 3.7

代碼(Record類)

#!/bin/python3
# 標(biāo)識(shí)引用的python版本
import pyaudio
import wave
import sys
import os
import numpy as np
"""
首先集成一下錄音功能和格式轉(zhuǎn)換功能
"""
class Record():
? ? """
? ? 錄音的類
? ? CHUNK = 1024
? ? FORMAT = pyaudio.paInt16 ?
? ? CHANNELS = 1 ?聲道
? ? RATE = 16000 ?頻率
? ? RECORD_SECONDS = 5 ?錄音時(shí)間 ?單位=> s
? ? WAVE_OUTPUT_FILENAME = os.getcwd() + "/python/output1.wav" ? 錄音文件
? ? """
? ? def __init__(self,WAVE_OUTPUT_FILENAME,CHUNK=1024,
? ? FORMAT=pyaudio.paInt16,CHANNELS=1,RECORD_SECONDS=5,
? ? Input=True,RATE=16000,PCMName="out.pcm",DataType=np.int16):
? ? ? ? self.CHUNK = CHUNK
? ? ? ? self.FORMAT = FORMAT
? ? ? ? self.CHANNELS = CHANNELS
? ? ? ? self.RECORD_SECONDS = RECORD_SECONDS
? ? ? ? self.WAVE_OUTPUT_FILENAME = WAVE_OUTPUT_FILENAME
? ? ? ? self.Input = Input
? ? ? ? self.RATE = RATE
? ? ? ? self.PCMName = PCMName
? ? ? ? self.DataType = DataType
? ? def recording(self):
? ? ? ? """
? ? ? ? 這句代碼 會(huì)屏蔽一些不必要的報(bào)錯(cuò)
? ? ? ? os.close(sys.stderr.fileno())
? ? ? ? """
? ? ? ? #隱藏一些報(bào)錯(cuò),這些不影響程序的運(yùn)行
? ? ? ? os.close(sys.stderr.fileno())
? ? ? ? print("開(kāi)始錄音")
? ? ? ? p = pyaudio.PyAudio()
? ? ? ? stream = p.open(format=self.FORMAT,
? ? ? ? ? ? ? ? channels=self.CHANNELS,
? ? ? ? ? ? ? ? rate=self.RATE,
? ? ? ? ? ? ? ? input=self.Input,#默認(rèn)為True
? ? ? ? ? ? ? ? frames_per_buffer=self.CHUNK)
? ? ? ? frames = []
? ? ? ? for i in range(0, int(self.RATE / self.CHUNK * self.RECORD_SECONDS)):
? ? ? ? ? ? data = stream.read(self.CHUNK)
? ? ? ? ? ? frames.append(data)
? ? ? ? print("done")
? ? ? ? # 關(guān)閉流
? ? ? ? stream.stop_stream()
? ? ? ? stream.close()
? ? ? ? p.terminate()
? ? ? ? wf = wave.open(self.WAVE_OUTPUT_FILENAME, 'wb')
? ? ? ? wf.setnchannels(self.CHANNELS)
? ? ? ? wf.setsampwidth(p.get_sample_size(self.FORMAT))
? ? ? ? wf.setframerate(self.RATE)
? ? ? ? wf.writeframes(b''.join(frames))
? ? ? ? wf.close()
? ? def wav2pcm(self):
? ? ? ? """
? ? ? ? 音頻文件wav格式 轉(zhuǎn) pcm格式
? ? ? ? """
? ? ? ? f = open(self.WAVE_OUTPUT_FILENAME, "rb")
? ? ? ? f.seek(0)
? ? ? ? f.read(1024)
? ? ? ? data = np.fromfile(f, dtype=self.DataType)
? ? ? ? # 獲取 分割后的 數(shù)組
? ? ? ? filePath = ?str(self.WAVE_OUTPUT_FILENAME).split('/')
? ? ? ? path = ''
? ? ? ? # 拼接路徑 取出最后一位 [0,-1)
? ? ? ? for item in filePath[:-1]:
? ? ? ? ? ? path += item +'/'
? ? ? ? path += self.PCMName?
? ? ? ? # print("PCM Path =>",path)
? ? ? ? data.tofile(path)
? ? ? ? print("結(jié)束")
? ? ? ? # 可以返回一個(gè)元組; 也可以把它封成數(shù)組返回
? ? ? ? return (self.WAVE_OUTPUT_FILENAME,path)
? ? def run(self):
? ? ? ? self.recording()
? ? ? ? wavpath,path = self.wav2pcm()
? ? ? ? # print("wave =>",wavpath,"\n","path =>",path)
# 這個(gè)就不寫入那個(gè)類里了, 這樣方便調(diào)用 不需要再初始化類了
# 可直接copy到使用的類中或者文件里
def pcm2wav(pcmfile,wavfile,channels=1,rate=16000):
? ? with open(pcmfile,'rb') as fp:
? ? ? ? pcmdata = fp.read()
? ? with wave.open(wavfile, 'wb') as wav:
? ? ? ? wav.setnchannels(channels)
? ? ? ? wav.setsampwidth(16 // 8)
? ? ? ? wav.setframerate(rate)
? ? ? ? ? ? # 寫入
? ? ? ? wav.writeframes(pcmdata)
# 測(cè)試
if __name__ == "__main__":
? ? wavepath = os.getcwd() + "/python/output1.wav" ?
? ? dev = Record(wavepath)
? ? # dev.run()
? ? pcmfile = os.getcwd() + '/python/demo.pcm'
? ? wavfile = os.getcwd() + '/python/demo.wav'
? ? pcm2wav(pcmfile,wavfile)?

pyaudio播放聲音不清晰問(wèn)題

在樹(shù)莓派上使用pyaudio播放pcm文件的時(shí)候,發(fā)現(xiàn)明顯的不清晰,感覺(jué)有輕微的斷斷續(xù)續(xù),而使用aplay播放則非常清晰

測(cè)試文件:https://sis-sample-audio.obs.cn-north-1.myhuaweicloud.com/16k16bit.pcm

>>> import pyaudio
>>> p = pyaudio.PyAudio()
>>> stream = p.open(format=pyaudio.paInt16, channels=1, output=True)
>>> with open("16k16bit.pcm", "rb") as f:
... ? ? stream.write(f.read())
>>> aplay -f cd -c 1 -r 16000 16k16bit.pcm

最后發(fā)現(xiàn)是由于緩沖區(qū)的幀數(shù)過(guò)少導(dǎo)致播放不流暢,默認(rèn)pyaudio緩沖區(qū)的幀數(shù)為1024??梢酝ㄟ^(guò)提高frames_per_buffer參數(shù)值來(lái)解決。

>>> import pyaudio
>>> p = pyaudio.PyAudio()
>>> stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, frames_per_buffer=4096, output=True)
>>> with open("16k16bit.pcm", "rb") as f:
... ? ? stream.write(f.read())

總結(jié)

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

相關(guān)文章

  • Anaconda安裝配置Jupyter最新版的圖文步驟

    Anaconda安裝配置Jupyter最新版的圖文步驟

    本文詳細(xì)介紹了在本地環(huán)境中使用Anaconda安裝和配置Jupyter?Notebook的過(guò)程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Python3.5編程實(shí)現(xiàn)修改IIS WEB.CONFIG的方法示例

    Python3.5編程實(shí)現(xiàn)修改IIS WEB.CONFIG的方法示例

    這篇文章主要介紹了Python3.5編程實(shí)現(xiàn)修改IIS WEB.CONFIG的方法,涉及Python針對(duì)xml格式文件的讀寫以及節(jié)點(diǎn)操作相關(guān)技巧,需要的朋友可以參考下
    2017-08-08
  • python3實(shí)現(xiàn)高效的端口掃描

    python3實(shí)現(xiàn)高效的端口掃描

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)高效的端口掃描,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • python中掃描條形碼和二維碼的實(shí)現(xiàn)代碼

    python中掃描條形碼和二維碼的實(shí)現(xiàn)代碼

    pyzbar模塊是Python一個(gè)開(kāi)源庫(kù)用于掃描和識(shí)別二維碼信息。這篇文章主要介紹了python中掃描條形碼和二維碼的示例代碼,需要的朋友可以參考下
    2021-10-10
  • Python中星號(hào)的五種用法小結(jié)

    Python中星號(hào)的五種用法小結(jié)

    本文主要介紹了Python中星號(hào)的五種用法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python同時(shí)替換多個(gè)字符串方法示例

    python同時(shí)替換多個(gè)字符串方法示例

    這篇文章主要介紹了python同時(shí)替換多個(gè)字符串方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 詳解pytest中runtestprotocol方法的實(shí)現(xiàn)

    詳解pytest中runtestprotocol方法的實(shí)現(xiàn)

    runtestprotocol 是 pytest 執(zhí)行測(cè)試流程中的一個(gè)核心函數(shù),它主要負(fù)責(zé)調(diào)用測(cè)試函數(shù)的“setup”、“call”和“teardown”鉤子函數(shù),并生成對(duì)應(yīng)的測(cè)試報(bào)告,本文將深入探究pytest中runtestprotocol方法的實(shí)現(xiàn),需要的朋友可以參考下
    2023-10-10
  • 利用python求積分的實(shí)例

    利用python求積分的實(shí)例

    今天小編就為大家分享一篇利用python求積分的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python讀取并定位excel數(shù)據(jù)坐標(biāo)系詳解

    python讀取并定位excel數(shù)據(jù)坐標(biāo)系詳解

    這篇文章主要介紹了python讀取并定位excel數(shù)據(jù)坐標(biāo)系詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理的實(shí)現(xiàn)代碼

    使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理的實(shí)現(xiàn)代碼

    Python作為數(shù)據(jù)科學(xué)領(lǐng)域的熱門編程語(yǔ)言,提供了豐富的庫(kù)和工具來(lái)處理和清洗數(shù)據(jù),本文將介紹如何使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

白水县| 舟山市| 池州市| 浦城县| 周口市| 汤原县| 泸西县| 土默特右旗| 宣恩县| 宜黄县| 通城县| 汤原县| 土默特右旗| 响水县| 韶关市| 万年县| 珠海市| 贵港市| 汨罗市| 余姚市| 土默特右旗| 惠安县| 巢湖市| 莎车县| 岢岚县| 九龙县| 大宁县| 东源县| 太原市| 英德市| 高邑县| 祁东县| 夏津县| 城固县| 潢川县| 康乐县| 鹤壁市| 梅河口市| 类乌齐县| 巫山县| 太保市|