- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在为手机编写一个 android 应用程序来控制 2 个伺服电机。
因此我需要创建一个 50hz 的高振幅方波。我已经看过 AudioManager 和 AudioTrack 类的一些示例代码,但我并没有真正了解如何以可听振幅实现 50hz 的基本方波。
这是我到目前为止得到的:
package com.example.rollerball;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.support.v7.app.ActionBarActivity;
public class ToneGenerator
{
Thread t;
int sr = 44100;
boolean isRunning = true;
public void startTone()
{
isRunning = true;
t = new Thread() {
public void run() {
// set process priority
setPriority(Thread.MAX_PRIORITY);
int buffsize = AudioTrack.getMinBufferSize(sr,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
// create an audiotrack object
AudioTrack audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC, sr,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, buffsize,
AudioTrack.MODE_STREAM);
short samples[] = new short[buffsize];
int amp = 10000;
double twopi = 8. * Math.atan(1.);
double fr = 440.f;
double ph = 0.0;
// start audio
audioTrack.play();
while (isRunning) {
for (int i = 0; i < buffsize; i++) {
samples[i] = (short) (amp * Math.sin(ph));
ph += twopi * fr / sr;
}
audioTrack.write(samples, 0, buffsize);
}
audioTrack.stop();
audioTrack.release();
}
};
t.start();
}
public void stopTone(){
isRunning = false;
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t = null;
}
}
也许你们中的一些人可以帮助我!
提前致谢!
最佳答案
就目前而言,您的代码会生成一个峰值振幅为 ±10000
的漂亮干净的正弦波。可以用 16 位 PCM 表示的最大样本值是 ±1^15-1 = ±32767
,即 ~-10dB 的 FSD。
你想要一个方波。下面的代码实现了它(不是特别有效)。
for (int i = 0; i < buffsize; i++) {
short s = (amp * Math.sin(ph));
if (s > 0.0) {
sample[i] = 32767;
};
if (s < 0.0) {
sample[i] = -32767;
}
ph += twopi * fr / sr;
}
关于java - 如何在android上创建一个50hz的方波并播放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684821/
我正在尝试使用 java 在并行端口上创建一个方波。到目前为止,我已经有了这个实现。 public class Wave extends Thread { public Wave() {
我正在尝试获得宽度为 83.66 的方波。看到我用于反卷积,我希望它是准确的。这是我到目前为止所拥有的: width = 83.66; x = linspace(-400,400,10000);
如果没有任何用户交互,程序将如何识别 ADC 记录中存在的波形类型? 为了这个问题:恒定频率的三角波、方波、正弦波、半正弦波或锯齿波。电平和频率是任意的,它们会有噪音、少量失真和其他缺陷。 我也会提出
我正在尝试使用 Pygame 的 sndarray.make_sound 函数播放正弦波。但是,当我使用这个数组播放它时: np.sin(2 * np.pi * np.arange(44100) *
我正在尝试使用 AudioTrack(Android) 生成并播放方波。我已经阅读了很多教程,但仍然有些困惑。 int sampleRate = 44100; int channelConfig =
我的目标是使用 Android 的 AudioTrack 生成正弦波、正方形、三角波 和锯齿波 信号 类。 我已经尝试基于 tutorial .它的效果相对较好,尽管我并不总是确定生成的频率与目标频率
我是一名优秀的程序员,十分优秀!