当前位置: 首页 > news >正文

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。

IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器,支持4K HDMI2.0显示,接口丰富,拥有千兆以太网,全协议TypeC接口,USB3.0 ,eDP 和 双通道LVDS 屏幕接口,支持4G/5G模块和WIFI蓝牙,支持6轴G-Sensor,支持Linux/Android系统,适用于高端商显,银行自助终端,工业计算机,机器人等诸多行业。

产品规格书可查看深圳触觉智能官网产品中心

安装依赖库

配置前需要安装好相应的依赖库。

#apt-get update
#apt-get install python3
#apt-get install portaudio19-dev python-all-dev python3-all-dev
#apt-get install libasound-dev libportaudio2 libportaudiocpp0
#apt-get install python3-pip
#pip3 install pyaudio

录音脚本

在编辑脚本前需要知道使用的是哪个声卡。

可以通过“aplay -l ”获取。

#aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rockchipes8316c [rockchip,es8316-codec], device 0: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Audio [USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

由上面的打印可知USB声卡是Card1。

编辑python 录音脚本。

#vi record.py
import pyaudio
import wave
import os

CHUNK = 44100                                #采样频率
FORMAT = pyaudio.paInt16
CHANNELS = 1                                 #声卡通道
RATE = 44100                                
RECORD_SECONDS = 5                          #时长
WAVE_OUTPUT_FILENAME = "output.wav"         #导出的音频文件

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
        rate=RATE, input=True,
        input_device_index = 1,
        frames_per_buffer=CHUNK)
print("recording...")
frames = []

count=0
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
#for i in range(0, 5):
#while count < 5:
    data = stream.read(CHUNK)
    frames.append(data)
# count += 1

print("finished recording")
# stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()

录音

#python3 ./record.py

录音结束后我们就可以得到 output.wav 录音文件了。

播放脚本

编辑python 播放脚本。

#vi play.py
import pyaudio
import wave


CHUNK = 44100
FILENAME = './output.wav'

def play(filename = FILENAME):
    wf = wave.open(filename, 'rb')
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
        channels=wf.getnchannels(),
        rate=wf.getframerate(),
        output_device_index=0,
        output=True)
    data = wf.readframes(CHUNK)
    while data != b'':
        stream.write(data)
        data = wf.readframes(CHUNK)

    stream.stop_stream()
    stream.close()
    p.terminate()

play()

播放

#python3 ./play.py

通过以上指令,就可以播放刚录的音频文件了。

http://www.dtcms.com/a/4624.html

相关文章:

  • 重新开启GPT Plus充值通道——基于前端开发者工具
  • 电脑技巧:电脑常见蓝屏、上不了网等故障及解决办法
  • 用户与组管理:如何在服务器系统中管理用户和权限
  • npm,yarn,pnpm 清理缓存
  • 【鬼鬼鬼iiARPG开发记录】
  • webpack打包三方库直接在html里面使用
  • ios打包,证书获取
  • 分布式篇---第六篇
  • 【中间件】服务化中间件理论intro
  • LeetCode Hot100 105.从前序与中序遍历序列构造二叉树
  • Django同时连接多种数据库
  • Python 测试框架 Pytest 的入门
  • 如何将本地websocket发布至公网并实现远程访问?
  • 十大排序之计数排序、桶排序、基数排序(详解)
  • Android YUV存储方式
  • 百度AI布局:从财报看百度的核心竞争力和未来发展方向
  • 如何找出excel中两列数据中不同的值(IF函数的用法)
  • 分布式事务seata的AT模式介绍
  • 【点云surface】Poisson表面重建
  • 【opencv】计算机视觉:实时目标追踪
  • 竞赛项目 车位识别车道线检测 - python opencv
  • 【OpenCV实现图像:使用OpenCV生成拼图效果】
  • Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到
  • 五种多目标优化算法(MOJS、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(MATLAB代码)
  • Tomcat实现WebSocket即时通讯 Java实现WebSocket的两种方式
  • GEE:梯度提升树(Gradient Boosting Tree)分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)
  • letcode::数组中的第k个最大元素
  • 软件设计先进性之虚拟化技术的应用
  • 三、Keil安装芯片包、下载固件库、建立STM32工程模板
  • Ceres使用