【发布时间】:2016-02-24 15:16:01
【问题描述】:
我正在 Android 上制作音频应用程序,我可以简单地生成三种类型的声波 - 正弦波、锯齿波和方波。
波浪的产生很好。我打印了结果,看起来不错。但是声音很奇怪。 这是我记录的。 https://soundcloud.com/syntey/synth-sine-wave-test-nothing-to-do-here
sawtooth 和 square 是一样的,但是当我用sawtooth any 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;
}
【问题讨论】:
标签: android audio opensl sound-synthesis