Android デバイスのオーディオ ジャックから制御可能な DC 電圧を出力したいと考えています。私の現在の解決策は、出力される波形の PCM 情報を含む 1 秒の配列を作成することです (この場合はフラットライン)。
問題は、毎秒、出力が瞬間的にゼロボルトに低下するグリッチがあることです。これは、オーディオ リソース インスタンスが作成された時点で発生していると思います。
オーディオが独自のスレッドで処理されていることがわかります。別のスレッドで generatedSnd 配列を変更します。
これを行うよりスムーズな方法はありますか?ストリーミングはやるべきことだとは思いますが、頭に浮かびません。
private class OutDACrunnable
implements Runnable {
public void run() {
while (! done) {
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat. CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
if (audioManager.isWiredHeadsetOn()) { } // use this later
audioTrack.play();
// wait until playback is complete
int x = 0;
do {
if (audioTrack == null) {
x = numSamples;
} else {
x = audioTrack.getPlaybackHeadPosition();
}
} while (x < numSamples);
if (audioTrack != null) audioTrack.release();
}
}
} // OutDACrunbable
ありがとう。