这个例子向您展示了如何使用音频捕获和回放在Raspberry Pi™硬件上改变音频信号的音调。
在这个例子中,你将学习如何:
从连接到树莓派硬件的USB麦克风或摄像头麦克风获取音频
改变获得的音频的音调
通过树莓派硬件的耳机插孔播放处理过的音频数据
请注意-此示例仅适用于已安装的Raspberry Pi™硬件MATLAB支持包。金宝app部署audiocapture
和audioplayer
在MATLAB金宝app®Online™中不支持。
音高移动是修改音频信号的音高以增加或减少音高的能力。例如,当一辆高速汽车在街上超过你时,当汽车靠近你时,声音的音调会增加,当汽车远离你时,声音的音调会降低。当音频源离接收器更近或更远时,连续的信号以更小或更大的时间间隔到达接收器。这个时间差导致接收机听到的音频的频率发生变化。您可以执行类似的音高转换操作,将音频信号拆分为两个分量,使用不同的时间间隔延迟信号,然后将它们加到一起。这个过程模拟了根据两个信号延迟或重叠的方式增加或减少音调的效果。为了保证统一的功率水平,必须对分裂信号的单个增益进行调制。
MATLAB®支金宝app持包树莓派™硬件
树莓派硬件(推荐型号3B或3B+)
音频采集设备:USB麦克风或摄像头麦克风
一副耳机,可以插入3.5毫米耳机插孔的硬件
USB电缆
以太网电缆
连接树莓派硬件和HDMI线的显示器(可选)
在开始本示例之前,我们建议您完成入门MATLAB支持包树莓派硬件金宝app的例子。
1.将USB数据线的micro-USB端连接树莓派,USB数据线的普通USB端连接计算机。等待硬件上PWR指示灯开始闪烁。
2.将摄像头或麦克风连接到硬件上的USB端口之一。请注意,一些网络摄像头耗电太多,可能需要一个有电源的USB集线器才能正常运行。
3.将一对耳机连接到硬件的3.5 mm耳机插孔。
4.使用硬件设置界面,配置树莓派网络。
1.在硬件终端上执行该命令,打开硬件的软件配置工具。
sudoraspi-config
2.2 .在“软件配置工具”界面,选择高级选项并按输入,然后选择音频并按输入.
3.选择3.5毫米(耳机)插孔选择并按输入.
4.新闻好吧.
创建一个raspi对象。
零售物价指数= raspi ();
创建captureObj
和playerObj
系统对象的音频处理树莓派硬件。
的captureObj
是否连接到音频源设备plughw: 1、0
.音频输入以48000采样率捕获,每帧采样4800。
captureObj = audiocapture(零售物价指数,“plughw: 1、0”,“SampleRate”, 48000,“SamplesPerFrame”, 4800);
的playbackObj
是否连接到音频播放器设备plughw: 0 1
.音频输出以48000采样率播放。
playbackObj = audioplayer(零售物价指数,“plughw: 0、1”,“SampleRate”, 48000);
如果您不知道设备的名称,请使用
函数。listAudioDevices
(金宝appSimu金宝applink支持包的树莓派硬件)
audiopluginexample。PitchShifter
是一个音频插件对象,它执行音调移动算法。插件参数是pitch移位(在半音调中),交叉衰落因子(控制两个延迟分支之间的重叠)和采样频率。插件的参数是通过将它们的值分别设置为输入参数pitch和overlap来调整的。
距= 5;重叠= 0.2;Fs = 8192;
shiftPitch
,可以用来执行音高变换的函数,实例化audiopluginexample。PitchShifter
插件,并使用setSampleRate
方法将其采样率设置为输入参数Fs。
pitchShifter = audiopluginexample。PitchShifter (“PitchShift”8“重叠”, 0.3);setSampleRate (pitchShifter Fs);
从输入设备捕获音频。输入类型为int16,在处理数据之前需要将其转换为double类型。这是因为函数shiftPitch
期望它的所有输入都是相同的数据类型。输出数据需要为int16类型,因此pitchshift是一个double类型,在发送到音频播放设备之前被强制转换为int16类型。
为k = 1:20 00 input = capture(captureObj); / /捕获对象pitchShifted = 0(大小(双(输入)),“喜欢”、双(输入));pitchShifter。PitchShift =球场;pitchShifter。重叠=重叠;[pitchShifted] = pitchShifter(双(输入));玩(playbackObj int16 (pitchShifted));结束
您可以部署raspi_pitchshiftdeployment ()
硬件上的功能。
函数Raspi_pitchshiftdeployment () rpi = raspi();captureObj = audiocapture(零售物价指数,“plughw: 1、0”,“SampleRate”, 48000,“SamplesPerFrame”, 4800);playbackObj = audioplayer(零售物价指数,“plughw: 0、1”,“SampleRate”, 48000);
距= 5;重叠= 0.2;Fs = 8192;
pitchShifter = audiopluginexample.PitchShifter(“PitchShift”8“重叠”,0.3);setSampleRate (pitchShifter Fs);
for k = 1:20 00 input = capture(captureObj); / /捕获数据pitchShifted = 0(大小(双(输入)),“喜欢”,双(输入));% #好< PREALL > pitchShifter。PitchShift =球场;pitchShifter。重叠=重叠;[pitchShifted] = pitchShifter(双(输入));玩(playbackObj int16 (pitchShifted));结束结束
部署raspi_pitchshiftdeployment
函数作为独立的可执行文件在硬件上使用
函数。部署
董事会= targetHardware (“树莓π”)部署(董事会,“raspi_pitchshiftdeployment”)
代码一代成功:视图报告
的部署
函数开始生成raspi_pitchshiftdeployment
函数。在代码生成的最后,MATLAB生成一个代码生成报告。使用此报告调试raspi_pitchshiftdeployment
函数用于生成代码中的任何构建错误和警告。
成功生成代码后,支持包将代码作为独立的可执行文件加载并在硬件上运行。金宝app可执行文件开始从音频设备获取实时音频输入,在获取的音频上运行音高偏移算法,然后在播放设备上播放结果。