gpt4 book ai didi

android - 数组在 HTC One/Galaxy S4 上使用 Android 4.1.2 写入全零

转载 作者:行者123 更新时间:2023-11-29 01:52:08 25 4
gpt4 key购买 nike

我在 Android Play 商店中有两个应用程序,到目前为止都没有问题。最近有一项功能在 HTC one 和 Galaxy S4 上不起作用。我已经能够在运行 Android 4.1.2 版的 HTC 上试用它。违规代码如下:

 public void loadsine(){
for (int j=0; j<44100; j++){
double val = Math.sin(twopi*j/44100);
AndroidAudioDevice.sigBuffer[j]= (short) (val*sinemax);
}
}

它所做的是计算一个正弦波的一个周期,并将值作为一个 short 放在一个数组中,twopi 和 sinemax 是先前定义的常量,而 sigBuffer 是 short 的数组 44100 长。

除了在 HTC one 和 S4 上数组用零填充外,这工作正常。我发现我可以通过在循环中浪费一些处理周期来使其工作,如下所示:

 public void loadsine(){
for (int j=0; j<44100; j++){
double val = Math.sin(twopi*j/44100); //val between -1 and +1
AndroidAudioDevice.sigBuffer[j]= (short) (val*sinemax);
for (int i=0; i<4; i++){}
}
}

例如,除了无用的 for 循环,我还可以写入调试窗口。这是怎么回事,是 HTC 和/或三星的覆盖导致问题还是 4.1.2 问题。顺便说一句,我无法让 4.1.2 模拟器工作,它哪儿也去不了。

最佳答案

我找不到关于 sigbuffer 到底是什么的任何详细信息,除了它似乎更像是一个输出 channel 而不是输入 channel 。你的问题可能是 HTC One/S4 太快了,而 sigbuffer 是一个 DMA 接口(interface),所以数据在发送到音频子系统之前就被覆盖了。查看 [此处的 API](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/AudioDevice.html#writeSamples(short[], int, int)),也许您会更好:

public void loadsine(){
short values[44100];
for (int j=0; j<44100; j++){
double val = Math.sin(twopi*j/44100);
values[j] = (short) (val*sinemax);
}
androidAudioDevice.writeSamples(values, 0, 44100);
}

关于android - 数组在 HTC One/Galaxy S4 上使用 Android 4.1.2 写入全零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com