我正在尝试在 RemoteIO 中播放 Ogg Vorbis 文件,我使用以下代码从 vorbis 获取 PCM 样本:我正在尝试在 RemoteIO 中播放 Ogg Vorbis 文件,我使用以下代码从沃尔比斯:
ssize_t r = ov_read(ds->vf,pcm->buf,sizeof(pcm->buf),SYSTEM_ENDIAN,2,1,NULL);
根据 ov_read 上的文档,这会将样本以小端格式(16 位有符号样本)放入缓冲区中。这很好用,我一直在向 RemoteIO 提供这些数据,但是声音严重失真,尽管可以识别并在正确的时间播放。这是我正在使用的格式:
AudioStreamBasicDescription streamFormat;
streamFormat.mSampleRate = 44100.0;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
streamFormat.mBytesPerPacket = 4;
streamFormat.mFramesPerPacket = 1;
streamFormat.mBytesPerFrame = 4;
streamFormat.mChannelsPerFrame = 2;
streamFormat.mBitsPerChannel = 16;