This commit is contained in:
yumoqing 2024-09-18 15:49:32 +08:00
parent e3322b9bac
commit 865543cf56

View File

@ -1,64 +0,0 @@
import pyaudio
import av
from av import AudioFrame
import numpy as np
from appPublic.folderUtils import temp_file
# 录音参数
def MonoMircoPhone():
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 10
# 初始化PyAudio
p = pyaudio.PyAudio()
# 打开音频流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("开始录音...")
frames = []
for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
ndarr = np.frombuffer(data, dtype=np.int16)
print(ndarr.shape)
c = ndarr.shape[0]
ndarr.reshape(c,1)
print(ndarr.shape)
frame = AudioFrame.from_ndarray(ndarr, format='s16', layout='mono')
yield frame
print(f'{type(data)}')
frames.append(data)
print("录音结束.")
# 停止并关闭音频流
stream.stop_stream()
stream.close()
p.terminate()
def frames_write_wave(frames):
path = temp_file(suffix='.wav')
output_container = av.open(path, 'w')
out_stream = output_container.add_stream('pcm_s16le')
for frame in frames:
for packet in out_stream.encode(frame):
output_container.mux(packet)
for packet in out_stream.encode(None):
output_container.mux(packet)
output_container.close()
return path
if __name__ == '__main__':
frames = [f for f in MonoMircoPhone()]
frame_write_wave(frames)