- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每当我使用 Java 中的 SourceDataLine 类读取构成音频的字节时,我都会在播放时听到烦人的嗡嗡声背景噪音。谁能告诉我如何才能完全摆脱它?提前致谢。
更新:我已经发布了代码,但我的实际目标是从麦克风获取字节数据并将其传输到另一个客户端。我正在为客户放置代码。服务器在这里并不重要,因为它的唯一作用是将字节数组转发到另一个客户端。
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class Client001 extends JFrame implements ActionListener {
JButton startButton = new JButton("Open Microphone");
DataInputStream fromServer;
DataOutputStream toServer;
AudioFormat format = new AudioFormat(44100, 16, 1, true, true);
DataLine.Info targetInfo = new DataLine.Info(TargetDataLine.class, format);
DataLine.Info sourceInfo = new DataLine.Info(SourceDataLine.class, format);
TargetDataLine targetLine;
SourceDataLine sourceLine;
public static void main(String[] args) {
final Client001 c = new Client001();
c.connect2Server();
c.initializeSoundParams();
c.initGUI();
Thread receiver = new Thread(){
public void run(){
c.startSoundReceiver();
}
};
receiver.start();
}
public void connect2Server(){
try{
Socket socket = new Socket("108.61.181.112",8000);
fromServer = new DataInputStream(socket.getInputStream());
toServer = new DataOutputStream(socket.getOutputStream());
}
catch(Exception e){
e.printStackTrace();
}
}
public void initializeSoundParams(){
try{
targetLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
sourceLine = (SourceDataLine) AudioSystem.getLine(sourceInfo);
}
catch(Exception e){
}
}
public byte[] filterNoise(byte[] data,int range){
byte value = data[0];
for (int i=1; i<data.length; i++){
byte currentValue = data[i];
value += (currentValue - value) / range;
data[i] = value;
}
return data;
}
public void startSoundReceiver(){
try{
toServer.writeUTF("1");
sourceLine.open(format);
sourceLine.start();
while(true){
int dataSize = fromServer.readInt();
System.out.println("Length = " + dataSize);
byte[] targetData = new byte[dataSize];
fromServer.readFully(targetData,0,dataSize);
//targetData = filterNoise(targetData,60);
sourceLine.write(targetData, 0, targetData.length);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void startSoundSender(){
try{
targetLine.open(format);
targetLine.start();
int numBytesRead;
byte[] targetData = new byte[targetLine.getBufferSize() / 5];
//toServer.writeUTF("1");
while (true) {
numBytesRead = targetLine.read(targetData, 0, targetData.length);
System.out.println("Length = " + numBytesRead);
if (numBytesRead == -1) break;
toServer.writeInt(numBytesRead);
toServer.write(targetData,0,numBytesRead);
//sourceLine.write(targetData, 0, numBytesRead);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void initGUI(){
setLayout(null);
startButton.setBounds(30, 30, 180, 70);
add(startButton);
setTitle("Sound GUI");
setSize(300,300);
startButton.addActionListener(this);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == startButton){
Thread sender = new Thread(){
public void run(){
startSoundSender();
}
};
sender.start();
}
}
}
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class Client002 extends JFrame implements ActionListener {
JButton startButton = new JButton("Open Microphone");
DataInputStream fromServer;
DataOutputStream toServer;
AudioFormat format = new AudioFormat(44100, 8, 2, true, true);
DataLine.Info targetInfo = new DataLine.Info(TargetDataLine.class, format);
DataLine.Info sourceInfo = new DataLine.Info(SourceDataLine.class, format);
TargetDataLine targetLine;
SourceDataLine sourceLine;
public static void main(String[] args) {
final Client002 c = new Client002();
c.connect2Server();
c.initializeSoundParams();
c.initGUI();
Thread receiver = new Thread(){
public void run(){
c.startSoundReceiver();
}
};
receiver.start();
}
public void connect2Server(){
try{
Socket socket = new Socket("192.168.0.102",8000);
fromServer = new DataInputStream(socket.getInputStream());
toServer = new DataOutputStream(socket.getOutputStream());
}
catch(Exception e){
e.printStackTrace();
}
}
public void initializeSoundParams(){
try{
targetLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
sourceLine = (SourceDataLine) AudioSystem.getLine(sourceInfo);
}
catch(Exception e){
}
}
public byte[] filterNoise(byte[] data,int range){
byte value = data[0];
for (int i=1; i<data.length; i++){
byte currentValue = data[i];
value += (currentValue - value) / range;
data[i] = value;
}
return data;
}
public void startSoundReceiver(){
try{
toServer.writeUTF("2");
sourceLine.open(format);
sourceLine.start();
while(true){
int dataSize = fromServer.readInt();
System.out.println("Length = " + dataSize);
byte[] targetData = new byte[dataSize];
fromServer.readFully(targetData,0,dataSize);
targetData = filterNoise(targetData,20);
sourceLine.write(targetData, 0, targetData.length);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void startSoundSender(){
try{
targetLine.open(format);
targetLine.start();
int numBytesRead;
byte[] targetData = new byte[targetLine.getBufferSize() / 5];
//toServer.writeUTF("1");
while (true) {
numBytesRead = targetLine.read(targetData, 0, targetData.length);
System.out.println("Length = " + numBytesRead);
if (numBytesRead == -1) break;
toServer.writeInt(numBytesRead);
toServer.write(targetData,0,numBytesRead);
//sourceLine.write(targetData, 0, numBytesRead);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void initGUI(){
setLayout(null);
startButton.setBounds(30, 30, 180, 70);
add(startButton);
setTitle("Sound GUI");
setSize(300,300);
startButton.addActionListener(this);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == startButton){
Thread sender = new Thread(){
public void run(){
startSoundSender();
}
};
sender.start();
}
}
}
最佳答案
如果您的样本大小是16 位“AudioFormat(44100, 16, 1, true, true);”
那么,你就不能用单个字节来制作过滤器
您应该尝试使用 8 位的样本大小,或者尝试组合两个字节来进行过滤操作。
关于Java Sound 背景噪音消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31125159/
我见过很多网页都有一个简单的声音开/声音关按钮,当你按下声音时,它会播放音乐或一些 mp3 文件,当你按下声音时,它会关闭。 我该怎么做? 你好,我没打算使用 Flash -- 如果有一个标准插件我可
我正在尝试将 sound.Sound() 函数应用于循环中的 numpy 数组。具体来说,我想循环执行以下操作。 a_wave 到 d_wave 是 numpy 数组。 stim_a = sound.
我有一个项目需要我显示上传声音的波形。声音始终是 MP3,大部分时间是 22.05 kHz 单声道,只有语音。该项目是用 Flex/ActionScript 3 编写的。它旨在在浏览器中运行,但如果有
我正在尝试对 FMOD 库中的 Sound.readData 和 Sound.lock 之间的差异进行排序(我正在使用 C#/C++ 进行编程,但我会使用任何语言来回答!)。最终目标是创建波形 Vie
我在录制我的应用程序播放的系统声音时遇到问题。与“会说话的汤姆猫”iOS 应用程序类似,我的应用程序应录制屏幕视频和声音。屏幕录制和转换为视频,工作正常,问题是使用核心音频录制音频。我是第一次使用 C
我正在使用 Java 声音通过 Clip.start() 方法播放大量声音样本。 鉴于此,控制播放音量的最佳方式是什么? 特别是,我非常希望该解决方案能够跨平台可靠地工作。 最佳答案 FloatCon
我正在尝试实现一个循环播放一系列音调的应用程序。 实际上,我使用 OpenAL 并且我对这种框架的经验是积极的,因为我也可以发出声音。 这是场景: 从 CAF 文件中加载短声音(3 秒) 循环播放该声
我正在尝试使用javax.sound.sampled库中的一些类。但是,即使在我新手看来,文件就在那里,Android Studio也不会导入它们。。是不是有什么东西没放好?。AndroidStudi
当我在游戏中移动时,我的声音不是完整播放,而是循环播放几毫秒。 这是我的代码: using System.Collections; using System.Collections.Generic;
每当我在 Android 设备上的 LibGDX 游戏中播放音效时,游戏都会卡顿。我已经在三款三星设备上尝试过这款游戏: 在 Galaxy S7 Edge (2016, Android 8) 和 Ga
我创建了一个应用程序,它播放小轨道的播放列表,一切正常,直到 Windows Phone 8.1 更新 问题是 -> 轨道结束时有奇怪的滴答声” 所以我尝试在 xbox 音乐播放器中播放轨道它也有相同
我已阅读 How to use selected value of UIPickerView as time interval for notifications?一遍又一遍,但我不知道如何将答案应用
每当我使用 Java 中的 SourceDataLine 类读取构成音频的字节时,我都会在播放时听到烦人的嗡嗡声背景噪音。谁能告诉我如何才能完全摆脱它?提前致谢。 更新:我已经发布了代码,但我的实际目
这感觉像是我在这个网站上提出的第 100 个 Java Sound 相关问题,但我无法在 Java Sound API 或 jsresources.org 的任何地方找到答案。我正在制作一个多轨录音机
我已经使用 Parse.com 在我的应用程序中实现了推送通知系统,一切正常! 我唯一的问题是当通知到达时:它不播放任何声音! 我进入设置(在我的平板电脑中),在通知下,我看到了这个: 如您所见,“声
本文整理了Java中com.bugvm.sound.YSourceDataLine类的一些代码示例,展示了YSourceDataLine类的具体用法。这些代码示例主要来源于Github/Stackov
本文整理了Java中com.bugvm.sound.YTargetDataLine类的一些代码示例,展示了YTargetDataLine类的具体用法。这些代码示例主要来源于Github/Stackov
本文整理了Java中com.bugvm.sound.YNative类的一些代码示例,展示了YNative类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,
本文整理了Java中com.bugvm.sound.YClip类的一些代码示例,展示了YClip类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些
本文整理了Java中com.bugvm.sound.YLine类的一些代码示例,展示了YLine类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些
我是一名优秀的程序员,十分优秀!