您的位置 首页 java

树莓派通过java获取麦克风声音并播放

试验目标:

1.在树莓派上,安装麦克风

2.提供一个java springboot的项目,打包好以后,放到树莓派中,运行,项目提供出restful风格的接口,对麦克风的录制与暂停进行控制。

3.实时播放麦克风的声音。

这样做,是为了后面对声音进行识别控制做好基础。

定义与范围划分:

1.载体:小车底盘,轮子等非电子类物品统称为载体。

2.控制中心:树莓派称为控制中心

3.电子部件: 麦克风

4.软件部分:java语言与其操作系统划分为软件部分

=================================================

一.准备

思路:通过java web程序,通过接口的方式,控制麦克风录制与播放功能。并将录制文件放到磁盘存储起来。

1.控制中心

树莓派4b(对树莓派的使用不熟悉或者对java不熟悉的同学请关注专栏,可以提供一些指导)

代码编写与管理平台(方便网页控制)

2.电子设备

麦克风

3.软件与程序

centos7 32位

java的运行编译环境jdk8

录制麦克风声音程序

4.载体

二.电路连接示意图

三.程序部分

注:由于直接读取音频,不要读取gpio针脚,所以无需通过pi4j,简单通过java的音频api就可以控制麦克风的录制等功能,

项目地址:

项目框架: spring boot

中 间 件: maven,git,jdk8

测试工具: jmeter

为了详细讲解代码部分,将项目进行拆分为以下几部分:pom文件,接口,核心类文件,测试文件

package top.fairy.global.globalfairytoppi4j.action;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import top.fairy.global.globalfairytoppi4j.sound.RecordAndPlay;

/**

* @author jiao_zg22

* @version 1.0

* @description 接口

* @date 2021/4/23 20:15

*/

@RestController

@SpringBootApplication

@RequestMapping(value = “/sound”)

public class SoundController {

private static final Logger logger = LogManager.getLogger();

@RequestMapping(value = “/record/start”, method = RequestMethod.POST)

public String record() {

logger.info(“音频录制开始”);

new Thread() {

@Override

public void run() {

try {

RecordAndPlay.play();

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

return “音频录制结束”;

}

@RequestMapping(value = “/record/stop”, method = RequestMethod.POST)

public String recordStop() {

logger.info(“音频录制停止”);

new Thread() {

@Override

public void run() {

try {

RecordAndPlay.stop();

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

return “音频录制停止”;

}

}

package top.fairy.global.globalfairytoppi4j.sound;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.SourceDataLine;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.FloatControl;

import javax.sound.sampled.TargetDataLine;

/**

* @author jiao_zg22

* @version 1.0

* @description 接口

* @date 2021/4/23 19:22

*/

public class RecordAndPlay {

static volatile boolean stop = false;

public static void main(String[] args) {

play();

try {

Thread.sleep(10000);

} catch (InterruptedException e) {

e.printStackTrace();

}

stop();

}

//播放音频文件

public static void play() {

try {

AudioFormat audioFormat =

// new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100F,

// 8, 1, 1, 44100F, false);

new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100F, 16, 2, 4,

44100F, true);

DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);

TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info);

targetDataLine.open(audioFormat);

final SourceDataLine sourceDataLine;

info = new DataLine.Info(SourceDataLine.class, audioFormat);

sourceDataLine = (SourceDataLine) AudioSystem.getLine(info);

sourceDataLine.open(audioFormat);

targetDataLine.start();

sourceDataLine.start();

FloatControl fc=(FloatControl)sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);

double value=2;

float dB = (float)

(Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);

fc.setValue(dB);

int nByte = 0;

final int bufSize=4100;

byte[] buffer = new byte[bufSize];

while (nByte != -1 && !stop ) {

//System.in.read();

nByte = targetDataLine.read(buffer, 0, bufSize);

sourceDataLine.write(buffer, 0, nByte);

System.out.println(stop);

}

sourceDataLine.stop();

} catch (Exception e) {

e.printStackTrace();

}

}

//播放音频文件

public static void stop() {

stop = true;

}

}

4.测试文件

链接: 提取码: 9h2f

或者可以自己写测试接口。就是简单的post,get方式的接口

五.效果

当放开 /sound/record/start 接口的时候开始录制音频,并实时回放。

当放开 /sound/record/stop 接口的时候,停止录制音频。

————————————————

版权声明:本文为CSDN博主「水上冰石」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

文章来源:智云一二三科技

文章标题:树莓派通过java获取麦克风声音并播放

文章地址:https://www.zhihuclub.com/175937.shtml

关于作者: 智云科技

热门文章

网站地图