使用pyAudio播放聲音
import pyaudio import wave buf = 1024 wf = wave.open(r"C:\Users\yuli\Desktop\a\forest.wav", 'rb') p = pyaudio.PyAudio() stream = p.open(format = p.get_format_from_width(wf.getsampwidth()), channels = wf.getnchannels(), rate = wf.getframerate(), output = True) while True: data = wf.readframes(buf) if data == "": break stream.write(data) stream.close() p.terminate()pyAudio類的open函數參數:
- rate - 取樣頻率
- channel - 聲道
- 1=>mono為單聲道
- 2=>stereo為雙聲道(立體聲)
- format - 取樣值量化格式
- pyaudio.paFloat32 = 1
- pyaudio.paInt32 = 2
- pyaudio.paInt24 = 4
- pyaudio.paInt16 = 8
- pyaudio.paInt8 = 16
- pyaudio.paUInt8 = 32
- pyaudio.paCustomFormat = 65536
- input - 若為True則為開啟輸入流
- output - 若為True則為開啟輸出流
- input_device_index - 輸入所使用的設備編號,不指定則為系統預設
- output_device_index - 輸出所使用的設備編號,不指定則為系統預設
- frames_per_buffer - 緩存塊大小
- start - 是否立即開始輸入輸出流,不指定則為True
使用pyAudio錄音
from pyaudio import PyAudio, paInt16 import numpy as np from datetime import datetime import wave def save_wave_file(filename, data): wf = wave.open(filename, 'wb') wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(SAMPLING_RATE) wf.writeframes(b"".join(data)) wf.close() NUM_SAMPLES = 2000 SAMPLING_RATE = 8000 LEVEL = 1500 COUNT_NUM = 20 SAVE_LENGTH = 8 pa = PyAudio() stream = pa.open(format=paInt16, channels=1, rate=SAMPLING_RATE, input=True, frames_per_buffer=NUM_SAMPLES) save_count = 0 save_buffer = [] while True: string_audio_data = stream.read(NUM_SAMPLES) audio_data = np.fromstring(string_audio_data, dtype=np.short) large_sample_count = np.sum( audio_data > LEVEL ) print(np.max(audio_data)) if large_sample_count > COUNT_NUM: save_count = 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: filename = datetime.now().strftime("%Y-%m-%d_%H_%M_%S") + ".wav" save_wave_file(filename, save_buffer) save_buffer = [] print(filename, "saved")
沒有留言:
張貼留言