Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓方波_Java_Android_Waveform_Synthesizer - Fatal编程技术网

Java 安卓方波

Java 安卓方波,java,android,waveform,synthesizer,Java,Android,Waveform,Synthesizer,我目前正在尝试制作一个能够产生多个波形的振荡器,但是我的方波方法产生了错误,我可能会犯一些愚蠢的错误,但任何帮助都将不胜感激。这是我的密码: import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; /** * Created by Jack on 16/01/2017. */ public class PlayWave { private fi

我目前正在尝试制作一个能够产生多个波形的振荡器,但是我的方波方法产生了错误,我可能会犯一些愚蠢的错误,但任何帮助都将不胜感激。这是我的密码:

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;

/**
* Created by Jack on 16/01/2017.
*/

public class PlayWave {

private final int SAMPLE_RATE = 44100; //maximum sample rate Audiotrack can use
private AudioTrack mAudio;
int buffsize = AudioTrack.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
private int sampleCount;

public PlayWave() {

    mAudio = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,
                            buffsize, AudioTrack.MODE_STATIC);
}

public void setWave (int frequency) {

    sampleCount = (int) ((float) SAMPLE_RATE/frequency);
    short samples[] = new short[sampleCount]; //array to hold samples
    int amplitude = 32767; //
    double twoPi = 8. * Math.atan(1.); //twoPi calculated as the arctangent of 1 multiplied by 8
    double phase = 0.0;

    for (int i = 0;  i < sampleCount;  i++) {
        samples[i] = (short) (amplitude * Math.sin(phase));
        phase += twoPi * frequency/SAMPLE_RATE;
    }
    mAudio.write(samples, 0, sampleCount);
}

public void setSquareWave (int frequency) {
    sampleCount = (int) ((float) SAMPLE_RATE/frequency);
    short samples[] = new short[sampleCount];
    int amplitude = 32767;
    double phase = 0.0;
    double twoPi = 8. * Math.atan(1.);
    for (int i = 0; i < buffsize; i++) {
        short s = (amplitude * Math.sin(phase));
        if (s > 0.0) {
            samples[i] = 32767;
        };

        if (s < 0.0) {
            samples[i] = -32767;
        }
        phase += twoPi * frequency / samples; //this loop causes errors
    }
}

public void start () {
    mAudio.reloadStaticData();
    mAudio.setLoopPoints(0, sampleCount, -1);
    mAudio.play();
}

public void stop () {
    mAudio.stop();
}
}
导入android.media.AudioFormat;
导入android.media.AudioManager;
导入android.media.AudioTrack;
/**
*由Jack于2017年1月16日创建。
*/
公共类PlayWave{
私有最终整数采样率=44100;//可使用的最大采样率Audiotrack
私人音轨mAudio;
int buffsize=AudioTrack.getMinBufferSize(采样率,AudioFormat.CHANNEL,输出单声道,AudioFormat.ENCODING,PCM,16位);
私人整数抽样计数;
公共PlayWave(){
mAudio=新的音频曲目(AudioManager.STREAM\u音乐、采样率、AudioFormat.CHANNEL\u OUT\u单声道、AudioFormat.ENCODING\u PCM\u 16位、,
buffsize、音轨、模式(静态);
}
公共波形(整数频率){
采样计数=(整数)((浮动)采样率/频率);
short samples[]=new short[sampleCount];//用于保存样本的数组
int振幅=32767//
double twoPi=8.*Math.atan(1.);//twoPi计算为1的反正切乘以8
双相=0.0;
对于(int i=0;i0.0){
样本[i]=32767;
};
如果(s<0.0){
样本[i]=-32767;
}
相位+=twoPi*频率/samples;//此循环导致错误
}
}
公共无效开始(){
mAudio.reloadStaticData();
mAudio.设定点(0,样本计数,-1);
mAudio.play();
}
公众停车场(){
莫迪奥。停止();
}
}

你能把错误添加到帖子中让我们看到吗?我已经对导致错误的循环进行了评论,尤其是这个循环。对于(inti=0;i0.0){samples[i]=32767;};if(s<0.0){samples[i]=-32767;}相位+=twoPi*频率/采样;//这个循环会导致错误。}是的,但有什么错误?如果没有stacktrace,仅仅说您得到了“errors”是毫无意义的。抱歉,我对Stackoverflow是相当陌生的,“>”运算符不能用于此声明(s>0.0),因为“s”是一个短字符,而0.0是一个双精度转换,那么它是短字符吗?(s>(短)0.0)