经过一番故障排除后,我意识到(至少我很确定)我一直在通过 JackAudio 库向声音端口提供错误类型的值。
这是当前正在工作但会产生令人难以置信的失真声音的回调函数。
我怀疑我必须将二进制(然后转换为十进制)数据转换为float
-1 到 1 之间的信号。
我该怎么做后者?
现在我正在给它输入一个 16 位的波形音乐文件。每个样本的大小为short
。
static int Process( jack_nframes_t nframes, void * arg )
{
SamplerClass * SamplerPtr = ( SamplerClass * ) arg;
jack_default_audio_sample_t * LeftChannel, * RightChannel;
LeftChannel = ( jack_default_audio_sample_t * ) jack_port_get_buffer( LeftChannelOutputPort, nframes );
RightChannel = ( jack_default_audio_sample_t * ) jack_port_get_buffer( RightChannelOutputPort, nframes );
for( unsigned int i = 0; i<nframes; i++)
{
LeftChannel[i] = SamplerPtr->SoundFile->getSoundDataRef().at( SamplerPtr->SamplePosition ) ;
RightChannel[i] = SamplerPtr->SoundFile->getSoundDataRef().at( SamplerPtr->SamplePosition + 1;
SamplerPtr->SamplePosition = SamplerPtr->SamplePosition + 2;
}
return 0;
}
getSoundDataRef()
返回 a vector<short>
,我通过vector::at
.
我正在通过公共 int 变量跟踪样本位置SamplePtr->SamplePosition
;
这是 16 位 41000Hz 立体声波样本向量内数据格式的调试输出。因此,分配给通道的数据似乎是正确的。
[INFO] [ 18:48:50.492] 288756 vec index RCh >1844
[INFO] [ 18:48:50.492] 288757 vec index LCh >1401
[INFO] [ 18:48:50.492] 288758 vec index RCh >-1251