python input 文件名_Python播放音頻與錄音

v2-dec88da2cea31f9b5131e549de3316a2_1440w.jpg?source=172ae18b

這一講主要介紹些音頻基本處理方式,為接下來的語音識別打基礎。

三種播放音頻的方式

使用 python 播放音頻有以下幾種方式:

os.system()

os.system(file) 調用系統應用來打開文件,file 可為圖片或者音頻文件。

缺點:要打開具體的應用,不能在后臺播放音頻。

pyaudio

安裝:pip install pyaudio

官方提供了播放音頻與錄音的 api ,使用十分方便,只要把Filename更改為你的音頻文件的文字,就可以播放音頻了。

"""PyAudio Example: Play a WAVE file."""import pyaudio
import waveCHUNK = 1024
FILENAME = '你的音頻文件'def play(filename = FILENAME):wf = wave.open(filename, 'rb')p = pyaudio.PyAudio()stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True)data = wf.readframes(CHUNK)while data != b'':stream.write(data)data = wf.readframes(CHUNK)stream.stop_stream()stream.close()p.terminate()

jupyter notebook

在 jupyer notebook 中播放音頻可以使用以下函數:

import IPython.display as ipd
ipd.Audio(文件名)

幾種讀取音頻的方式

python 有很多讀取音頻文件的方法,內置的庫 wave ,科學計算庫 scipy, 和方便易用的語音處理庫 librosa

下面將介紹分別使用這幾種庫讀取音頻文件:

安裝

wave 是內置庫直接導入即可。

scipy: pip install scipy

librosa: pip install librosa

使用

wave.open:

參數 path 為文件名,mode 為打開方式

'rb'方式打開文件返回一個 Wave_read 對象,而以'wb'方式打開文件返回一個 Wave_write 對象。

scipy.io.wavfile:

參數 path 為文件名

返回 rate : 采樣率(每秒采樣點的個數),data : 音頻數據

librosa.load:

參數 path 為文件名

返回 y 為音頻數據,sr 為采樣率

# read wav file from path
from scipy.io import wavfile
import librosa
import pyaudio# wave
file = wave.open(path,'rb')
# wavfile
rate, data = wavfile.read(path)
# librosa
y, sr = librosa.load(path)

下面演示一個使用 wavfile 讀取音頻文件并且畫出波形的例子

首先要計算音頻到底持續了多長時間,wave 的 shape 就是總的采樣點個數,除以采樣頻率可以得到持續的總時間(秒),乘1000得到總持續時間(毫秒)。接著通過 np.linsapce 產生時間的序列,最后使用 matplotlib 畫出圖像。

from scipy.io import wavfile
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline# 一秒采樣數
sr, wave = wavfile.read('D://QQPCMgr/Desktop/python3/skip.wav')
sample_number = wave.shape[0]
total_time = int(sample_number / sr * 1000)
time_series = np.linspace(0,total_time,sample_number)
fig, ax = plt.subplots(1, 1)
ax.plot(time_series, wave)
ax.set_title('Time*Amplitude')
ax.set_xlabel('Time/ms')
ax.set_ylabel('Amplitude/dB')

v2-dec88da2cea31f9b5131e549de3316a2_b.jpg

最后再借用 pyaudio 的 api 我們可以實現連續錄音功能:

python 實現錄音功能

其中,函數 multi_record每結束一次錄音會詢問 “是否進行下一次錄音?”,按回車就可以進行下一次錄音了。

