Я делаю аудио-приложение на Android, и у меня есть простая генерация трех типов звуковых волн - синусоидальной, пилообразной и квадратной.
Генерация волн в порядке. Я распечатал результат, и он выглядит хорошо. Но звук странный. Вот что я записал. https://soundcloud.com/syntey/synth-sine-wave-test-nothing-to-do-here
То же самое для пилообразного и квадратного, но когда я играю пилообразной любой A, то звук нормальный.
Кто-нибудь знает, что не так? Если я увеличиваю размер буфера, то период больше, но все та же проблема
Код для генерации синусоидальной волны:
play(JNIEnv* env, jclass clazz, jint which, jint count, jdouble freqOfTone)
{
unsigned i;
int j = 0;
double sampleRate = SAMPLERATE/freqOfTone;
switch (which) {
case SINE:
for (i = 0; i < TONE_FRAMES; ++i) {
toneBuffer[i] = sin(2.0*M_PI * i/sampleRate) * 32768;
}
nextBuffer = createResampledBuf(SINE, SL_SAMPLINGRATE_8, &nextSize);
if(!nextBuffer) {
nextBuffer = (short*) toneBuffer;
nextSize = sizeof(toneBuffer);
}
break;
}
nextCount = count;
if (nextSize > 0) {
SLresult result;
result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, nextBuffer, nextSize);
if (SL_RESULT_SUCCESS != result) {
bqPlayerRecorderBusy = 1;
return JNI_FALSE;
}
}
return JNI_TRUE;
}