python 通過麥克風(fēng)錄音 生成wav文件的方法
更新時間:2019年01月09日 15:07:12 作者:傳奇石頭110
今天小編就為大家分享一篇python 通過麥克風(fēng)錄音 生成wav文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
如下所示:
#!/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個取樣之內(nèi)出現(xiàn)COUNT_NUM個大于LEVEL的取樣則記錄聲音
self.save_length = 8 #聲音記錄的最小長度:save_length * num_samples 個取樣
self.time_count = 8 #錄音時間,單位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個取樣
string_audio_data = stream.read(self.num_samples)
# 將讀入的數(shù)據(jù)轉(zhuǎn)換為數(shù)組
audio_data = np.fromstring(string_audio_data, dtype = np.short)
#計算大于 level 的取樣的個數(shù)
large_sample_count = np.sum(audio_data > self.level)
print(np.max(audio_data)), "large_sample_count=>", large_sample_count
# 如果個數(shù)大于COUNT_NUM,則至少保存SAVE_LENGTH個塊
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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- python實現(xiàn)網(wǎng)頁錄音效果
- python實現(xiàn)錄音功能(可隨時停止錄音)
- Python調(diào)用Windows API函數(shù)編寫錄音機(jī)和音樂播放器功能
- Python人工智能之路 之PyAudio 實現(xiàn)錄音 自動化交互實現(xiàn)問答
- python實現(xiàn)播放音頻和錄音功能示例代碼
- python實現(xiàn)錄音小程序
- 基于python實現(xiàn)百度語音識別和圖靈對話
- 使用Python和百度語音識別生成視頻字幕的實現(xiàn)
- python版百度語音識別功能
- python調(diào)用百度REST API實現(xiàn)語音識別
- python調(diào)用百度語音識別api
- python實現(xiàn)百度語音識別api
- python錄音并調(diào)用百度語音識別接口的示例
相關(guān)文章
python中將正則過濾的內(nèi)容輸出寫入到文件中的實例
今天小編就為大家分享一篇python中將正則過濾的內(nèi)容輸出寫入到文件中的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
簡單談?wù)凱ython中函數(shù)的可變參數(shù)
和C語言一樣,Python中也有可變參數(shù)函數(shù),即一個函數(shù)可以接收多個參數(shù),而這些參數(shù)的個數(shù)在函數(shù)調(diào)用之前事先是不知道的。下面這篇文章我們來介紹下python中的可變參數(shù)2016-09-09
python中快速進(jìn)行多個字符替換的方法小結(jié)
最近在用python給自己的seo工作提高效率和節(jié)省時間,發(fā)現(xiàn)python真的很不錯,可以完成很多事情。多個字符替換是大家可能都會遇到的一個問題,昨天在工作中就碰到了這么一個問題,所以想著記錄一下解決方案及其過程,方便以后參考。下面來一起看看吧。2016-12-12
Python Pygame實戰(zhàn)之賽車游戲的實現(xiàn)
如今的游戲可謂是層出不窮,不過小編發(fā)現(xiàn),賽車游戲也是深受大家歡迎啊,像跑跑卡丁車、QQ飛車,還有主機(jī)游戲極品飛車系列。本文將用Python中的Pygame模塊制作一個簡單的賽車游戲,感興趣的可以了解一下2022-03-03
Python 利用flask搭建一個共享服務(wù)器的步驟
這篇文章主要介紹了Python 利用flask搭建一個共享服務(wù)器的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12
python 監(jiān)控logcat關(guān)鍵字功能
這篇文章主要介紹了python 監(jiān)控logcat關(guān)鍵字功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

