【问题标题】:android AudioTrack setloop invalid valueandroid AudioTrack setloop 无效值
【发布时间】:2013-08-05 13:54:16
【问题描述】:

我生成一个 PCM 并想要循环播放声音。 我遵循文档,但 Eclipse 一直告诉我

08-05 15:46:26.675: E/AudioTrack(27686): setLoop invalid value: loopStart 0, loopEnd 44100, loopCount -1, framecount 11025, user 11025

这是我的代码:

void genTone() {
    // fill out the array
    for (int i = 1; i < numSamples - 1; i = i + 2) {
        sample[i] = Math.sin(2 * Math.PI * i / (sampleRate / -300));
    }

    // convert to 16 bit pcm sound array
    // assumes the sample buffer is normalised.
    int idx = 0;
    for (double dVal : sample) {
        short val = (short) (dVal * 32767);
        generatedSnd[idx++] = (byte) (val & 0x00ff);
        generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
    }

    //write it to audio Track.
    audioTrack.write(generatedSnd, 0, numSamples);
    audioTrack.setLoopPoints(0, numSamples, -1); 
    //from 0.0 ~ 1.0
    audioTrack.setStereoVolume((float)0.5, (float)1); //change amplitude
}



public void buttonPlay(View v) {
    audioTrack.reloadStaticData();
    audioTrack.play();
}

请帮忙~~

【问题讨论】:

  • 对不起,伙计们。我刚刚在这里找到了一个很棒的帖子=.= bin-liu.blogspot.dk/2011/12/… 只需将 numSamples 分几次,它就会开始工作。 :P

标签: android audiotrack


【解决方案1】:

来自the documentation: "endInFrames 循环结束标记以表示"

日志打印表明您的曲目包含 11025 帧,小于您尝试指定为结束标记的 44100 帧(对于 16 位立体声 PCM 音频,帧大小为 4 个字节)。

还有一点值得注意的是“必须停止或暂停轨道才能改变位置”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多