import wave
import pyaudio
import matplotlib.pyplot as plt
import timeCHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5def record(filename='output.wav'):"""官方錄音教程"""p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("* recording")frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)print("* done recording")stream.stop_stream()stream.close()p.terminate()wf = wave.open(filename, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()def multi_record(num=3):"""implement 多次錄音"""for i in range(1,num+1):print('第{}次錄音準備'.format(i))filename = 'record_{}.wav'.format(i)record(filename)time.sleep(second)_ = input('進行下一次錄音?')def main():multi_record()if __name__ == '__main__':main()

更多精彩關注微信公眾號:Python高效編程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jQuery選擇器和方法的等價關系

層級選擇器 1、ancestor descendant &#xff08;后代選擇器&#xff09; 在給定的祖先元素下匹配所有的后代元素 $(“form input”) $(.div span)選取<div>里的所有的<span>元素 2、parent child &#xff08;子選擇器&#xff09;在給定的父元素下匹配所有…

ActionScript 3.0 Step By Step系列(四):來自面向對象開發之前的吶喊:“學會寫可重用的代碼”...

增強代碼的可重用能力&#xff0c;從創建可重用的代碼開始&#xff0c;可重用的代碼則是通過從現有代碼中重構加以封裝,使其成為功能單一的可復用代碼塊。這句話籠統點說便是“封裝”或“抽象”。 在實際的編程開發中&#xff0c;要實現代碼重用&#xff0c;而不是每次都去Copy…

express利用nodemailer發送郵件(163郵箱)

Nodemailer 是一個簡單易用的Node.js郵件發送組件 首先安裝這個組件 npm install nodemailer --save安裝之后&#xff0c;可以在某個get請求下&#xff0c;發送郵件&#xff0c;具體路由代碼&#xff1a; const express require("express"); const nodemailer requ…

使用 Solid 私有化存儲 IPFS 文件哈希值

背景 星際文件系統 IPFS&#xff08;InterPlanetary File System&#xff09;是一個面向全球的、點對點的分布式文件系統&#xff0c;目標是為了補充&#xff08;甚至是取代&#xff09;目前統治互聯網的超文本傳輸協議&#xff08;HTTP&#xff09;&#xff0c;將所有具有相同…

使用window.postMessage實現跨域通信

JavaScript由于同源策略的限制,跨域通信一直是棘手的問題。當然解決方案也有很多&#xff1a; document.domainiframe的設置&#xff0c;應用于主域相同而子域不同&#xff1b;利用iframe和location.hash&#xff0c;數據直接暴露在了url中&#xff0c;數據容量和類型都有限Fla…

appium啟動app失敗_Appium-Desktop Capability 配置及啟動App演示

Appium-Desktop Capability配置介紹desired capability的功能是配置Appium會話。為什么要配置capability&#xff0c;目的就是為了告訴Appium服務器您想要自動化的平臺和應用程序。Desired Capabilities是一組設置的鍵值對的集合&#xff0c;其中鍵對應設置的名稱&#xff0c;而…

WinRAR 命令行簡體中文說明

從命令行也可以運行 WinRAR 命令&#xff0c;常規的命令行語法描述如下:WinRAR - -命令 要 WinRAR 運行的字符組合代表功能。開關 切換操作指定類型&#xff0c;壓縮強度&#xff0c;壓縮文件類型&#xff0c;等等的定義。壓縮文件 要處理的壓縮文件名。文件 要處理的文件名。列…

以Windows服務方式運行.NET Core程序

原文:以Windows服務方式運行.NET Core程序在之前一篇博客《以Windows服務方式運行ASP.NET Core程序》中我講述了如何把ASP.NET Core程序作為Windows服務運行的方法&#xff0c;而今&#xff0c;我們又遇到了新的問題&#xff0c;那就是&#xff1a;我們的控制臺程序&#xff0c…

SparkSession.read().csv()無法定位本地文件的問題

原因是spark有兩個文件頭 [file://]代表本地 [hdfs://]代表hdfs路徑 如果路徑沒有文件頭&#xff0c;spark會將該路徑默認添加上"hdfs://" 所以如果要訪問本地csv文件&#xff0c;需要確保路徑前面有"file://" //java代碼&#xff0c;告訴spark這是本地文件…

JavaScript的10種跨域共享的方法

在客戶端編程語言中&#xff0c;如javascript和ActionScript&#xff0c;同源策略是一個很重要的安全理念&#xff0c;它在保證數據的安全性方面有著重要的意義。同源策略規定跨域之間的腳本是隔離的&#xff0c;一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。那…

好用的shell工具_精選5個酷斃的Python工具

來自&#xff1a;Python之禪工欲善其事必先利其器&#xff0c;一個好的工具能讓起到事半功倍的效果&#xff0c;Python社區提供了足夠多的優秀工具來幫助開發者更方便的實現某些想法&#xff0c;下面這幾個工具給我的工作也帶來了很多便利&#xff0c;推薦給追求美好事物的你。…

承載輝煌歷史 暢想無線未來

看了JustDI的文章“手機也能當電腦用&#xff1f;&#xff0d;&#xff0d;談談未來智能手機操作系統的走向”&#xff0c;作為嵌入式愛好者&#xff0c;我也想談談自己的看法。首先&#xff0c;從網絡發展的角度看&#xff0c;移動互聯網的寬帶化&#xff0c;寬帶互聯網的移動…

接口碼釋義

1xx&#xff1a;信息&#xff0c;請求收到&#xff0c;繼續處理 2xx&#xff1a;成功&#xff0c;行為被成功地接受、理解和采納 3xx&#xff1a;重定向&#xff0c;為了完成請求&#xff0c;必須進一步執行的動作 4xx&#xff1a;客戶端錯誤&#xff0c;請求包含語法錯誤或…

java讀取文件內容,文件頭有\ufeff

"\ufeff"是UTF-8 BOM編碼的文件頭&#xff0c;代表該文件按照什么字節順序排序 調用java的工具類[ UnicodeInputStream ]即可解決這個問題 //第二個參數targetEncoding為null時在getDetectedEncoding方法中會自動檢測編碼類型 UnicodeInputStream unicodeInputStrea…

6款國內外SNS開源軟件 搭建社交網站利器

SNS(Social Network Service)&#xff0c;有時稱為社交網絡&#xff0c;有時稱為社會化網絡&#xff0c;專指旨在幫助人們建立社會性網絡的互聯網應用服務。如果對SNS概念還很模糊&#xff0c;說到人人網、開心網你就明白了。 去年360圈、螞蟻網接連關站給SNS前景蒙上一層陰影&…

aop實現原理_從宏觀的實現原理和設計本質入手,帶你理解 AOP 框架的原理

點擊上方“Java知音”&#xff0c;選擇“置頂公眾號”技術文章第一時間送達&#xff01;作者&#xff1a;FeelsChaoticjuejin.im/post/5c57b2d5e51d457ffd56ffbb前言本文將從另一個角度講解 AOP&#xff0c;從宏觀的實現原理和設計本質入手。大部分講 AOP 的博文都是一上來就羅…

孟憲會老師推薦的一部C#圖解教程

Amazon五星級盛譽 C# 最新特性一覽無余 數十年開發與教學經驗的結晶 圖、表和文字完美結合&#xff0c;最易學的C# 教程 本書詳細信息&#xff1a;http://www.china-pub.com/43556 微軟4大名著評選結果揭曉&#xff1a;http://www.china-pub.com/static07/0812/jsj_micrmingz_0…

Python數據分析Numpy庫方法簡介(三)

補充&#xff1a; np.ceil()向上取整 3.1向上取整是4 np.floor()向下取整 數組名.resize((m,n)) 重置行列 基礎操作 np.random.randn()符合正態分布(鐘行/高斯)的數據 矩陣的水平拼接 np.vstack((a,b)) 矩陣的垂直拼接 np.hstack((a,b)) 點陣積&#xff1a; np.dot(a,b)/ ab…

xxl-job源碼分析

xxl-job源碼分析 xxl-job 系統說明 安裝 安裝部署參考文檔&#xff1a;分布式任務調度平臺xxl-job 功能 定時調度、服務解耦、靈活控制跑批時間&#xff08;停止、開啟、重新設定時間、手動觸發&#xff09; XXL-JOB是一個輕量級分布式任務調度平臺&#xff0c;其核心設計目標是…

定制jQuery File Upload為微博式單文件上傳

原文鏈接&#xff1a;http://avnpc.com/pages/single-file-upload-component-by-jquery-file-upload jQuery File Upload是一個非常優秀的上傳組件&#xff0c;主要使用了XHR作為上傳方式&#xff0c;并且利用了相當多的現代瀏覽器功能&#xff0c;所以可以實現諸如批量上傳、超…