python 通過麥克風(fēng)錄音 生成wav文件的方法
更新時(shí)間:2019年01月09日 15:07:12 作者:傳奇石頭110
今天小編就為大家分享一篇python 通過麥克風(fēng)錄音 生成wav文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
如下所示:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
########################################################################
#
# Copyright (c) 2017 aibot.me, Inc. All Rights Reserved
#
########################################################################
"""
File: gen_wav.py
Date: 2017/03/24 12:36:27
Brief: 通過麥克風(fēng)錄音 生成 wav文件
"""
import os
import sys
import wave
import numpy as np
from datetime import datetime
from pyaudio import PyAudio, paInt16
class GenAudio(object):
def __init__(self):
self.num_samples = 2000 #pyaudio內(nèi)置緩沖大小
self.sampling_rate = 8000 #取樣頻率
self.level = 1500 #聲音保存的閾值
self.count_num = 20 #count_num個(gè)取樣之內(nèi)出現(xiàn)COUNT_NUM個(gè)大于LEVEL的取樣則記錄聲音
self.save_length = 8 #聲音記錄的最小長度:save_length * num_samples 個(gè)取樣
self.time_count = 8 #錄音時(shí)間,單位s
self.voice_string = []
#保存文件
def save_wav(self, filename):
wf = wave.open(filename, 'wb')
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(self.sampling_rate)
wf.writeframes(np.array(self.voice_string).tostring())
wf.close()
def read_audio(self):
pa = PyAudio()
stream = pa.open(format=paInt16, channels=1, rate=self.sampling_rate, input=True,
frames_per_buffer=self.num_samples)
save_count = 0
save_buffer = []
time_count = self.time_count
while True:
time_count -= 1
# 讀入num_samples個(gè)取樣
string_audio_data = stream.read(self.num_samples)
# 將讀入的數(shù)據(jù)轉(zhuǎn)換為數(shù)組
audio_data = np.fromstring(string_audio_data, dtype = np.short)
#計(jì)算大于 level 的取樣的個(gè)數(shù)
large_sample_count = np.sum(audio_data > self.level)
print(np.max(audio_data)), "large_sample_count=>", large_sample_count
# 如果個(gè)數(shù)大于COUNT_NUM,則至少保存SAVE_LENGTH個(gè)塊
if large_sample_count > self.count_num:
save_count = self.save_length
else:
save_count -= 1
if save_count < 0:
save_count = 0
if save_count > 0:
save_buffer.append(string_audio_data)
else:
if len(save_buffer) > 0:
self.voice_string = save_buffer
save_buffer = []
print("Recode a piece of voice successfully!")
return True
if time_count == 0:
if len(save_buffer) > 0:
self.voice_string = save_buffer
save_buffer = []
print("Recode a piece of voice successfully!")
return True
else:
return False
return True
if __name__ == "__main__":
r = GenAudio()
r.read_audio()
r.save_wav("./test.wav")
以上這篇python 通過麥克風(fēng)錄音 生成wav文件的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- python實(shí)現(xiàn)網(wǎng)頁錄音效果
- python實(shí)現(xiàn)錄音功能(可隨時(shí)停止錄音)
- Python調(diào)用Windows API函數(shù)編寫錄音機(jī)和音樂播放器功能
- Python人工智能之路 之PyAudio 實(shí)現(xiàn)錄音 自動(dòng)化交互實(shí)現(xiàn)問答
- python實(shí)現(xiàn)播放音頻和錄音功能示例代碼
- python實(shí)現(xiàn)錄音小程序
- 基于python實(shí)現(xiàn)百度語音識(shí)別和圖靈對(duì)話
- 使用Python和百度語音識(shí)別生成視頻字幕的實(shí)現(xiàn)
- python版百度語音識(shí)別功能
- python調(diào)用百度REST API實(shí)現(xiàn)語音識(shí)別
- python調(diào)用百度語音識(shí)別api
- python實(shí)現(xiàn)百度語音識(shí)別api
- python錄音并調(diào)用百度語音識(shí)別接口的示例
相關(guān)文章
python中將正則過濾的內(nèi)容輸出寫入到文件中的實(shí)例
今天小編就為大家分享一篇python中將正則過濾的內(nèi)容輸出寫入到文件中的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
Python根據(jù)文件后綴實(shí)現(xiàn)文件夾整理
這篇文章主要為大家詳細(xì)介紹了Python如何根據(jù)文件后綴實(shí)現(xiàn)文件夾整理,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的可以參考下2024-02-02
簡單談?wù)凱ython中函數(shù)的可變參數(shù)
和C語言一樣,Python中也有可變參數(shù)函數(shù),即一個(gè)函數(shù)可以接收多個(gè)參數(shù),而這些參數(shù)的個(gè)數(shù)在函數(shù)調(diào)用之前事先是不知道的。下面這篇文章我們來介紹下python中的可變參數(shù)2016-09-09
python中快速進(jìn)行多個(gè)字符替換的方法小結(jié)
最近在用python給自己的seo工作提高效率和節(jié)省時(shí)間,發(fā)現(xiàn)python真的很不錯(cuò),可以完成很多事情。多個(gè)字符替換是大家可能都會(huì)遇到的一個(gè)問題,昨天在工作中就碰到了這么一個(gè)問題,所以想著記錄一下解決方案及其過程,方便以后參考。下面來一起看看吧。2016-12-12
Python Pygame實(shí)戰(zhàn)之賽車游戲的實(shí)現(xiàn)
如今的游戲可謂是層出不窮,不過小編發(fā)現(xiàn),賽車游戲也是深受大家歡迎啊,像跑跑卡丁車、QQ飛車,還有主機(jī)游戲極品飛車系列。本文將用Python中的Pygame模塊制作一個(gè)簡單的賽車游戲,感興趣的可以了解一下2022-03-03
Python 利用flask搭建一個(gè)共享服務(wù)器的步驟
這篇文章主要介紹了Python 利用flask搭建一個(gè)共享服務(wù)器的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12
python 監(jiān)控logcat關(guān)鍵字功能
這篇文章主要介紹了python 監(jiān)控logcat關(guān)鍵字功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

