Init example project 0.1.0
This commit is contained in:
BIN
src/__pycache__/settings.cpython-310.pyc
Normal file
BIN
src/__pycache__/settings.cpython-310.pyc
Normal file
Binary file not shown.
66
src/example.py
Normal file
66
src/example.py
Normal file
@@ -0,0 +1,66 @@
|
||||
import sounddevice as sd
|
||||
import soundfile as sf
|
||||
import settings
|
||||
import numpy as np
|
||||
|
||||
|
||||
def select_device(device_type='output'):
|
||||
i = 0
|
||||
for device in device_list: # 选择设备
|
||||
host_name = sd.query_hostapis(device['hostapi'])['name']
|
||||
if device_type == 'input' and 'PawPaw Microphone Array' in device['name'] and host_api in host_name \
|
||||
and input_channel == device['max_input_channels']:
|
||||
print("找到一个PawPaw输入设备: " + str(i) + " " + device['name'])
|
||||
sd.default.device = i # 设置输入设备
|
||||
if device_type == 'output' and 'PawPaw Microphone Array' in device['name'] and host_api in host_name \
|
||||
and output_channels == device['max_output_channels']:
|
||||
print("找到一个PawPaw输出设备: " + str(i) + " " + device['name'])
|
||||
sd.default.device = i # 设置输出设备
|
||||
i = i + 1
|
||||
|
||||
|
||||
def play_pcm_raw():
|
||||
# path = '../test_audio/test_audio_48k.raw'
|
||||
path = '../recorded_audio/testfile.raw' # 此处的.raw文件即为pcm格式音频
|
||||
# 解析pcm文件并存放到数据流中
|
||||
# 需要4个变量:文件路径,音频通道数,采样率,音频子类型
|
||||
# 此处的音频位深为16位,故选用PCM_16,关于如何寻找音频的子类型,参考README.md
|
||||
select_device(device_type='output')
|
||||
data, fs = sf.read(path, channels=2, samplerate=48000, subtype='PCM_16')
|
||||
sd.play(data, fs)
|
||||
sd.wait()
|
||||
|
||||
|
||||
def recording():
|
||||
duration = 3 # 录制时间
|
||||
fs = 48000 # 采样率
|
||||
select_device(device_type='input')
|
||||
my_recording = sd.rec(int(duration * fs), samplerate=fs, channels=18) # 将音频写入输入流
|
||||
sd.wait()
|
||||
|
||||
# 提取前两个通道的音频,保存为raw文件供测试播放
|
||||
stereo_array = np.empty((len(my_recording), 2))
|
||||
flag = 0
|
||||
for frame in my_recording:
|
||||
stereo_array[flag][0] = frame[0]
|
||||
stereo_array[flag][1] = frame[1]
|
||||
flag = flag + 1
|
||||
print(stereo_array)
|
||||
sf.write('../recorded_audio/testfile.raw', data=stereo_array, subtype='PCM_16', samplerate=fs)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
host_api = settings.HOST_API # 不同平台的音频接口不同,例如windows可用WASAPI
|
||||
input_channel = settings.MAX_INPUT_CHANNEL
|
||||
output_channels = settings.MAX_OUTPUT_CHANNEL
|
||||
|
||||
device_list = sd.query_devices() # 获取电脑上的所有音频设备
|
||||
recording()
|
||||
while True:
|
||||
play_pcm_raw()
|
||||
user_input = input("输入1继续播放,输入2退出测试")
|
||||
if user_input == '1':
|
||||
continue
|
||||
if user_input == '2':
|
||||
break
|
||||
print("结束")
|
||||
3
src/settings.py
Normal file
3
src/settings.py
Normal file
@@ -0,0 +1,3 @@
|
||||
HOST_API = 'WASAPI'
|
||||
MAX_INPUT_CHANNEL = 18
|
||||
MAX_OUTPUT_CHANNEL = 2
|
||||
Reference in New Issue
Block a user