16ビットのモノラルサウンドをステレオに変換しようとしています。サウンドはバイト配列として格納されるため、私の理解では、一度に 2 バイトを複製することになります。
私はこれを正しく行っていますか?私が作成したコードは、周波数を変更します。
編集:
モノトーンの生成と保存に成功していますbyte [] generatedSnd
モノラルサウンドの再生 (動作中):
AudioTrack audioTrack = null; // Get audio track
try {
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, (int)numSamples*2,
AudioTrack.MODE_STATIC);
audioTrack.setStereoVolume(0f, 1f);
audioTrack.write(generatedSnd, 0, generatedSnd.length); // Load the track
audioTrack.play(); // Play the track
}
catch (Exception e){ }
ステレオ サウンドへの変換:
int monoByteArrayLength = generatedSnd.length;
byte [] stereoGeneratedSnd = new byte[monoByteArrayLength * 2];
stereoGeneratedSnd[0] = generatedSnd[0];
stereoGeneratedSnd[2] = generatedSnd[0];
for (int x=1; x<monoByteArrayLength; x+=2) {
stereoGeneratedSnd[x*2-1] = generatedSnd[x];
stereoGeneratedSnd[x*2+1] = generatedSnd[x];
if (x+1 < monoByteArrayLength) {
stereoGeneratedSnd[x*2] = generatedSnd[x+1];
stereoGeneratedSnd[x*2+2] = generatedSnd[x+1];
}
}
AudioTrack audioTrack = null; // Get audio track
try {
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT, (int)numSamples*2,
AudioTrack.MODE_STATIC);
audioTrack.setStereoVolume(0f, 1f);
audioTrack.write(stereoGeneratedSnd, 0, stereoGeneratedSnd.length); // Load the track
audioTrack.play(); // Play the track
}
catch (Exception e){ }
私がやろうとしているのは、1つのチャンネルだけからサウンドを再生することです