Init example project 0.1.0
This commit is contained in:
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
4
.idea/misc.xml
generated
Normal file
4
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (pxua216mb-exp-vzNqSFa7-py3.10) (2)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/pxua216mb-exp.iml" filepath="$PROJECT_DIR$/.idea/pxua216mb-exp.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
10
.idea/pxua216mb-exp.iml
generated
Normal file
10
.idea/pxua216mb-exp.iml
generated
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.10 (pxua216mb-exp-vzNqSFa7-py3.10) (2)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
17
README.md
Normal file
17
README.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# PXUA216MB-DL2-M Python例程
|
||||||
|
|
||||||
|
## 安装
|
||||||
|
本项目通过poetry实现包管理
|
||||||
|
|
||||||
|
关于poetry的安装及使用方法:[poetry](https://python-poetry.org/docs/)
|
||||||
|
|
||||||
|
本项目依赖于开源项目 [sounddevice](https://python-sounddevice.readthedocs.io/en/0.4.4/installation.html)
|
||||||
|
|
||||||
|
安装poetry后,简单使用```poetry install```即可安装依赖
|
||||||
|
|
||||||
|
## 使用
|
||||||
|
###寻找一个格式的子类型:
|
||||||
|
```
|
||||||
|
>>> import soundfile as sf
|
||||||
|
>>> sf.available_subtypes('RAW')
|
||||||
|
```
|
||||||
BIN
recorded_audio/testfile.raw
Normal file
BIN
recorded_audio/testfile.raw
Normal file
Binary file not shown.
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
|
||||||
BIN
test_audio/Digital Presentation_48000.wav
Normal file
BIN
test_audio/Digital Presentation_48000.wav
Normal file
Binary file not shown.
BIN
test_audio/test_audio_16k.raw
Normal file
BIN
test_audio/test_audio_16k.raw
Normal file
Binary file not shown.
BIN
test_audio/test_audio_48k.raw
Normal file
BIN
test_audio/test_audio_48k.raw
Normal file
Binary file not shown.
Reference in New Issue
Block a user